我想构建一个增量模型,它利用两种不同的仓库规格,具体取决于运行的增量版本还是完全刷新版本。
我认为类似以下的事情可能是可能的,但尚未能够使其发挥作用:
{% if is_incremental() %}
{{ config(snowflake_warehouse=var("m_warehouse")) }}
{% else %}
{{ config(snowflake_warehouse=var("xl_warehouse")) }}
{% endif %}
{{
config(
materialized="incremental",
unique_key="pk_number",
on_schema_change="fail"
)
}}
-- my model logic
select 1;
这个问题的答案应该是模型文件顶部的配置块。
在您的情况下,您可以将 Jinja 内联到配置块中:
{{
config({
"materialized": "incremental",
"unique_key": "pk_number",
"on_schema_change": "fail",
"snowflake_warehouse": var('m_warehouse') if is_incremental() else var('xl_warehouse')
})
}}
注意 - 更复杂的 Jinja 逻辑在这里不起作用。有一个 PR 允许覆盖默认宏,但尚未发布:https://github.com/dbt-labs/dbt-snowflake/pull/503
我能够通过更改配置的顺序来使其工作,首先进行物化,然后稍后切换仓库:
{{ config(materialized='incremental', unique_key='session_id') }}
{% if not is_incremental() %}
{{ config(snowflake_warehouse= 'SMALL_WH') }}
{% endif %}