Great Expectations 不提供内置调度功能,需依赖 Airflow 等外部工具触发;Checkpoint 是可复用的验证单元,通过 YAML 文件定义,包含数据源、期望套件等配置;Python 中应使用 context.run_checkpoint() 并显式指定项目路径、捕获 CheckpointError;validate() 返回结果默认不包含失败详情,需手动遍历提取。

Great Expectations 本身不提供开箱即用的“自动化调度”能力——它只负责定义、运行和报告验证,调度得靠外部工具(如 Airflow、Prefect 或 cron)来触发 checkpoint。
如何定义一个可被反复调用的 Checkpoint
Checkpoint 是 GE 中执行验证的核心单元,它把数据源、Expectation Suite 和评估参数打包成一个可复用的配置。别直接写 Python 脚本调 validator.validate(),那样难维护、难审计、难集成。
- 用 CLI 初始化:运行
great_expectations init后,GE 会生成great_expectations/checkpoints/目录 - 在 YAML 文件里声明(例如
daily_sales_checkpoint.yml):name: daily_sales_checkpoint config_version: 1.0 class_name: Checkpoint run_name_template: "%Y%m%d-%H%M%S-sales-validation" validations: - batch_request: datasource_name: postgres_ds data_connector_name: default_inferred_data_connector_name data_asset_name: sales_orders expectation_suite_name: sales_orders_suite - 确保
datasource_name和expectation_suite_name已存在且拼写完全一致(大小写敏感),否则运行时抛KeyError: 'datasource_name'
如何在 Python 脚本中安全触发 Checkpoint
直接调 context.run_checkpoint() 最常用,但容易忽略上下文加载路径和异常处理。
- 必须显式指定 GE 项目根路径,否则可能读错
great_expectations.yml:context = ge.get_context(project_root_dir="/path/to/great_expectations") - 调用时捕获
ge.exceptions.CheckpointError,而不是泛泛的Exception,便于区分是配置错误还是数据问题 - 检查返回值中的
success字段,它只表示 Checkpoint 执行流程是否完成,不等于所有 Expectations 都通过:result = context.run_checkpoint(checkpoint_name="daily_sales_checkpoint")<br>if not result.success:<br> print("Checkpoint ran but some expectations failed")
为什么 validate() 返回结果里没有失败详情?
调 validator.validate() 得到的是 ValidationResult 对象,但默认不展开每个 expectation 的 failure_cases;而 run_checkpoint() 生成的 HTML 报告才完整展示行级失败样本。
立即学习“Python免费学习笔记(深入)”;
- 若需程序化提取失败字段,得手动遍历:
for result in validation_result.results:<br> if not result.success:<br> print(result.expectation_config.kwargs.get("column"), result.exception_info) - 注意
failure_cases默认是空的,除非你在 Expectation 定义时显式加了include_config=True, catch_exceptions=True, result_format="COMPLETE" - HTML 报告路径由
data_docs_sites配置决定,默认输出到great_expectations/uncommitted/data_docs/local_site/,别指望脚本里能直接拿到渲染后的内容
真正难的不是写 Expectation,而是让 checkpoint 在不同环境(dev/staging/prod)稳定读取对应的数据源凭证,并确保每次运行都基于最新 schema —— 这些细节不提前对齐,自动化跑起来反而会掩盖数据漂移问题。


















