|
@@ -73,7 +73,7 @@ DS 项目级 globalParams(poyee-data-warehouse 项目,所有工作流继承
|
|
|
|
|
|
|
|
## 4. raw 层 dt 语义
|
|
## 4. raw 层 dt 语义
|
|
|
|
|
|
|
|
-- **抓窗**:`update_time ∈ [${dt}, ${tdt}) = [T-1, T+1)`,48h 宽窗(raw ini reader.where)
|
|
|
|
|
|
|
+- **抓窗**:`COALESCE(update_time, create_time) ∈ [${dt}, ${tdt}) = [T-1, T+1)`,48h 宽窗(raw ini reader.where)
|
|
|
- **写入分区**:dt = `${dt}` = T-1
|
|
- **写入分区**:dt = `${dt}` = T-1
|
|
|
- **48h 宽窗设计目的**:覆盖跨日 update_time 漂移(详见 ADR-03 §零点漂移决策)
|
|
- **48h 宽窗设计目的**:覆盖跨日 update_time 漂移(详见 ADR-03 §零点漂移决策)
|
|
|
- **重跑幂等**:DataX hdfs writer 写 `dt=T-1` 单分区,INSERT OVERWRITE 单分区语义 → 同 sched 重跑结果一致
|
|
- **重跑幂等**:DataX hdfs writer 写 `dt=T-1` 单分区,INSERT OVERWRITE 单分区语义 → 同 sched 重跑结果一致
|
|
@@ -81,10 +81,10 @@ DS 项目级 globalParams(poyee-data-warehouse 项目,所有工作流继承
|
|
|
## 5. ods 层 dt 语义
|
|
## 5. ods 层 dt 语义
|
|
|
|
|
|
|
|
- **来源**:raw 双源 union — `WHERE dt IN ('${dt}', '${pdt}')` 即 raw dt=T-1 + raw dt=T-2 两个分区
|
|
- **来源**:raw 双源 union — `WHERE dt IN ('${dt}', '${pdt}')` 即 raw dt=T-1 + raw dt=T-2 两个分区
|
|
|
-- **过滤**:`DATE_FORMAT(update_time, 'yyyyMMdd') = '${dt}'`,只保留 update_time 落在 T-1 那天的记录
|
|
|
|
|
-- **写入分区**:动态分区 `PARTITION (dt)`,行级 dt = `DATE_FORMAT(update_time, 'yyyyMMdd')`,配合过滤实际只写到 dt=T-1 一个分区
|
|
|
|
|
|
|
+- **过滤**:`DATE_FORMAT(COALESCE(update_time, create_time), 'yyyyMMdd') = '${dt}'`,只保留 COALESCE(update_time, create_time) 落在 T-1 那天的记录
|
|
|
|
|
+- **写入分区**:动态分区 `PARTITION (dt)`,行级 dt = `DATE_FORMAT(COALESCE(update_time, create_time), 'yyyyMMdd')`,配合过滤实际只写到 dt=T-1 一个分区
|
|
|
- **跨日漂移修正**:raw dt=T-2 因 48h 宽窗抓到的"漂到 T-1"的部分,被 union 进 ods dt=T-1(详见 ADR-03)
|
|
- **跨日漂移修正**:raw dt=T-2 因 48h 宽窗抓到的"漂到 T-1"的部分,被 union 进 ods dt=T-1(详见 ADR-03)
|
|
|
-- **dedupe**:`ROW_NUMBER() OVER (PARTITION BY id, DATE_FORMAT(update_time, 'yyyyMMdd') ORDER BY update_time DESC) = 1`,分区内取最新版本
|
|
|
|
|
|
|
+- **dedupe**:`ROW_NUMBER() OVER (PARTITION BY id, DATE_FORMAT(COALESCE(update_time, create_time), 'yyyyMMdd') ORDER BY COALESCE(update_time, create_time) DESC) = 1`,分区内取最新版本
|
|
|
- **跨 ods dt 不去重**:同 pk 多 dt 分区并存 = 上层拉链表(SCD Type 2)的底层
|
|
- **跨 ods dt 不去重**:同 pk 多 dt 分区并存 = 上层拉链表(SCD Type 2)的底层
|
|
|
- **重跑幂等**:动态分区 INSERT OVERWRITE 只覆盖 SELECT 出现的 dt,其他历史 dt 保留(实测见 §8 + tests/integration/spark/idempotence/)
|
|
- **重跑幂等**:动态分区 INSERT OVERWRITE 只覆盖 SELECT 出现的 dt,其他历史 dt 保留(实测见 §8 + tests/integration/spark/idempotence/)
|
|
|
|
|
|