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