LabHub
学习 学习路径 课程

数据流水线

灯是绿的,数字却是错的

在 LabHub 中继续学习

一句话总结

管道成功/失败是与数据的正确/错误不同的维度。 如果不检查质量,仪表板会在安静地空着的桌子上变成绿灯。 打开了。

概念图: 成功/失败 · 正确/错误 · 上游系统周六没有发送文件 · 没有人知道什么都没有发生

为什么需要这个?

在周一早上的会议上,报告说销售额比上周下降了40%。 营业团队被颠覆了。一整天都在寻找原因,下午才揭开真相—— 上游系统周六没有发送文件,管道是空文件 正常处理后载入了0件。

管道没有失败。没有错误,没有重新尝试,也没有通知。 没有。问题是没有人知道什么都没有发生 是。

四个质量轴

问题 测量
新鲜度 (freshness) 数据是什么时候 最新记录视图和现在的差异
完整性 (completeness) 有不至于有 数量、占用率
唯一性 (uniqueness) 无重复吗 按键的重复次数
有效性 (validity) 值是否遵守规则 范围·格式·参考完整性

可以用一行查询各自。

-- 신선도: 마지막 데이터가 몇 분 전인가
SELECT extract(epoch from now() - max(event_at))/60 AS lag_min FROM events;

-- 완전성: 어제 건수가 지난 7일 평균 대비 얼마인가
WITH d AS (
  SELECT date_trunc('day', event_at) AS day, count(*) AS n
  FROM events WHERE event_at >= now() - interval '8 days' GROUP BY 1)
SELECT (SELECT n FROM d ORDER BY day DESC LIMIT 1)::float
     / NULLIF(avg(n), 0) AS ratio FROM d;

-- 유일성
SELECT count(*) FROM (
  SELECT order_id FROM orders GROUP BY 1 HAVING count(*) > 1) x;

-- 유효성
SELECT count(*) FROM orders WHERE amount < 0 OR status NOT IN ('NEW','PAID','CANCELLED');

临界值不是绝对值,而是比例。

数量少于1000的通知规则很快就会变得毫无用处。服务 一旦开始,就必须不断调整临界值,但没有人愿意这样做。

相反,与自己进行比较

如果忽略工作日效果的话,每个星期一都会收到五点通知。周末流量很少。 在服务中,“与昨天相比”每周一上午发出虚假警报。 请在同一工作日之间进行比较。

数据合同

质量检查是事后应对。根本是与上游达成共识

数据合同(data contract)是生产者和消费者之间的明确承诺。

dataset: orders
owner: order-team
schema:
  order_id:   { type: string, required: true, unique: true }
  amount:     { type: decimal, required: true, min: 0 }
  status:     { type: enum, values: [NEW, PAID, CANCELLED] }
  created_at: { type: timestamp, required: true }
sla:
  freshness: 30m          # 30분 이내 데이터가 있어야 함
  completeness: 0.99      # 널 비율 1% 미만
breaking_change: 30일 전 공지

如果有合同的话,会有两种不同。

  1. **责任主体变得明确。**不是“结构发生了变化而破裂了” "违反了合同"就可以了。
  2. **可以进行自动验证。**合同文件本身就是检查规则。

把检查放在哪里?

추출 → [입력 검사] → 변환 → [출력 검사] → 적재 → [사후 검사]

最常见的错误是只进行事后检查。那样的话,已经被污染的数据 通过仪表板和其他管道传播后才知道。

要如何处理失败呢?

检查失败时,选择项有三个。

应对 什么时候
中断 (fail) 下游写错数据时。结算·结算
隔离 (quarantine) 只有部分有问题时。只排除不良行为,其余继续进行。
警告 (warn) 即使质量低也不如没有的好时候。 用于导航的数据

不能无条件中断——如果因为小事导致整个系统停止,人们就会停止检查。 把它关掉。绝对不能警告——没有人看。每个数据集 必须确定。

在现场相遇的样子

将在下面的测验中确认

通过查询实现四个质量指标,应用于实际数据集,考虑了工作日。 用相对临界值检测异常。是否会造成违反合同而被检查发现 确认后,区分并应用中断、隔离、警告这三种应对措施。