Great Expectations 数据契约实战指南:数据质量校验一次讲透
【免费下载链接】great_expectationsAlways know what to expect from your data.项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations
凌晨两点,下游报表挂了。你花两个小时排查,才发现上游悄悄把amount字段从 int 改成了 string,谁都没告诉你。这种「偷偷变」是数据管道事故最常见的来源。这篇用 Great Expectations 把数据契约和数据质量校验讲清楚,读完你能把第一条校验规则挂进流水线,下次再出事,是契约先报警,而不是你。
这个工具到底在帮你干什么
先说清数据契约是啥:一句话,它是数据生产者和消费者之间的一份约定——数据长什么格式、字段有哪些约束、多久更新一次,白纸黑字写下来,双方都得认。没这份约定之前,很多团队都栽在同一个坑里:上游改了字段没人通知、字段含义模糊两边各理解各的、出问题找半天定位不到源头、跨团队没有统一标准。
Great Expectations 就是把这个约定变成一道能跑的「质量闸门」:数据往下游走之前,先按一套预先定好的规则查一遍,过了才放行,不过就报警留痕。整条链路分三块。第一步,你用 YAML 写 Expectation(期望),声明「这份数据应该长什么样」,100+ 内置校验类型随便挑;第二步,把期望挂进 Checkpoint,流水线每次跑都自动校验;第三步,每轮校验结果由 Data Docs 渲染成可交互的报告,全团队都能看。三件套串起来,就是「定规则 → 跑校验 → 出报告」的完整闭环。
核心实现落在契约定义模块。
拿一张表跑通全流程
拿用户表举个例子,走三步。
第一步,用 YAML 写校验规则。不用背 API,纯文本声明就行。比如user_id不能为空、email必须符合标准格式:
expectation_suite_name: user_data_contract expectations: - expectation_type: expect_column_values_to_not_be_null kwargs: column: user_id - expectation_type: expect_column_values_to_match_regex kwargs: column: email regex: '^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'这 100+ 内置校验类型全在Expectations 源码里,写新规则时照着挑就行。
第二步,把 Checkpoint 挂进流水线。规则写好了,要是还得你手动跑一遍才算数,那就白搭。用 Checkpoint 把校验包起来,流水线一触发它就跟着跑:
from great_expectations.checkpoint import SimpleCheckpoint checkpoint = SimpleCheckpoint( name="user_data_checkpoint", validations=[{ "batch_request": {"datasource_name": "users_db", "data_asset_name": "users"}, "expectation_suite_name": "user_data_contract", }], ) checkpoint.run()这一部分的具体实现在Checkpoint 模块,底下跑规则的是校验引擎。
第三步,打开 Data Docs 看结果。跑完别去翻日志,直接打开自动生成的报告,哪条规则挂了、挂了多少行、失败率多少,一眼看明白:
Data Docs 由报告渲染模块自动生成,每次校验完都自动刷新,不用你手动出图。
接入你的数据源 & 看质量趋势
数据不用先拉出来再单独处理。Great Expectations 内置 20+ 数据源连接器,直接连到库里校验。常用的几个:
| 数据源 | 版本要求 | 说明 |
|---|---|---|
| PostgreSQL | 9.6+ | 关系型数据库 |
| Spark | 2.4+ | 分布式计算 |
| Pandas | 1.0+ | 内存 DataFrame |
| Snowflake | 4.30+ | 云数仓 |
接上之后,每批数据的质量指标会随时间累积成一条趋势线。哪次最大值突然窜高、哪次空值率掉了,图上一看就知道:
这些趋势图来自质量指标模块。
落地前想清楚这 3 件事
别一上来就把规则铺满,最后没人看。先回答三个问题:
- 先拿哪张表试点?挑下游影响最大、字段定义最清晰的 1~2 张表,把「定规则 → 跑校验 → 出报告」整条链路走通,再往外扩。
- 阈值先松后紧。头一个月别指望 100% 通过。先让规则跑起来、观察真实分布,再逐步收紧阈值。上来就卡死,第一天满屏红,团队很快就没人信了。
- 校验失败通知给谁?把 Checkpoint 挂进流水线,失败就推给对应的负责人和渠道。规则后面没有人,等于没有规则。
一句话总结:把「报表挂了才知道」变成「契约先报警」。想深入看,直接进官方文档;想动手翻源码,先克隆仓库:git clone https://gitcode.com/GitHub_Trending/gr/great_expectations
【免费下载链接】great_expectationsAlways know what to expect from your data.项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考