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 要按表或主题分组并纳入版本管理:阈值调整与期望增减都留下记录,才能回答某天起为什么不再告警这类问题。