首页/数据/数仓建模速查/ODS 层职责:贴源保真与可追溯
分层与规范64 条

ODS 层职责:贴源保真与可追溯

ODS 承接源系统数据,职责是保真、追加审计字段、保留历史;不做业务口径加工,口径变化放到 DWD 之后处理,保证任何结论都能回到源值。

数仓建模速查数据更新于 2026-10-13

ODS 是什么

ODS(Operational Data Store)是数仓的贴源层,承接从业务库、日志、埋点同步过来的原始数据。第一条原则是保真:字段名、类型、取值尽量与源系统一一对应,只做抽取与装载,不在这里写业务口径。第二条原则是可追溯:每行数据都带装载时间、来源系统等审计字段,任何下游结论都能回到源值核对。ODS 通常按天分区保留快照或增量流水,具体取决于源系统的抽取方式。

基本信息

定位贴源缓冲层,数仓的最上游
加工范围只补审计字段,不改业务语义
历史保留按天快照,或保留增量流水
产出特征字段与源表一一对应
同步方式全量覆盖、增量追加或 CDC 实时同步

典型使用场景

  • 对接新数据源:先把原始数据落地到 ODS,再讨论怎么加工
  • 数据对账:下游指标异常时用 ODS 与源系统逐行比对,判断是同步丢数还是加工出错
  • 临时取数:源库不允许直连时,从 ODS 直接捞原始字段
  • 源系统改字段:ODS 保留变更前后的原值,用于评估影响范围
  • 历史回溯:源数据被覆盖更新后,仍可从 ODS 快照还原当时状态

贴源建表

贴源建表
CREATE TABLE ods_order (
  order_id      STRING COMMENT '订单ID原值',
  user_id       STRING COMMENT '用户ID原值',
  pay_amt       STRING COMMENT '支付金额原值',
  order_status  STRING COMMENT '状态原值',
  etl_load_time STRING COMMENT '装载时间',
  etl_source    STRING COMMENT '来源系统'
) COMMENT '订单贴源表'
PARTITIONED BY (dt STRING COMMENT '数据日期');

两种装载方式

两种装载方式
-- 全量覆盖:每天重抽一份快照,历史可回溯
INSERT OVERWRITE TABLE ods_order PARTITION (dt='2026-10-13')
SELECT *, current_timestamp() AS etl_load_time, 'order_db' AS etl_source
FROM src_order;
-- 增量追加:只捞当天变更,ODS 保留全量流水
INSERT INTO TABLE ods_order PARTITION (dt='2026-10-13')
SELECT *, current_timestamp(), 'order_db' FROM src_order WHERE updated_at >= '2026-10-13';

审计字段约定

字段含义用途
etl_load_time数据装载到数仓的时间区分数据到达时间与业务发生时间
etl_source来源系统或库表标识多源汇聚时判断数据归属
dt分区日期,通常取业务日期分区裁剪与逐日回溯
etl_batch_id装载批次号同一批次整体回滚或重跑
ODS 里直接写业务口径(如剔除退款单)会让数仓的账与源系统对不上,事后追溯时无法判断差异是同步丢数还是加工过滤,成本很高。
贴源字段建议先按字符串落地,避免源系统改类型导致装载直接失败;类型转换统一放到 DWD 做,转换失败的行在 DWD 层可以单独统计并回看原值。

易错点

  • 在 ODS 做类型转换:转换失败的行被丢弃,原始值无法回查
  • ODS 里过滤业务数据:数仓口径与源系统对不上,对账时找不到丢失的行
  • 覆盖式全量不留历史:源系统数据被修改后,无法还原修改前的状态
  • 缺少审计字段:多源汇聚后无法判断某一行来自哪个系统、哪个批次
  • 把 ODS 当长期明细库:不设生命周期,存储成本随时间线性上升

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌