如何将dbt Jinja宏设为测试默认参数并支持YAML自定义指定
实现步骤
1. 修改自定义测试的参数与逻辑
打开你的自定义测试文件valid_date.sql,新增lower_bound参数并设置默认值为默认宏的名称字符串,同时把原来直接调用宏的地方改成动态根据参数调用对应的宏:
{% test valid_date(model, column_name, exclude_condition = '1=1', lower_bound = 'today_date_milliseconds') %} SELECT {{ column_name }} FROM {{ model }} WHERE CAST({{ column_name }} AS BIGINT) < {{ macros[lower_bound]() }} AND {{ exclude_condition }} {% endtest %}
这里的macros[lower_bound]会根据传入的字符串参数,自动匹配项目中已定义的同名宏,加()就是执行这个宏并获取返回值。
2. 在YAML中替换默认宏
如果需要用其他宏作为下界,直接在测试配置的lower_bound字段中传入目标宏的名称字符串即可。比如你有一个名为yesterday_date_milliseconds的宏,配置如下:
models: - name: 你的模型名称 columns: - name: date_3 description: column for third date tests: - valid_date: lower_bound: 'yesterday_date_milliseconds'
注意事项
- 替换的宏必须是项目中已定义的(通常放在
macros/目录下),且返回值类型要和CAST({{ column_name }} AS BIGINT)的类型匹配(即数值类型) - 如果宏需要接收参数,你可以进一步扩展测试的参数设计,比如新增
lower_bound_args来传递宏的参数,但当前需求下不需要这一步
内容的提问来源于stack exchange,提问作者Aleksandra
相关产品推荐
相关产品推荐

