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

DBT中age字段条件验证实现问题求助

在DBT中使用dbt_utils.expression_is_true验证age字段的正确写法

你的两种写法的问题:

  1. 代码1的问题:

    • expression: "age" 不是有效的布尔表达式,该参数需要传入能返回True/False的完整条件语句
    • where: "age > '110'" 给数值型的age加了单引号,会触发类型不匹配错误;另外如果你的需求是验证所有age都大于110,应该把条件放到expression中,where的作用是过滤要测试的行(比如仅测试特定分组的数据),而非定义验证规则
  2. 代码2的问题:

    • expression: '>= 110' 缺少字段名,DBT无法识别要验证哪个字段的条件,必须写出完整表达式 age >= 110

正确写法示例:

需求1:验证所有非空的age都大于等于110(结合not_null测试)

- name: age
  tests:
    - not_null
    - dbt_utils.expression_is_true:
        expression: "age >= 110"

需求2:仅验证特定行的age大于110(比如仅测试用户类型为"成人"的行)

- name: age
  tests:
    - not_null
    - dbt_utils.expression_is_true:
        expression: "age >= 110"
        config:
          where: "user_type = '成人'"

补充:如果age是字符串类型(不建议存储为字符串,若必须如此)

需先转换为数值类型再比较:

- name: age
  tests:
    - not_null
    - dbt_utils.expression_is_true:
        expression: "cast(age as int) >= 110"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:53:02