DBT通用测试如何基于被测表动态设置alias以固定测试名称?
解决DBT通用测试动态设置alias的问题
你的问题出在Jinja语法错误:在config()的字典参数里,给alias赋值时不需要嵌套额外的{{ }},因为已经处于Jinja的模板上下文当中了。
正确的配置写法
把你原来的代码改成这样:
{{ config({ "severity": 'warn', "tags": ["diff_check"], "alias": 'diff_check_' ~ model | trim }) }}
额外优化:处理带Schema的模型名
如果你的model变量返回的是带Schema前缀的格式(比如analytics.report_revenue),想要只保留表名部分的话,可以这样处理:
{{ config({ "severity": 'warn', "tags": ["diff_check"], "alias": 'diff_check_' ~ (model | split('.') | last | trim) }) }}
这样不管模型有没有Schema前缀,最终都会生成diff_check_report_revenue这种格式的测试名称。
验证方法
运行dbt test --select test_name:diff_check_report_revenue,如果能精准命中对应的测试,就说明alias配置生效了;也可以查看target/compiled目录下生成的测试SQL文件,文件名应该和你设置的alias一致。
内容的提问来源于stack exchange,提问作者Falkenstein
相关产品推荐
相关产品推荐

