首页/数据/数据工程与 ETL 速查/Great Expectations 数据校验入门

Great Expectations 数据校验入门

Great Expectations(GX)用“期望”(Expectation)描述数据应满足的条件,对批次数据跑校验并生成可读报告;核心对象是数据源、批次、校验器与 Expectation Suite,适合在管道中做可复用校验。

Great Expectations 是什么

Great Expectations(简称 GX)是 Python 生态的数据校验框架:用“期望”(Expectation)声明数据应该满足的条件,例如列值非空、唯一、落在某个集合内,再对某个批次数据执行校验并产出可读报告。它的组织方式是数据源(DataSource)提供批次(Batch),校验器(Validator)对批次执行一整套 Expectation Suite,结果写入 Data Docs。适合在 Airflow、Spark、dbt 等管道里把校验做成可复用、可追踪的环节。

基本信息

语言与生态Python,支持 Pandas、Spark、SQL 数据源
核心对象DataSource、Batch、Validator、Expectation Suite
输出校验结果对象与 Data Docs 报告
集成Airflow、Spark、dbt、调度平台回调
典型位置入库前校验、加工后校验、上线前抽样验收

典型使用场景

  • 数据入湖前校验源文件的关键字段是否完整、格式是否正确
  • 加工产出后校验行数区间、主键唯一与金额非负,异常时阻断下游
  • 把 Expectation Suite 纳入 CI,模型变更后先跑样本分区校验再发布
  • 生成 Data Docs 报告发给业务方,作为交付验收的证据留档
  • 历史批次回溯校验,摸底某段时间的数据质量问题

DataFrame 校验示例

DataFrame 校验示例
import pandas as pd
import great_expectations as gx

df = pd.read_csv("data/orders.csv")
context = gx.get_context()
validator = context.sources.pandas_default.read_dataframe(df)

validator.expect_column_values_to_not_be_null("order_id")
validator.expect_column_values_to_be_unique("order_id")
validator.expect_column_values_to_be_between("amount", min_value=0)
result = validator.validate()
print(result.success)   # 失败时按业务决定阻断还是告警

核心对象职责

对象作用配置要点
DataSource描述数据从哪来区分 Pandas、Spark、SQL 三类源
Batch一次校验的数据范围通常按分区分批,避免全量
Validator承载期望并执行校验可复用同一套 Suite
Expectation Suite一批期望的集合按主题或表组织,便于复用
Checkpoint批量运行并写结果接调度,决定动作与告警
GX 不同大版本的 API 差异较大(上下文与数据源的写法多次调整),升级前对照官方迁移指南改代码,不要在生产环境里直接升大版本。
校验对象要限定在批次或分区上:直接对整个生产表跑 GX,校验本身可能比被校验的作业更耗资源,且失败信息难以对应到具体日期。
只跑校验不落结果,历史通过率与失败次数都无法追踪;把校验结果写入稽核表或用 Checkpoint 统一出口,质量看板才有数据来源。
Expectation Suite 要按表或主题分组并纳入版本管理:阈值调整与期望增减都留下记录,才能回答某天起为什么不再告警这类问题。

易错点

  • 把 GX 当通用工具对生产大表全量跑,校验本身拖垮引擎,还影响下游产出窗口
  • 只跑校验不落结果,历史通过率无法追踪,事后复盘没有证据
  • 升级 GX 大版本时不看迁移说明,管道在发版当天因 API 变更直接失败
  • 期望阈值按单日数值拍定,业务波动期告警不断,团队逐渐忽略校验结果

数据来源与参考

  • Great Expectations 官方文档(Expectations 与 Validator)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌