在DBT-Snowflake模型中用run_query实现差异化物化逻辑遇阻
解决DBT-Snowflake按工作日/周末切换增量/全量加载的问题
你的问题核心是run_query返回的是agate.Table对象,不是直接的字符串值,直接用boolWeek == 'True'做判断肯定不生效。另外原代码里的SQL语句未加引号,属于语法错误。
以下是修正后的完整可运行示例:
{% set is_weekend_query %} select IFF(DAYNAME(CURRENT_DATE()) in ('Sat', 'Sun'), TRUE, FALSE) {% endset %} {% set is_weekend = run_query(is_weekend_query).rows[0][0] %} {{ config( query_tag="Test", alias="Test", schema="HUB", materialized='table' if is_weekend else 'incremental' ) }} -- 替换为你的实际模型查询逻辑 select * from your_source_table {% if is_incremental() %} -- 工作日增量加载的过滤条件,需根据你的表结构调整 where load_timestamp > (select max(load_timestamp) from {{ this }}) {% endif %}
关键细节说明:
- 用
{% set ... %}包裹SQL语句,避免dbt解析时出现语法错误 - 通过
.rows[0][0]从run_query返回的结果集中提取布尔值(用Snowflake原生BOOL类型比字符串判断更可靠) - 将config合并为单个块,用三元表达式直接切换
materialized参数,减少冗余代码 - 增量模型必须配合
is_incremental()判断和对应过滤条件,否则工作日的追加操作会变成全量插入
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

