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

如何对timestamp类型字段执行dbt测试?解决日期值解析为INT的问题

解决dbt中timestamp字段的日期范围测试问题

你遇到的问题是直接传入日期字符串作为min_value时,会被dbt解析成整数,导致无法和timestamp类型的event_timestamp正确比较。这里有两种可行的解决方法:

方法一:用Jinja的cast函数显式转换类型

在min_value中使用Jinja表达式,把日期字符串强制转为timestamp类型,这样就能和字段类型匹配:

- dbt_utils.accepted_range:
    min_value: "{{ cast('2025-03-01' as timestamp) }}"

方法二:传入完整的timestamp格式字符串

直接使用包含时间部分的完整timestamp格式字符串,dbt_utils会正确识别为时间类型,而非整数:

- dbt_utils.accepted_range:
    min_value: "2025-03-01 00:00:00"

完整配置示例

修改后的yml配置如下:

models:
  - name: my_table
    description: 我的测试表
    config:
      contract:
        enforced: true
    columns:
      - name: event_timestamp
        data_type: timestamp
        description: 事件的时间戳
        data_tests:
          - not_null
          - dbt_utils.accepted_range:
              min_value: "{{ cast('2025-03-01' as timestamp) }}"

如果你的数据仓库有特定的时间转换语法,也可以直接用仓库原生函数(比如Snowflake的TIMESTAMP('2025-03-01')),同样用Jinja双大括号包裹即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:37:45