设计数据质量平台
需求
设计数据质量监控平台,实现:
- 全链路数据质量检查(从采集到报表)
- 异常自动告警,5 分钟内通知
- 数据血缘可视化,影响分析
架构设计
质量规则分类
| 规则类型 | 检查内容 | 示例 |
|---|---|---|
| 完整性 | 数据是否缺失 | 主键列 NOT NULL 率 ≥ 99.9% |
| 准确性 | 数据值是否合理 | 订单金额 > 0 且 < 100000 |
| 一致性 | 跨表数据是否匹配 | DWD 订单数 = ODS 订单数 ± 0.1% |
| 及时性 | 数据是否按时到达 | 分区数据 T+1 早 8:00 前就绪 |
| 唯一性 | 是否有重复数据 | 主键唯一率 = 100% |
| 波动性 | 数据量是否异常波动 | 日数据量波动 ≤ 30% |
规则配置
# 质量规则 DSL 示例
rules:
- name: order_amount_check
table: dwd_order_detail
type: accuracy
sql: |
SELECT COUNT(*) AS failed_count
FROM dwd_order_detail
WHERE amount <= 0 OR amount > 100000
threshold: 0 # 失败记录数应为 0
severity: critical
alert_channels: [wechat, email]
owner: data-team
- name: daily_volume_check
table: dwd_order_detail
type: volatility
compare_sql: |
SELECT
(SELECT COUNT(*) FROM dwd_order_detail WHERE dt = '${today}') AS today_count,
(SELECT COUNT(*) FROM dwd_order_detail WHERE dt = '${yesterday}') AS yesterday_count
threshold_pct: 30 # 波动超过 30% 告警
severity: warning
告警分级
| 级别 | 含义 | 响应时间 | 通知方式 |
|---|---|---|---|
| P0 Critical | 核心链路数据异常 | 5 分钟 | 电话 + 企微 |
| P1 High | 重要表数据质量问题 | 30 分钟 | 企微 + 邮件 |
| P2 Medium | 非核心数据波动 | 4 小时 | 邮件 |
| P3 Low | 可优化的质量问题 | 下个迭代 | 日报汇总 |
常见面试问题
Q1: 如何自动发现数据质量问题?
答案:
- 规则检测:预定义的规则定期执行(空值率、范围检查、一致性)
- 统计异常检测:基于历史数据的 3σ 或 IQR 检测异常波动
- 血缘传播:某张表质量告警时,自动检查所有下游表
- 数据 Profiling:定期计算数据分布、统计量,自动发现漂移
Q2: 数据血缘怎么采集?
答案:
| 采集方式 | 原理 | 工具 |
|---|---|---|
| SQL 解析 | 解析 SQL AST 提取输入输出表 | 自建 + sqlglot |
| 调度元数据 | 从 Airflow/DolphinScheduler 读取任务依赖 | Airflow API |
| dbt Lineage | dbt 自动生成 ref() 依赖关系 | dbt docs |
| OpenLineage | 标准化血缘采集协议 | Marquez + OpenLineage |