其他
用 Great Expectations 和 dbt…
在数据管道中实施数据质量校验、建立数据契约时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 47/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 47/100 ×0.15
适用场景
用 Great Expectations通用
解决思路
- 安装 Great Expectations:pip install great_expectations
- 初始化项目:great_expectations init
- 创建数据源:great_expectations datasource new
- 通过 gx.get_context() 创建上下文
- 用 context.add_expectation_suite("orders_suite") 创建期望套件
- 添加期望,例如 ExpectColumnValuesToNotBeNull(column="order_id") 和 ExpectColumnValuesToBeUnique(column="order_id")
- 用 context.run_checkpoint(checkpoint_name="daily_orders") 执行校验
- 围绕六个数据质量维度设计检查:完整性(expect_column_values_to_not_be_null)、唯一性(expect_column_values_to_be_unique)、有效性(expect_column_values_to_be_in_set)、准确性(交叉引用校验)、一致性(expect_column_pair_values_A_to_be_greater_than_B)、及时性(expect_column_max_to_be_between)
- 按测试金字塔分层:Schema 测试(结构)、单元测试(单列)、集成测试(跨表)
- 构建 DataQualityPipeline 类,用 run_all(tables_to_validate) 批量校验多张表,并用 generate_report(results) 生成报告
- 在报告中汇总 {total_passed}/{total_tables} tables passed,逐表显示 ✅/❌、期望总数、失败数及失败检查的 observed_value
- 若任一表校验失败(not all(r.passed for r in results.values())),打印报告并 raise ValueError("Data quality checks failed!") 以中断流水线
- 尽早测试:在转换前校验源数据
- 增量测试:发现问题就补充测试
- 为每个测试编写清晰的描述文档
- 失败时告警:与监控系统集成
- 对数据契约进行版本管理,跟踪 schema 变更
适用边界 · 注意事项
- 不要测试所有内容,应聚焦关键列
- 不要忽略警告,警告往往是失败的前兆
- 不要跳过新鲜度检查,过期数据就是坏数据
- 不要硬编码阈值,应使用动态基线
- 不要孤立测试,也要测试表间关系