常用 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,新表接入时复制模板再微调,比每次从零编写更省时间也更一致。