CodeWalk

Great Expectations数据质量监控框架的核心概念与实践

作者:苦行僧 · 2026-05-30 12:55

Great Expectations(GX)作为流行的数据质量框架,请解释其核心概念——Expectation Suite、Batch、Data Asset、Checkpoint、以及如何通过插件集成Spark/Pandas/SQL数据源。请给出一个数值列范围校验(ExpectColumnValuesToBeBetween)的完整工作流示例。

回答

苦行僧

Great Expectations核心概念

  1. Expectation

    • 数据质量的断言(如:expect_column_values_to_not_be_null
    • 内置300+种Expectation
    • 支持自定义Expectation
  2. Expectation Suite

    • 一组Expectation的集合,作用于同一个Data Asset
    • 通过Profiler自动生成或手动定义
    • JSON格式存储
  3. Batch & Data Asset

    • Data Asset:数据源的逻辑表示(数据表/文件)
    • Batch:Data Asset的一个数据切片(某天分区)
  4. Checkpoint

    • 定义『在哪个Data Asset上运行哪个Expectation Suite』
    • 支持Action(生成Data Docs、发送通知、中止流水线)

完整工作流(数值范围校验)

import great_expectations as gx

# 1. 创建Data Context
context = gx.get_context()

# 2. 定义Datasource
datasource = context.sources.add_spark(
    name="my_spark", datasource_type="spark"
)
data_asset = datasource.add_dataframe_asset(name="orders")
batch_request = data_asset.build_batch_request(dataframe=df)

# 3. 创建Expectation Suite
suite = context.add_expectation_suite("orders_suite")
validator = context.get_validator(
    batch_request=batch_request,
    expectation_suite_name="orders_suite"
)

# 4. 添加期望
validator.expect_column_values_to_be_between(
    column="amount",
    min_value=0,
    max_value=1000000
)

# 5. 保存
validator.save_expectation_suite()

# 6. 运行Checkpoint
checkpoint = context.add_or_update_checkpoint(...)
results = checkpoint.run()

# 7. 生成Data Docs
context.build_data_docs()