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

Great Expectations的expect_values_to_match_regex规则在Snowflake上报错

问题分析与解决方案

Great Expectations(GE)在Snowflake环境下使用expect_column_values_to_match_regex规则时,会将正则表达式直接传递给Snowflake的REGEXP_LIKE函数执行,因此必须严格遵循Snowflake的正则语法规范,而非Python标准正则语法——这就是你之前可用的正则现在报错的核心原因。

1. SSN正则报错:重复运算符无参数

你使用的原正则:

^(?!666|000|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4}$

问题点:

  • Snowflake的REGEXP_LIKE不支持Python风格的负向预查(?!...),这直接触发了语法解析错误;
  • 虽然Snowflake兼容\d表示数字,但使用POSIX字符类[0-9]或[:digit:]的兼容性更稳定。

修正后的Snowflake兼容SSN正则:

^([0-8]\d{2}|6[0-5]\d|66[0-5])-(?!00)\d{2}-(?!0000)\d{4}$

该写法通过正向匹配合法前缀,避开了666、000和9开头的三位数字段,同时保留了中间两位非00、末尾四位非0000的校验逻辑。

2. 基础正则报错:字符类范围无效

原正则[Aa-Zz]的问题很明确:正则字符类的范围必须遵循ASCII码升序规则,a的ASCII码(97)大于Z的ASCII码(90),因此a-Z这个范围是非法的,Snowflake会直接判定为无效范围。

修正后的两种写法:

  • 标准大小写字母匹配:
[A-Za-z]
  • Snowflake支持的POSIX字符类(更简洁):
[[:alpha:]]

验证建议

在GE中使用正则前,先在Snowflake控制台直接执行REGEXP_LIKE测试有效性,比如:

SELECT REGEXP_LIKE('123-45-6789', '^([0-8]\\d{2}|6[0-5]\\d|66[0-5])-(?!00)\\d{2}-(?!0000)\\d{4}$') AS valid_ssn;

确认返回TRUE后再代入GE规则,避免无效调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:50:35