隔离表是什么
隔离表(quarantine,也叫死信表)集中存放校验失败的行,把“坏数据”从主链路里摘出来,而不是让整个任务失败,也不是让脏数据悄悄混进去。典型字段有原始行内容、触发规则、来源分区与失败时间。下游消费前先看隔离量,人工或自动修复后再走幂等重放回主表。
基本信息
| 常见别名 | 死信表、异常表、error table |
|---|---|
| 核心字段 | 原始行内容、触发规则、来源分区、失败时间 |
| 分区策略 | 按天分区,配保留周期(如 30~90 天) |
| 重放方式 | 修复后按主键 upsert 回写,保证幂等 |
| 监控项 | 隔离量趋势、环比突增、积压未处理条数 |
典型使用场景
- 脏数据不阻塞主流程:坏行入隔离表,好行继续入库
- 问题定位:按规则标识聚合,快速看出是哪条规则在批量失败
- 人工修复与重放:修复后幂等回写,不影响已入库的数据
- 上游变更预警:隔离量突然升高通常意味着上游结构或口径变了
- 审计留痕:保留失败原始行,事后可追溯当时的输入
隔离表结构示例
隔离表结构示例
CREATE TABLE dw_quarantine.order_fail (
order_id BIGINT, -- 业务主键,便于按主键回查与重放
payload STRING, -- 原始行序列化内容(JSON 或分隔符文本)
dq_rule STRING, -- 触发的规则标识
src_partition STRING, -- 来源分区
fail_time TIMESTAMP -- 失败时间
) PARTITIONED BY (dt STRING); -- 按天分区,便于设置保留策略隔离量趋势
隔离量趋势
-- 隔离量趋势:与近 7 天比较,突增或出现新规则都应触发排查
SELECT dt,
COUNT(*) AS quarantined,
COUNT(DISTINCT dq_rule) AS rule_cnt
FROM dw_quarantine.order_fail
WHERE dt >= '2026-10-05'
GROUP BY dt
ORDER BY dt;三种处置方式对照
| 处置 | 适用场景 | 注意点 |
|---|---|---|
| 直接丢弃 | 确认是无效脏数据 | 要留计数与样本,避免静默丢数 |
| 修复后重放 | 字段可补全修复 | 重放必须幂等,按主键 upsert |
| 回退上游 | 根因在上游产出 | 先止损再修根因,不在稽核侧重算 |
修复后重放走幂等写入(按主键 upsert),避免修复数据与增量数据重复叠加。
隔离表要有清理策略:按天分区加保留周期或归档,只留下有追溯价值的最近一段时间,否则会无限膨胀。