首页/数据/数仓建模速查/源类型到数仓类型映射表
分层与规范64 条

源类型到数仓类型映射表

源系统类型映射统一:VARCHAR 到 STRING、DECIMAL 到 DECIMAL(18,2)、DATETIME 到 STRING、TINYINT(1) 到 TINYINT;映射表是 ODS 到 DWD 转换的依据。

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

源类型到数仓类型映射表

源类型到数仓类型的映射要统一成一张表,并作为所有转换脚本的依据:VARCHAR 与 CHAR 映射为 STRING(不截断长度),DECIMAL(p,s) 按用途映射到固定精度(金额统一 DECIMAL(18,2)),DATETIME 与 TIMESTAMP 在贴源层以字符串承接、在明细层统一格式化后再转日期,TINYINT(1) 保留布尔语义映射为 TINYINT。源系统改类型时先更新映射表,再改脚本。

基本信息

VARCHAR / CHARSTRING,不截断长度
DECIMAL(p,s)按用途映射到固定精度
DATETIME / TIMESTAMP字符串承接,统一格式后再转换
TINYINT(1)TINYINT,保留布尔语义
维护责任数据平台维护,变更先更新映射

典型使用场景

  • 新建贴源表:按映射表确定字段类型,而不是逐字段临时决定
  • 源系统变更类型:先更新映射表,再批量调整脚本与目标表结构
  • 类型异常排查:对照映射表检查是否有字段被隐式转换
  • 跨系统对账:时间与金额的格式统一来自映射规则,而不是各脚本自带
  • 迁移评审:映射表本身就是影响面评估的清单来源

转换示例

转换示例
-- 类型与格式都按映射表执行
CAST(src.pay_amt AS DECIMAL(18,2))                     AS pay_amt,      -- 金额固定两位小数
CAST(src.is_valid AS TINYINT)                          AS is_valid,     -- 保留布尔语义
substr(src.create_time, 1, 19)                         AS create_time,  -- 统一到秒级字符串
-- 贴源侧不转换:ODS 全部以 STRING 承接,转换集中在 DWD

类型映射示例

源类型数仓类型说明
VARCHAR / CHARSTRING不截断长度,保留原文
DECIMAL(p,s)DECIMAL(18,2) 或按用途金额统一精度
DATETIME / TIMESTAMP先 STRING 后转日期统一格式再转换
TINYINT(1)TINYINT布尔语义,取值 0 或 1
映射表由数据平台统一维护,源系统改类型时先更新映射再改脚本;反过来做会让映射与实现长期不一致,后续没人敢信这张表。
源类型变更没有同步映射表时,转换脚本会用旧规则处理新数据,出现静默截断或格式错乱,全过程不报错,只能靠对账发现。
映射表要在接口文档里回链:源系统的字段说明里标注对应的数仓类型,两边一起改,比只维护一份内部文档更不容易漏。

易错点

  • 源类型变更未同步映射:转换脚本静默截断或格式错乱,问题到下游才暴露
  • 各脚本自带转换规则:同一字段在不同链路类型不一致,join 时报错或结果错
  • 贴源侧就做类型转换:脏数据被丢弃或截断,源头无法回溯
  • 时间格式不统一(有的到秒、有的到毫秒):字符串比较与去重结果出错

数据来源与参考

  • Kimball《数据仓库工具箱(第3版)》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌