分区字段命名约定
分区字段名与取值格式也要全库统一:日分区统一叫 dt,取值 yyyy-MM-dd;小时分区要么用 hh(00-23),要么用 dt 加 hh 两级分区。统一的价值在于脚本可以参数化——跨表复用的调度模板只需要替换日期变量,不必为每张表单独记住分区字段名和格式。
基本信息
| 日分区 | dt,格式 yyyy-MM-dd |
|---|---|
| 小时分区 | hh(00-23),或 dt + hh 两级分区 |
| 取值类型 | 用字符串,便于裁剪与传参 |
| 跨表复用 | 同名同格式才能直接参数化 |
| 需要避免 | 分区值里出现斜杠、中文或时分秒 |
典型使用场景
- 日常调度传参:所有表都用 dt,调度模板可以统一替换日期变量
- 小时级明细:加 hh 二级分区,既能按天重跑也能只补某个小时
- 跨表关联:分区字段同名同格式,才能直接写进同一段 SQL
- 历史回刷:按 dt 区间批量重跑,脚本不必为不同表改字段名
- 新表接入检查:接入时先确认分区字段是否符合约定
命名与取值
| 场景 | 推荐命名 | 取值示例 |
|---|---|---|
| 日粒度,绝大多数表 | dt | 2026-10-13 |
| 小时粒度 | hh,或二级分区 dt + hh | 00 到 23 |
| 月粒度汇总表 | month | 2026-10 |
| 多级分区示例 | dt + city_id | 2026-10-13 与 310000 |
两级分区
两级分区
CREATE TABLE dwd_flow_event_di (
event_id STRING,
user_id STRING
)
PARTITIONED BY (
dt STRING COMMENT '日期 yyyy-MM-dd', -- 一级分区:天
hh STRING COMMENT '小时 00-23' -- 二级分区:小时
);
-- 查询时两级条件都要给,否则裁剪不彻底
SELECT count(1) FROM dwd_flow_event_di WHERE dt='2026-10-13' AND hh='08';分区值写成 2026/10/12 带斜杠,会在文件系统上形成多级目录,分区数量凭空翻倍,元数据压力与清理难度同时上升;分区值里带时分秒也会让分区数量失控。
分区字段名一旦上线就很难改:所有下游脚本、调度模板与 BI 数据集都引用它。新表接入时按规范检查一遍,比事后统一改名便宜得多。
小时分区字段建议直接用 hh,而不是写成 hour 或 hour_id:hh 简短,与 dt 风格一致,跨表引用时也不容易写错。