DBT中age字段条件验证实现问题求助
在DBT中使用dbt_utils.expression_is_true验证age字段的正确写法
你的两种写法的问题:
代码1的问题:
expression: "age"不是有效的布尔表达式,该参数需要传入能返回True/False的完整条件语句where: "age > '110'"给数值型的age加了单引号,会触发类型不匹配错误;另外如果你的需求是验证所有age都大于110,应该把条件放到expression中,where的作用是过滤要测试的行(比如仅测试特定分组的数据),而非定义验证规则
代码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
相关产品推荐
相关产品推荐

