| 主键 | date_sk(如 20261011)或日期字符串 |
|---|---|
| 属性 | 年、季、月、周、日、是否节假日、是否工作日 |
| 范围 | 覆盖历史与未来若干年 |
| 维护 | 每年更新节假日与调休 |
时间维度建表与生成
时间维度建表与生成
CREATE TABLE dim_date (
date_sk INT, date_str STRING, year INT, month INT, week INT, quarter INT,
is_weekend INT, is_holiday INT, is_workday INT
);
INSERT INTO dim_date
SELECT CAST(DATE_FORMAT(d, 'yyyyMMdd') AS INT), DATE_FORMAT(d, 'yyyy-MM-dd'),
YEAR(d), MONTH(d), WEEKOFYEAR(d), QUARTER(d),
IF(DAYOFWEEK(d) IN (1,7), 1, 0), 0, 1
FROM (SELECT EXPLODE(SEQUENCE(DATE '2020-01-01', DATE '2030-12-31', INTERVAL 1 DAY)) AS d) t;节假日与调休建议单独维护一张年度表,按年导入更新,避免硬编码在生成 SQL 里。