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

DBT中yyyy-mm-dd格式日期校验的实现求助

DBT中yyyy-mm-dd日期校验报错的解决办法

问题根源:YAML的转义字符处理

你写的正则表达式里的\d和\-在YAML配置文件中需要特殊处理——YAML会将单个反斜杠视为转义符,直接写会导致正则中的关键匹配规则丢失,进而触发报错。

修正后的正则配置

有两种方式解决转义问题:

  1. 双反斜杠转义:把每个反斜杠替换成两个反斜杠,让YAML正确识别正则中的转义符:
- dbt_expectations.expect_column_values_to_match_regex:
    regex: "^\\d{4}\\-\\(0[1-9]|1[012]\\)\\-\\(0[1-9]|[12][0-9]|3[01]\\)$"
  1. 单引号包裹正则:用单引号把正则表达式括起来,YAML会忽略内部的转义处理,直接将内容传递给dbt_expectations:
- dbt_expectations.expect_column_values_to_match_regex:
    regex: '^\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$'

额外排查点:数据库正则语法兼容性

如果修正后仍报错,要检查你使用的数据库是否支持\d匹配数字:

  • 像PostgreSQL支持\d,但BigQuery、Redshift等部分数据库需要用[0-9]替代\d,调整后的正则:
- dbt_expectations.expect_column_values_to_match_regex:
    regex: '^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$'

更优方案:用日期专属校验规则

正则只能校验格式,无法识别像2023-02-30这种格式合法但实际无效的日期。推荐使用dbt_expectations专门的日期校验规则,既能验证格式又能确保日期合法:

- dbt_expectations.expect_column_values_to_be_date:
    date_format: '%Y-%m-%d'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:05:18