如何在DBT中用Jinja访问BigQuery表元数据编写通用测试
解决DBT中BigQuery表最后修改日期通用测试问题
问题根源
你之前的代码错误在于对DBT模型变量的理解:
- 直接传入的
schema参数会被渲染成项目名,因为在BigQuery中DBT的database对应项目,schema对应数据集,但测试参数里的schema并非模型的数据集属性 model变量是完整的模型对象,直接输出会得到全路径,需用model.identifier获取纯表名
正确的通用测试代码
创建tests/generic/last_modified_time.sql文件,内容如下:
{% test last_modified_time(model) %} SELECT last_modified_time FROM `{{ model.database }}.{{ model.schema }}.__TABLES__` WHERE table_id = '{{ model.identifier }}' AND DATE(last_modified_time) != CURRENT_DATE() {% endtest %}
代码说明
- 使用
model对象的内置属性:model.database:对应BigQuery的项目名model.schema:对应BigQuery的数据集名model.identifier:对应纯表名(不含项目和数据集)
- 加入日期判断逻辑:将
last_modified_time转成日期类型,与当前日期对比,返回所有不符合条件的记录,DBT会根据是否有返回结果判断测试是否通过 - 给
model.identifier加上单引号,确保表名作为字符串被正确解析
测试使用方法
在你的schema.yml中为目标模型配置该测试:
models: - name: your_model_name tests: - last_modified_time
内容的提问来源于stack exchange,提问作者ramoniazzz
相关产品推荐
相关产品推荐

