跳到主要内容

设计数据质量平台

需求

设计数据质量监控平台,实现:

  • 全链路数据质量检查(从采集到报表)
  • 异常自动告警,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: 如何自动发现数据质量问题?

答案

  1. 规则检测:预定义的规则定期执行(空值率、范围检查、一致性)
  2. 统计异常检测:基于历史数据的 3σ 或 IQR 检测异常波动
  3. 血缘传播:某张表质量告警时,自动检查所有下游表
  4. 数据 Profiling:定期计算数据分布、统计量,自动发现漂移

Q2: 数据血缘怎么采集?

答案

采集方式原理工具
SQL 解析解析 SQL AST 提取输入输出表自建 + sqlglot
调度元数据从 Airflow/DolphinScheduler 读取任务依赖Airflow API
dbt Lineagedbt 自动生成 ref() 依赖关系dbt docs
OpenLineage标准化血缘采集协议Marquez + OpenLineage

相关链接