You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dbt宏开发疑问:生成排除指定字段的校验和时表参数如何传入?

dbt宏表参数传入指南

问题分析

你的宏当前存在两个潜在问题:

  1. 参数名source与dbt内置的source()函数重名,容易引发语法混淆
  2. 未明确表的引用方式(是数据源还是dbt模型)

修正后的宏示例

先将参数名改为无冲突的名称,比如table_ref:

{% macro generate_checksum(table_ref) %}
    SELECT HASH(*) AS hash_value
    FROM (
        SELECT * EXCLUDE (a, b, f, c, d, e, z, g) 
        FROM {{ table_ref }}
    )
{% endmacro %}

传入参数的两种场景

  • 场景1:引用dbt数据源(Source)
    如果目标表是在dbt_project.yml或sources.yml中定义的数据源,调用宏时传入source('源名称', '表名称'):

    {{ generate_checksum(source('my_source', 'user_table')) }}
    
  • 场景2:引用dbt模型(Model)
    如果目标表是你自己开发的dbt模型,调用宏时传入ref('模型名称'):

    {{ generate_checksum(ref('stg_user_data')) }}
    

额外注意事项

* EXCLUDE语法仅部分数仓支持(如Snowflake),如果使用BigQuery需替换为* EXCEPT,Redshift则需要手动列出要保留的字段。

内容的提问来源于stack exchange,提问作者0004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:35:25