Great Expectations数据契约:4步给数据流水线装上质检闸
Great Expectations数据契约:4步给数据流水线装上质检闸
【免费下载链接】great_expectationsAlways know what to expect from your data.项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations
凌晨3点,手机响了。下游报表的"订单金额"字段全是空值,你爬起来半小时,一路查,最后发现是上游表的金额字段从数字悄悄改成了字符串,没人通知你。这就是典型的数据契约事故。Great Expectations 是一个开源数据校验框架,让你把"数据应该长什么样"写成可执行的规则,对每一批进来的数据自动把关,出了什么问题直接指给你看。
数据契约到底在校验什么
把数据契约想成快递面单:生产者是寄件人,消费者是收件人,契约就是那张面单。面单校验什么?地址字段必须存在、电话格式必须对、重量不能是负数。数据校验也一样——字段是否存在(order_id 有值)、格式对不对(email 匹配某个正则)、取值在不在合理区间(乘客数在1到6之间)。关键在于这些规则是双方的"共同约定":生产者承诺交出来的数据合规,消费者就可以直接信任;一旦规则被违反,报错发生在寄件人那里,而不是凌晨3点的下游。
下图是一个典型的校验结果页面,每一批数据对应哪套规则、通过与否一目了然。
如果想看更完整的概念梳理,官方文档目录在 docs/。
第一次跑通校验要几步
假设你手边有一份 CSV 或者一张数据库表,最短路径是4步:
- 初始化项目:
pip install great_expectations之后调用gx.get_context()。你会看到:项目根目录下自动生成.great_expectations/配置目录。 - 连接数据:本地 CSV 用
context.data_sources.pandas_default.read_csv("data/orders.csv"),数据库则换对应的 SQLAlchemy 数据源。 - ⚠️ 写规则:建一个
ExpectationSuite,往里逐条添加校验规则——这一步就是契约本身。 - 跑校验:
batch.validate(suite)。
import great_expectations as gx import great_expectations.expectations as gxe context = gx.get_context() batch = context.data_sources.pandas_default.read_csv("data/orders.csv") suite = gx.ExpectationSuite(name="orders_contract") suite.add_expectation(gxe.ExpectColumnValuesToNotBeNull(column="order_id")) suite.add_expectation( gxe.ExpectColumnValuesToBeBetween(column="amount", min_value=0, max_value=10000) ) results = batch.validate(suite) print(results.describe())你会看到:每条规则的通过/失败状态、失败比例,外加几行失败样例数据。想深挖细节时,打开 Data Docs 页面能直接看到失败的具体行,不用再一行行捞。
你的场景适不适合用它
别因为工具流行就装,先看边界:
| 数据源 / 场景 | 是否支持 | 说明 |
|---|---|---|
| CSV/Parquet/内存中的 Pandas | 支持 | 开箱即用,上手最快 |
| SQLAlchemy 兼容的数据库(Postgres/MySQL 等) | 支持 | 覆盖主流关系库 |
| Spark/BigQuery/Snowflake 等 | 支持 | 需安装对应依赖 |
| 拦截流式数据中的实时异常 | 不支持 | 它是批处理校验,不是流式引擎 |
| 校验自然语言内容的语义合理性 | 不支持 | 只校验结构、取值和格式规则 |
一句话判断:如果你的数据是批量产出的、规则可以用"非空、区间、格式、唯一性"描述,它就是对的工具;如果想拦流式数据或校验内容的"含义",先看看别的方案。具体校验逻辑在 great_expectations/validator/ 模块里,可以进去看看每条规则是怎么执行的。
跑通之后下一步做什么
第一次校验跑通后,最有价值的一件事是把这步挂进 CI 或定时任务——规则失败时自动阻断流程,数据契约才算真正开始干活。顺手再跑一次 Data Docs 生成,所有校验结果会变成一个可浏览的静态站点,不看代码的同事也能直接看到"数据哪里不对劲":
具体怎么挂进流水线,参考 great_expectations/checkpoint/ 模块里的 Checkpoint 机制即可。
【免费下载链接】great_expectationsAlways know what to expect from your data.项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
