首页/数据/数据工程与 ETL 速查/常用 Expectation 速查

常用 Expectation 速查

常用期望覆盖行数、唯一性、取值范围、枚举集合、正则格式与统计量:表行数在区间内、主键唯一、金额非负、状态在集合内、手机号匹配正则,组合成 Suite 后可批量执行。

常用 Expectation 速查

Great Expectations 的期望覆盖四类检查:结构类(行数区间、列是否存在)、唯一与完整性(唯一、非空)、取值合法性(枚举集合、数值范围、正则格式)与统计类(均值、中位数、空值率落在区间内)。把相关的期望组合成一个 Suite 后可以按批次批量执行,失败会给出具体不符的列与样例。阈值设定要留余地:均值类期望随业务波动明显,建议按近 30 天分位数确定区间,而不是按某一天的数值拍定。

基本信息

结构类expect_table_row_count_to_be_between、expect_table_columns_to_match_ordered_list
唯一与完整性expect_column_values_to_be_unique、expect_column_values_to_not_be_null
取值合法性expect_column_values_to_be_in_set、expect_column_values_to_be_between
格式类expect_column_values_to_match_regex
统计类expect_column_mean_to_be_between、expect_column_median_to_be_between

典型使用场景

  • 主键校验:唯一加非空,两条件组合覆盖键完整性问题
  • 状态字段校验:取值必须落在业务字典集合内
  • 金额校验:大于等于 0 且在合理上限内,防止异常大额
  • 手机号、身份证等格式字段用正则校验
  • 统计画像:均值、中位数、空值率作为波动监控的输入

组合使用

组合使用
validator.expect_table_row_count_to_be_between(min_value=1000, max_value=10000000)
validator.expect_column_values_to_be_in_set("status", ["created", "paid", "shipped", "closed"])
validator.expect_column_values_to_match_regex("phone", r"^1[3-9][0-9]{9}$")
validator.expect_column_mean_to_be_between("pay_amount", min_value=10, max_value=500)
validator.expect_column_values_to_not_be_null("order_id")
validator.expect_column_values_to_be_unique("order_id")

# 说明一:枚举集合要与业务字典同步维护,字典调整后及时更新
# 说明二:均值区间按近 30 天分位数设定,避免大促期间全线告警
# 说明三:正则要与源数据格式一致(是否带国家码、是否有空格)

期望选型对照

数据类型推荐期望阈值依据常见误报原因
主键唯一 + 非空零容忍源端补发导致重复
金额区间 + 均值历史分位数促销期客单价上移
枚举字段落在集合内业务字典字典未同步新增值
格式字段正则匹配源系统格式源端格式变更或含空格
阈值别写太死:均值类期望随业务波动,建议按近 30 天分位数确定区间,并随业务节奏定期复核。
正则写法与源数据格式(是否含国家码、是否含空格)不匹配时会产生大量误报,告警一多就会被整条规则被忽略。
期望集合是资产:把常用检查按主题整理成可复用的 Suite,新表接入时复制模板再微调,比每次从零编写更省时间也更一致。

易错点

  • 均值区间按某天数值拍定,大促期间全线告警,规则在关键窗口失去参考价值
  • 正则与源数据格式不匹配(忽略国家码或空格),产生大量误报
  • 枚举集合不随业务字典更新,新增状态被误判为脏数据
  • 只用结构与唯一类期望,不做统计类波动检查,缓慢劣化无法被及时发现

数据来源与参考

  • Great Expectations 官方文档:Expectation Gallery
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌