Browse Source

docs(kb): ADR-14 标记被取代——实测 raw 最健康,小文件在 ods/dwd 动态分区

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 3 weeks ago
parent
commit
7387324498
1 changed files with 19 additions and 1 deletions
  1. 19 1
      kb/93-架构决策.md

+ 19 - 1
kb/93-架构决策.md

@@ -568,7 +568,7 @@
 
 
 ### ADR-14 小表小文件治理:全量快照(类 1)vs 增量 + raw TTL(类 2)分治
 ### ADR-14 小表小文件治理:全量快照(类 1)vs 增量 + raw TTL(类 2)分治
 
 
-- **状态**:草案(方向记录,待实施
+- **状态**:被 ADR-15 取代(病灶定位错误
 
 
 - **背景**:raw 层小文件累积。查证实况:DataX 每分区落 **1 个文件**(`channel=10` 未 fan-out,并非"每 channel 一文件"),两大交易表分区 ~400KB、fillback 历史大分区 `dt=20211027` 114MB 均健康;碎点集中在**低量小表(panini KB 级)× 按天分区无限增长**。按 ADR-03,raw 是落地暂存、ods 是历史真源(跨 dt 多版本),且 ods 每日只读 `raw.dt IN (${dt}, ${pdt})` 两天——更老的 raw 日分区对日常链路是死重。
 - **背景**:raw 层小文件累积。查证实况:DataX 每分区落 **1 个文件**(`channel=10` 未 fan-out,并非"每 channel 一文件"),两大交易表分区 ~400KB、fillback 历史大分区 `dt=20211027` 114MB 均健康;碎点集中在**低量小表(panini KB 级)× 按天分区无限增长**。按 ADR-03,raw 是落地暂存、ods 是历史真源(跨 dt 多版本),且 ods 每日只读 `raw.dt IN (${dt}, ${pdt})` 两天——更老的 raw 日分区对日常链路是死重。
 
 
@@ -603,3 +603,21 @@
   - 类 1 表出现需按天增量的下游 → 转类 2
   - 类 1 表出现需按天增量的下游 → 转类 2
   - 迁 Iceberg / Hudi(原生小文件合并 + MERGE INTO + 分区生命周期)→ 快照 / TTL 两套方案可简化统一
   - 迁 Iceberg / Hudi(原生小文件合并 + MERGE INTO + 分区生命周期)→ 快照 / TTL 两套方案可简化统一
   - 表数据量级或变更率变化使 df / di 判据失效 → 重新分类
   - 表数据量级或变更率变化使 df / di 判据失效 → 重新分类
+
+- **2026-07-10 实测证伪**(本 ADR 因此被 ADR-15 取代):
+
+  按库分解 `/user/hive/warehouse/` 文件分布:
+
+  | 库 | 文件数 | 总量 | 平均文件 | 小文件占比 |
+  |---|---|---|---|---|
+  | `ods.db` | 337,092 | 48.6 GB | 0.14 MB | 99.9% |
+  | `dwd.db` | 312,363 | 6.7 GB | 0.02 MB | 100.0% |
+  | `dws.db` | 46,151 | 183 MB | 0.004 MB | 100.0% |
+  | `raw.db` | 2,446 | 156 GB | 63.87 MB | 87.2% |
+  | `tdm.db` | 1,467 | 64 MB | 0.04 MB | 100.0% |
+  | `dim.db` | 715 | 2.2 GB | 3.02 MB | 83.9% |
+
+  - `raw.db` 是全仓库**最健康**的库(均值 63.87 MB,文件数占全仓 0.35%、数据量占 96%)。本 ADR 整条决策治的是 raw,靶子打偏。
+  - 真实小文件在 `ods` + `dwd`(合计占全仓文件数 92.8%)。病因不是本 ADR 认定的「raw 分区数无限增长」,而是**动态分区写入的每分区文件数**(见 ADR-15)。
+  - 本 ADR §候选方案里「分区内 `concatenate` 压实——每分区已 1 文件,无可合」这条否决,对 `raw` 成立、对 `ods`/`dwd` 不成立:后者每分区躺着几十上百个 KB 级文件,正是压实的适应症。
+  - 类 1 四表(panini ×2 / prd_checklist / tzy_merchant)全部零下游,止于 ods;其全量快照改造与小文件无关,若要做只应出于建模语义,不在本轮。类 2 的 raw TTL 唯一驱动力是小文件,前提消失,一并作废。