首页/数据/数仓建模速查/键字段命名:_sk / _id / _code
分层与规范64 条

键字段命名:_sk / _id / _code

代理键用 _sk 后缀(数仓生成)、业务主键用 _id 或 _no、编码类用 _code;同一字段在不同表出现时后缀应保持一致。

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

键字段命名规则

键类字段用后缀区分语义:_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,前导零丢失,同一次统计里会出现两个门店合并的情况。

易错点

  • 用业务主键直接关联维度:SCD 变更后历史数据错配到最新维度,历史报表被悄悄改写
  • 代理键生成方式不稳定(按行号或随机数):重跑同一批数据后关联结果发生变化
  • 编码字段当数值用:前导零丢失,'0012' 与 '12' 被合并成同一条
  • 复合唯一键只取其中一列做去重或关联:结果行数成倍膨胀,指标随之翻倍
  • 同一业务含义在不同表用不同后缀(_id 与 _no 混用):跨表查询时关联字段对不上,只能凭人工猜测

数据来源与参考

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