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

如何在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 %}

代码说明

  1. 使用model对象的内置属性:
    • model.database:对应BigQuery的项目名
    • model.schema:对应BigQuery的数据集名
    • model.identifier:对应纯表名(不含项目和数据集)
  2. 加入日期判断逻辑:将last_modified_time转成日期类型,与当前日期对比,返回所有不符合条件的记录,DBT会根据是否有返回结果判断测试是否通过
  3. 给model.identifier加上单引号,确保表名作为字符串被正确解析

测试使用方法

在你的schema.yml中为目标模型配置该测试:

models:
  - name: your_model_name
    tests:
      - last_modified_time

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:35:29