本包目录(311 条)

时间维度表设计

时间维度表把日期展开为多列属性:年月日、周、季度、是否节假日、是否工作日等,供报表按任意时间层级切片;一次构建长期复用,节假日与调休需要人工维护。

主键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 里。

易错点

  • 业务按财年或特殊周期统计时维度表没有对应列,只能各处手写判断
  • 节假日信息常年不更新,报表工作日口径偏差

数据来源与参考

  • Kimball《The Data Warehouse Toolkit》日期维度
  • Apache Spark SQL 官方文档:日期函数
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌