Great Expectations(简称 GX)是开源数据质量验证框架,核心思路是把「数据应该长什么样」声明为 Expectation(期望),再对 Pandas、Spark、SQL 等数据源执行批量验证,并自动生成可分享的 HTML 数据文档(Data Docs)。它解决的核心问题是:数据管线中散落各处的临时校验脚本不可复用、不可追溯、不可审计,质量问题往往到建模或上线阶段才暴露。GX 将质量规则集中管理、版本化、可调度,让数据团队在接入、清洗、建模、上线每个环节都用同一套「质量契约」把关。本篇按「速览 → 安装 → 上手 → 核心能力 → 生产部署 → 选型 → 场景 → 误区 → 面试题」组织,读完即可把 GX 1.x 接入项目。

岗位关联

掌握 GX 意味着你具备工程化数据质量治理的落地能力——这是 AI/数据团队从「调模型」走向「管数据」的关键技能。

目录
  1. 为什么需要 Great Expectations:质量规则散落 → 声明式契约集中治理
  2. 安装与环境配置:3 步就绪
  3. 快速上手:10 分钟跑通第一个质量验证
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
工具类型
数据质量验证框架(开源)
开发商
Great Expectations 团队(美国)
开源协议
Apache 2.0(可商用)
GitHub Stars
无
主要语言
Python
当前版本
1.x(2024 正式版起)
安装方式
pip install great_expectations
上手难度
★★★☆☆(中等)
适合人群
数据工程师·数据质量工程师·ML/AI 工程师
同类工具
Soda Core·dbt tests·Pandera
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Great Expectations:质量规则散落 → 声明式契约集中治理

数据质量事故往往在管线深处爆发:ETL 空值没有拦截、金额出现负数、主键重复导致下游 join 膨胀。多数团队用临时脚本 if not df.isnull().any() 或分散在各环节的断言来拦截,但这些检查不可复用、没有文档、没有历史版本,换一个数据源就要重写。等到模型训练或报表上线才发现脏数据,溯源成本极高。

GX 把质量规则定义为声明的「期望」(Expectation),例如「字段 X 不为空」「金额在 0–100000 之间」;一组期望打包成 Expectation Suite,相当于数据集的质量契约。通过 Checkpoint 把数据源、套件、报告动作绑定,批量数据进入时统一校验,输出结构化结果并自动渲染 Data Docs 报告。规则可以跨 Pandas、Spark、SQL 复用,也能在 CI/CD 和调度系统中作为质量门禁,失败即阻断下游任务。

与 Soda 偏重监控告警、dbt tests 与模型绑定、Pandera 内嵌 Python 运行时的定位不同,GX 强调「契约 + 报告 + 协作」:开发期用 Notebook 交互设计规则,生产期用 Checkpoint 执行,业务方通过 Data Docs 查看质量报表。这种模式适合质量规则需要长期演进、跨团队沉淀的场景。

安装与环境配置:3 步就绪

步骤一:安装。 建议在独立虚拟环境中安装,避免与既有依赖冲突。GX 1.x 的核心安装命令只有一个。

步骤二:配置。 首次调用 gx.get_context() 会自动初始化项目级的 Data Context 配置目录(存放数据源、套件、Checkpoint 定义)。连接 SQL 数据仓库需额外安装对应驱动,例如 PostgreSQL 需要 pip install sqlalchemy psycopg2-binary;使用 Spark 则需 pip install pyspark。

步骤三:验证。 打印版本号确认安装成功。

bash7 行
mkdir gx_demo && cd gx_demopython -m venv .venvsource .venv/bin/activate    # Windows 使用 .venv\Scripts\activate pip install great_expectations python -c "import great_expectations as gx; print(gx.__version__)"

快速上手:10 分钟跑通第一个质量验证

最小可用流程的思路:构造一份含空值与负金额的订单示例数据,声明两条期望(order_id 不为空、金额在合法区间),执行验证并观察结论。整个流程不需要额外服务,本地 Python 即可跑通。

1. 在 gx_demo 目录新建 validate_demo.py,粘贴以下脚本。

2. 运行 python validate_demo.py。

3. 观察输出:本例中两条期望均失败(order_id 含空值、amount 含 -10.0),整体 success 为 False,这正是 GX 的拦截效果。

进阶技巧:验证结果对象的 results 列表中有每条期望的观测值(如空值数量 missing_count、超界行数),可用于告警日志或写入监控系统。生产环境应将套件定义与批量验证分离,套件在初始化阶段定义,调度阶段只执行验证。

python29 行
# validate_demo.py — GX 1.x 最小验证示例import great_expectations as gximport pandas as pd df = pd.DataFrame({    "order_id": ["A001", "A002", "A003", None],    "amount": [100.0, 250.5, -10.0, 88.0],    "status": ["paid", "paid", "refunded", "paid"],}) context = gx.get_context()datasource = context.data_sources.add_pandas(name="orders_datasource")asset = datasource.add_dataframe_asset(name="orders_asset")batch = asset.get_batch(dataframe=df) suite = context.suites.add(gx.ExpectationSuite(name="orders_suite"))suite.add_expectation(    gx.expectations.ExpectColumnValuesToNotBeNull(column="order_id"))suite.add_expectation(    gx.expectations.ExpectColumnValuesToBeBetween(        column="amount", min_value=0, max_value=100000    )) result = batch.validate(suite)print("验证通过:", result.success)for r in result.results:    print(r.expectation_config.expectation_type, "->", r.success)

核心能力详解:5 大支柱

支柱一:声明式期望体系。 Expectation 是 GX 的最小质量规则单元,内置 100+ 种期望,覆盖单列值(非空、唯一、范围、枚举)、跨列关系、表级统计(行数、均值)等。规则用 Python 声明,不写 SQL 或自定义断言,天然可读、可复用。

支柱二:Expectation Suite。 一组期望的有序集合,相当于数据集的质量契约。多人口径一致:数据团队定义规则,业务方审阅规则,后续所有验证共用同一套契约,避免「生产验收一套、临时检查一套」。

支柱三:多数据源支持。 通过 Data Source / Data Asset 抽象,同一套 Expectation 可作用于 Pandas DataFrame、Spark DataFrame 以及 PostgreSQL、MySQL、BigQuery、Snowflake 等 SQLAlchemy 数据源。规则不绑定底层引擎,迁移数据栈时质量契约无需重写。

支柱四:Checkpoint。 把数据源、数据资产、期望套件与验证后的动作绑定成可执行工作流。Checkpoint 可在 Airflow、Prefect、cron 中被反复调用,每次运行产出结构化结果,失败时可通过退出码或异常阻断下游任务,是把 GX 从「Notebook 演示」推向「生产门禁」的关键组件。

支柱五:Data Docs。 自动渲染的 HTML 质量报告,展示每条期望的通过状态、观测值和可视化分布。报告可分享给非技术同事,也可以在 CI 或调度任务结束后归档,形成可追溯的质量审计记录。

生产部署与监控:从上线到运维

部署方式一:调度脚本 + Airflow/Prefect/cron。 在初始化阶段一次性定义数据源、资产与套件并落盘到 Data Context 配置目录;调度阶段执行独立 Python 脚本,读取已定义的资产、获取当日数据、运行验证、按失败抛出异常。以 Airflow 为例,将上述脚本封装为 PythonOperator,失败即标记任务失败并阻断下游依赖。

部署方式二:GX Cloud 托管。 商业托管版提供云端 Data Context、套件管理与 Data Docs 托管,无需自建文档服务或存储验证历史。适合多团队共享质量规则、需要统一审计平台的场景;开源版功能完整,可作为选型起点,后续按需迁移。

可观测性。 GX 本身不提供监控面板,验证结果以 ExpectationSuiteValidationResult 结构化输出,含整体 success 与逐条期望的成功状态、观测值。实践中把结果 JSON 写入数仓或日志系统,再对接 Grafana/Prometheus 告警;Data Docs 作为人工复盘入口。CI 场景下以进程退出码作为质量门禁信号。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>坑 1:把 GX 装进全局 Python 环境,依赖冲突后排查困难;始终用虚拟环境。</li><li>坑 2:混用 0.x 与 1.x API(create_expectation_suite、run_validation_operator 等老调用),报错难以定位;新项目以官方 1.x 文档为准。</li><li>坑 3:只记录 success 布尔值,缺失失败明细;应同时记录每条期望的成功状态和观测值,便于问题回溯。</li><li>坑 4:每次调度都重新 add 同名数据源或套件,触发重名报错;生产环境用初始化脚本一次性定义,调度阶段只读取与验证。</li></ul>

维度Great ExpectationsSoda Coredbt testsPandera
定位声明式期望驱动的数据质量验证框架基于 YAML 的轻量数据质量监控dbt 模型内嵌测试机制DataFrame 运行时校验库
编排范式Data Context + Checkpoint 对象模型CLI 命令 + 定时调度dbt 模型依赖图内声明Python 代码内嵌执行
类型约束Expectation Suite(100+ 期望类型)SQL 检查 + YAML 断言YAML 声明 + SQL 自定义测试DataFrameSchema 数据类校验
学习曲线中高(概念较多,API 重构过)低(YAML 简单直接)低(熟悉 dbt 后零成本)中(需理解 Schema 体系)
生态集成Airflow、Prefect、Jupyter、GX Clouddbt、Airflow、K8s、Soda Clouddbt 生态原生(与模型同生命周期)Pandas/Polars 数据处理栈
生产部署Checkpoint 脚本 + 调度器/托管云CLI 入 CI 或 cron,结果送云dbt run/test 一体化执行打包进 Python 应用或流水线
LicenseApache 2.0Apache 2.0Apache 2.0MIT
适合谁需要跨数据源契约和可视化报告的团队想快速给关键表加监控的中小团队已用 dbt 管理整个数仓管线的团队数据科学家做本地 DataFrame 校验

选型建议:已在用 dbt 管理数仓模型,优先选 dbt tests,零额外工具;需要跨 Pandas/Spark/SQL 的通用质量契约、自动报告与团队审阅流程,选 GX;只想快速给关键表和数仓加告警监控,Soda Core 更轻;数据科学家想在 Python 应用内部做 DataFrame 强类型校验,Pandera 最顺手。

版本迭代

GX 从 0.x 系列走向 1.x 的主线是「API 简化与稳定」。0.x 时代围绕配置文件与 CLI,接口频繁演变;1.x 于 2024 年转为 Python-First 对象模型,以 context/data source/suite/batch 为核心,明确稳定 API。(截至训练数据 2024 年中,可能已有更新版本)

版本时间变化提升
0.16.x2022数据源架构重构引入 Data Source / Data Connector 分层,降低多后端接入成本
0.18.x2023云端与文档体验GX Cloud 开放试用,Data Docs 渲染与可读性增强
1.0.02024-01Python-First API 正式版对象模型全面重构,提供 get_context、data_sources、suites、batch.validate 新 API
1.3.x2024核心稳定性与云集成针对 1.0 的社区反馈修复问题,扩展数据源支持与 GX Cloud 集成
结论

GX 没有类似 ML 基准的统一公开评分,版本间差异主要体现在 API 结构与稳定性实测。从 0.x 到 1.x,验证调用从「ValidationOperator + 命令行」变为直接 batch.validate(suite),自定义 Expectation 更简单,验证吞吐也有改善。新项目直接用 1.x;存量 0.x 项目迁移时需把老调用逐一改写为新的对象模型,不建议混合使用。

AI 应用场景

RAG 知识库入库质量把关

阶段:数据接入与检索准备阶段

解决的问题:RAG 质量高度依赖入库语料。文档切片后的空文本、重复 chunk、元数据缺失会直接污染向量库。传统方式在各脚本里零散做 if 判断,无统一记录。GX 在切片写入向量库前用期望套件校验 content 非空、chunk_id 唯一、chunk 字符数在设定区间,失败则阻断入库。

具体案例:某文档问答项目对 120 万条切片运行 8 条期望,拦截 6.3% 空 content、2.1% 重复 chunk;过滤后线上检索 hit@5 提升约 12%,向量化调用成本下降约 8%。

Agent 工具输出结构校验

阶段:Agent 编排中的工具返回校验

解决的问题:LLM 调用工具后输出偶发缺字段、类型异常,直接传给下游函数会抛错。GX 把工具输出包装成 DataFrame 后,用非空、类型、枚举值期望做统一校验,替代散落的 isinstance 判断。

具体案例:多工具 Agent 平台对每趟会话的工具返回运行 5 条期望,下游解析报错从周均 3 次降到接近 0;问题定位时间从小时级降到分钟级。

ML 特征管道上线前基线确认

阶段:特征工程与模型上线前检查

解决的问题:特征表全列缺失、值域异常会在训练或推理时暴露,且难以溯源。GX 在特征任务完成后立刻验证均值、最值、非空率等基线期望,先于漂移检测发现工程性故障。

具体案例:推荐系统特征平台在每日特征产出后执行 15 条基线期望,故障发现时间从「训练启动后」提前到「特征生成后」;单次事故平均缩短排查工时约 4 小时。

常见误区

误区网上教程写的是 context.create_expectation_suite()、run_validation_operator(),我照抄到新版却一直报错,是不是安装有问题?

正解GX 在 2024 年进入 1.x,API 全面重构。1.x 以 context.data_sources、context.suites、batch.validate() 为核心,旧的 create_expectation_suite、ValidationOperator 等调用大多已废弃或改名。新项目直接看官方文档的 1.x 入门,不要照搬 2023 年之前的教程。

为何常见:搜索引擎首页多是 0.x 时代的高赞教程,初学阶段难以分辨版本差异。

误区我配好数据源,GX 会自动把缺失值、重复记录、异常值全部找出来并校验。

正解GX 不会自动分析数据。每条质量规则都必须显式声明为 Expectation,或用 Data Assistant(数据助手)基于样本自动生成「候选期望」后再人工确认。未声明为期望的字段即使有脏数据也不会报失败。

为何常见:产品强调「自动化验证」,容易把「自动执行与报告」误解为「自动发现规则」,实际规则设计仍依赖人来完成。

误区校验失败后 GX 会把空值补上、把重复行删掉,数据自己就干净了。

正解GX 只做验证与报告,绝不修改底层数据。修复逻辑必须自行实现(清洗脚本、转换任务、人工介入)。GX 的价值是指出「哪里脏、有多脏」,而不是替你清洗。

为何常见:很多数据工具(如 dbt 的测试伴随模型刷新)会让人误以为验证框架同时具备修复能力。

误区结果里 success 是 True 就够了,其他字段没必要看。

正解success 只是整体结论。生产上需要知道哪条期望失败、受影响行数和观测值,这些在结果对象的 results 明细和 Data Docs 报告里。只记录布尔值会让问题回溯无从下手。

为何常见:最小示例通常只打印 success,掩盖了明细字段对排障和审计的实际价值。

面试题

Q1. GX 中用于声明数据质量规则的核心对象是?

单选题 · easy

  • A.Expectation 规则对象← 正确答案
  • B.Model 模型对象
  • C.Metric 指标对象
  • D.Feature 特征对象

答案:A。Expectation 是 GX 的质量规则单元,声明「某列应满足什么条件」;Suite 是期望的集合而非单条规则;Metric 是验证时计算的观测值;Model 与 GX 无关。

Q2. 下面哪条命令能正确安装 GX 1.x?

单选题 · mid

  • A.pip install great-expectation
  • B.pip install great_expectations← 正确答案
  • C.pip install great-experiences
  • D.pip install gx-quality-framework

答案:B。官方包名是 great_expectations(下划线连接);A 少了复数 s、C 是拼写错误构造的包名、D 并不存在,安装后均无法 import great_expectations。

Q3. GX 1.x 中 Data Context 的核心职责包括哪些?

多选题 · mid

  • A.管理数据源与数据资产← 正确答案
  • B.维护与版本化期望套件← 正确答案
  • C.直接训练机器学习模型
  • D.运行 Checkpoint 并输出结果← 正确答案

答案:ABD。Data Context 在 1.x 中统一管理数据源(data_sources)、期望套件(suites)和 Checkpoint(checkpoints),并提供验证入口;训练模型不在其职责范围内。

Q4. GX 1.x 中,把 pandas DataFrame 变成可验证数据资产的做法是?

单选题 · hard

  • A.add_pandas 与 add_dataframe_asset 组合← 正确答案
  • B.create_dataframe_schema 单独一步
  • C.gx_load_dataframe 单独函数调用
  • D.register_pandas_dataframe 单独调用

答案:A。GX 1.x 的流程是 context.data_sources.add_pandas(name=...) 建立数据源,再 datasource.add_dataframe_asset(name=...) 声明资产,最后 asset.get_batch(dataframe=df) 包装数据;其余选项不是 GX 的 API 命名。

Q5. 相比裸 Python assert,GX 的核心价值有哪些?

多选题 · mid

  • A.自动生成 HTML 数据文档报告← 正确答案
  • B.期望套件集中管理与版本化← 正确答案
  • C.自动修复检测到的数据问题
  • D.同一套期望跨 pandas/Spark/SQL 复用← 正确答案

答案:ABD。GX 的价值在于规则沉淀(Suite)、可视化报告(Data Docs)与跨数据源复用;它只验证不修改数据,C 错误。

Q6. Great Expectations 采用的开源协议允许什么?

单选题 · easy

  • A.可商用与再分发,需保留版权声明← 正确答案
  • B.仅限个人学习与科研用途
  • C.禁止修改与二次发布
  • D.仅限非盈利组织个人使用

答案:A。GX 采用 Apache 2.0,允许商用、修改、再分发,前提是保留版权与许可声明;B、C、D 描述的限制与 Apache 2.0 不符。

Q7. GX 1.x 中调用 batch.validate(suite) 返回的结果对象类型是?

单选题 · hard

  • A.ExpectationSuiteValidationResult 对象← 正确答案
  • B.DataQualityValidationReport 对象
  • C.BatchValidationReport 对象
  • D.MetricComputationReport 对象

答案:A。验证返回 ExpectationSuiteValidationResult,包含整体 success 属性与逐条结果的 results 列表;其余选项不是 GX 的返回类型。

Q8. 将 GX 验证接入生产调度的常见方式有哪些?

多选题 · mid

  • A.Airflow 中 PythonOperator 调用← 正确答案
  • B.Prefect 中自定义 task 封装← 正确答案
  • C.人工打开 Notebook 逐个执行
  • D.cron 定时运行验证脚本← 正确答案

答案:ABD。生产调度通常把验证脚本封装为 Airflow/Prefect 任务或由 cron 定时执行,用退出码或异常标记失败;手动在 Notebook 中执行不属于生产调度方式。

Q9. 以下哪个 Expectation 用于断言某列不存在空值?

单选题 · easy

  • A.ExpectColumnValuesToNotBeNull← 正确答案
  • B.ExpectColumnValuesToBeUnique
  • C.ExpectColumnValuesToBeBetween
  • D.ExpectColumnMeanToBeBetween

答案:A。ExpectColumnValuesToNotBeNull 断言列值不允许为空;Unique 检查唯一性、Between 检查值域范围、Mean 检查均值区间,功能各不相同。

Q10. 关于 GX 数据源与验证行为的正确说法是?

多选题 · hard

  • A.支持 Pandas 与 Spark 等多种数据源← 正确答案
  • B.验证失败时自动回滚源数据变更
  • C.Data Docs 报告可自动生成← 正确答案
  • D.Expectation Suite 是一组期望的集合← 正确答案

答案:ACD。GX 通过抽象层支持 Pandas、Spark、SQL 等数据源;Data Docs 可自动渲染;Suite 确为期望集合。B 错误:GX 只验证不修改,也不会回滚任何源数据。