键字段命名规则
键类字段用后缀区分语义:_sk 是数仓生成的代理键,用于关联维度并承载历史版本;_id 是源系统的业务主键(order_id、user_id),用于与源系统核对和单条溯源;_no 表示单号或流水号这类业务单据标识,通常是字符串;_code 表示编码与枚举(门店编码、渠道编码)。同一个业务含义在不同表里必须保持同一后缀,否则跨表关联时字段名对不上,只能靠人工比对字段含义。
基本信息
| _sk | 代理键,数仓生成,供维度关联使用 |
|---|---|
| _id | 业务主键,来自源系统,用于核对与溯源 |
| _no | 单号或流水号,如运单号、合同号,多为字符串 |
| _code | 编码或枚举,如门店编码、渠道编码 |
| 一致性要求 | 同一业务含义在不同表用同一后缀 |
| 生成方式 | 代理键可用业务键哈希或序列生成,需保持稳定 |
| 复合键场景 | 组成唯一键的各字段分别命名,如 order_id 加 order_line_no |
典型使用场景
- 维表按 SCD 保存历史版本时,事实表用代理键关联到对应版本,历史报表不受维度更新影响
- 排查单条数据、与源系统对账时用业务主键直接回源查询
- 多源同一实体合并时,先用编码与业务主键做映射,再由代理键统一标识
- 编码类字段统一 _code 后缀,一眼可辨是分类标识而非数值度量
- 订单行级明细这类复合唯一键,把每个组成字段独立命名并一起参与去重与关联
键字段并存写法
键字段并存写法
CREATE TABLE dwd_trade_order_di (
order_sk BIGINT COMMENT '订单代理键,数仓生成,用于维度关联',
order_id STRING COMMENT '订单业务主键,与源系统核对',
store_code STRING COMMENT '门店编码',
order_line_no INT COMMENT '订单行号,与 order_id 组成唯一键',
dt STRING
)
PARTITIONED BY (dt STRING);
-- 复合键去重:参与唯一性的字段都要进入分组
SELECT count(*) FROM (
SELECT order_id, order_line_no
FROM dwd_trade_order_di WHERE dt = '2026-10-12'
GROUP BY order_id, order_line_no
) t;后缀逐项读法
| 后缀 | 含义 | 典型字段 | 主要用途 |
|---|---|---|---|
| _sk | 代理键,数仓生成 | order_sk | 维度关联,承载历史版本 |
| _id | 业务主键 | order_id、user_id | 与源系统核对、溯源 |
| _no | 单号或流水号 | logistics_no | 业务单据标识,多为字符串 |
| _code | 编码或枚举 | store_code | 分类与枚举映射 |
代理键用于关联维度,业务主键用于与源系统核对,两者不要混用。用业务主键直接关联维度,一旦维表做过 SCD 变更,历史事实会关联到最新版本,历史报表的数字随之改变。
编码类字段要按字符串处理。门店编码 '0012' 被转成数值后变成 12,前导零丢失,同一次统计里会出现两个门店合并的情况。