I have the following code
{{
config(
post_hook='{{ merge_insert("postgres.public.site", this, ["site_id", "display_name", "kind", "config", "disabled", "name", "instance_id", "created_at", "updated_at", "platform_object_id", "connection_id"], ["display_name", "name", "platform_object_id", "created_at", "updated_at"], ["connection_id", "platform_object_id"]) }}'
)
}}
select
gen_random_uuid() as site_id,
name as display_name,
'CONNECTION'::sitekindenum as kind,
'{}'::json as config,
FALSE as disabled,
name as name,
'{{ var("instance_id") }}'::uuid as instance_id,
created_at,
updated_at,
id as platform_object_id,
'{{ var("connection_id") }}'::uuid as connection_id
from
{{ ref('stg_locations') }}
As we can see, the post-hook part is extremely long (calling a macro with several lists are arguments)
I am trying to break it down by assigning the list arguments to “variables” that are specific to models.
I tried to use {% set %}
. But my understanding is that “local variables” in set
is ignored during compiling time in config
block.
What is the right way to do so?
Another questions, if these variables are execution time dependent, e.g., say one argument to the macro should be all columns in a table and can be obtained by calling [adaptors.get_columns_in_relation
]( adapter | dbt Docs (getdbt.com)), how shall I make it available to the post-hook during compiling time?