Great Expectations 数据契约:负数金额在 CI 阶段就被拦下来

📅 2026/8/23 10:50:20
Great Expectations 数据契约:负数金额在 CI 阶段就被拦下来
Great Expectations 数据契约负数金额在 CI 阶段就被拦下来【免费下载链接】great_expectationsAlways know what to expect from your data.项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations周五下午两点仓库的任务又炸了——前晚还好好的订单金额字段这次跑出来一堆负数。往上追溯生产端说没改过一行代码往下看BI 看板已经标红。最后发现是中间表一次没通知的精度调整。读完这篇你能用 Great Expectations 写下一套数据契约让下次数据不合格时直接卡在 CI 里报错信息指到具体字段。它到底在解决什么没有它之前的日常大概是这样的一个字段空值异常平均花 40 分钟才能定位到是上游哪一层传进来的上游改了字段含义状态码 1 从待发货变成已签收下游任务凌晨三点才炸文档里的字段字典早就过期三个月跨团队对齐全靠口口相传Great Expectations 干的事说白了就是把数据长什么样才算合格写成一组可执行的断言——也就是数据契约。跑断言哪条不过它告诉你哪个字段、哪批数据、哪些行不合格。从0到1跑通先告诉它数据在哪数据源 批次定义ds context.data_sources.add_pandas_filesystem(namewarehouse, base_directory./orders) batch_definition ds.add_csv_asset(nameorders).add_batch_definition_yearly( namemonthly, regexrorders_(?Pyear\d{4})-01.csv)跑完这步batch_definition 就是后面要校验的单位。数据源的 fluent API 在 great_expectations/datasource/fluent/Pandas、SQL 等 20 多种系统都在这套 API 里。再写契约并挂上 Checkpointsuite context.suites.add(gx.ExpectationSuite(nameorders_contract)) suite.add_expectation(gx.expectations.ExpectColumnValuesToBeBetween(columnamount, min_value0)) vd context.validation_definitions.add(gx.ValidationDefinition(namem, databatch_definition, suitesuite)) result context.checkpoints.add(simple, nameorders_cp, validation_definitions[vd]).run()跑完这步当月 CSV 里只要 amount 出现负数result.success就是 False。断言库在 great_expectations/expectations/内置 100 种空值、区间、正则、唯一性都有。拆开看一个核心机制校验结果怎么落到具体行大家最好奇的一点一条断言挂了为什么不只是给你一句amount 不合规内部其实分三层。Validator 先把 Expectation 翻译成指标计算请求这列最大值多少、空值率多少执行引擎按数据源类型选后端——Pandas 在内存里算Spark/SQL 则生成 SQL 跑回去指标结果回到 Validator它才判定成败、抽出失败行样本、渲染进 Data Docs。于是契约哪里挂了从一句需要人肉排查的话变成一页能直接点开看的图。主流程编排在 great_expectations/validator/。一个真实场景一家城市配送物流公司用数据契约治理司机结算表对账一个月从人工对账 事后救火变成自动拦截 自动出报告给每公里单价加区间断言00.8 元结算里的超范围记录从日均 17 条降到 0运单号强制匹配正则^SF\d{13}$手输单号被提前拦下纠纷工单量降了约六成Checkpoint 挂进 Airflow失败自动更新 Data Docs 并通知值班平均响应时间从 2.5 小时压到 20 分钟 上手前绕不开的3个坑正则断言只匹配非空行一列空值多的字段会显示通过率很高其实是自欺欺人——给同列再补一条 NotBeNull把分母钉死Checkpoint 不会每次重新拉数据它校验的是你给的 batch_definition 那个分区想让每天查最新分区生效得用带动态分区的批次定义不然你天天在校验昨天的数据基础安装只有 Pandas 和 SQL 后端要跑 Spark/BigQuery 得装对应 extras少装的后端会在运行时才报模块缺失报错信息还挺绕快速开始git clone https://gitcode.com/GitHub_Trending/gr/great_expectations cd great_expectations pip install -e .[pandas,sqlalchemy] python -m great_expectations跑不通先看 → docs/docusaurus/docs/core周五下午那个负数金额现在会在 checkpoint 阶段就被拦下来报告直接指到出问题的行谁也不用再说我没改东西。下一篇写怎么把 expectation suite 和数据模型放一个目录做版本管理用 Git PR 把契约变更同步给下游消费方。【免费下载链接】great_expectationsAlways know what to expect from your data.项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考