ODS 写入策略:只追加
贴源层通常只追加:源端是全量接口时按日快照落分区,源端是增量接口时按增量追加并带批次号,CDC 源则按变更日志顺序入仓。明确禁止在 ODS 原地 UPDATE 已有分区——一旦原地改历史,审计链条断裂,复算能力也随之失去。
基本信息
| 全量源 | 每日快照落分区 |
|---|---|
| 增量源 | 按增量追加,带批次号 |
| CDC 源 | 变更日志顺序入仓 |
| 禁止动作 | 原地 UPDATE 已有分区 |
| 快照保留 | 近期全量加月末长期快照 |
典型使用场景
- 全量接口(如维表全量拉取):每天落一份分区,保留按日快照
- 增量接口:按增量追加,批次号作为重跑与回溯的锚点
- CDC 变更日志:保留操作类型与时间戳,由下游拼装当前态
- 补数:按批次重放,不修改已有批次内的数据
- 存储控制:全量快照保留近 90 天,另外每月末保留一份长期快照
每日快照落分区
每日快照落分区
-- 全量源的每日快照:只写当天分区,历史分区不动
INSERT OVERWRITE TABLE ods_user_snapshot PARTITION (dt = '2026-10-12')
SELECT user_id, user_name, user_level, etl_load_time, etl_batch
FROM stg_user_daily;
-- 增量源:按批次分区追加,重跑时覆盖同一批次分区而不是再追加一份
-- INSERT OVERWRITE TABLE ods_user_inc
-- PARTITION (dt = '2026-10-12', batch = 'B2026101201')
-- SELECT user_id, user_name, etl_load_time FROM stg_user_inc;写入策略对照
| 源类型 | 写入方式 | 分区设计 |
|---|---|---|
| 全量接口 | 每日快照覆盖当天分区 | dt 按日 |
| 增量接口 | 追加,带批次号 | dt 加 batch |
| CDC 日志 | 按变更顺序追加 | dt,必要时加 hh |
| 文件投递 | 按到达批次落分区 | dt 加 batch |
ODS 直接 UPDATE 或 DELETE 历史分区后审计断档,出问题也无法还原源端当时提供的值;需要修正时用新批次追加,而不是改旧分区。
快照与增量两种模式不要混在一张表里:同一张表既有每日全量快照又有增量行,下游无法判断该按哪种语义读取,重复计算几乎必然发生。
分区粒度要与源端交付节奏一致:源端每天一次全量就按日落分区,源端每小时推送就按小时落分区,粒度定粗会丢失批次辨识度,定细会让分区数与文件数无谓增长。