首页 > 解决方案 > 维度表中日期类型属性的哪种数据类型,包括开始和结束日期?

问题描述

我正在使用维度建模设计一个数据仓库。我已经阅读了 Kimbal & Ross 的大部分数据仓库工具包。我的问题是关于包含日期的维度表中的列。例如,这是应用程序用户的表:

CREATE TABLE user_dim (
   user_key BIGINT,  -- surrogate key
   user_id BIGINT,   -- natural key
   user_name VARCHAR(100),
   ...
   user_added_date DATE, -- type 0, date user added to the system
   ...
   -- Type-2 SCD administrative columns
   row_start_date DATE, -- first effective date for this row
   row_end_date DATE,   -- last effective date for this row, 9999-12-31 if current
   row_current_flag VARCHAR(10), -- current or expired
)

最后三个属性用于实现类型 2 渐变维度。参见 Kimbal 第 150-151 页。

问题 1:row_start_date 和 row_end_date 列的数据类型是否有最佳实践?类型可以是 DATE(如图所示)、STRING/VARCHAR/CHAR(“YYYY-MM-DD”),甚至是 BIGINT(日期维度的外键)。我认为行开始/结束日期不会有太多过滤,因此不需要日期维度的键。

问题2:“user_added_date”等维度属性的数据类型是否有最佳实践?我可以看到有人想要关于每个财政季度添加的用户的报告,因此使用日期维度的外键会很有帮助。除了必须从用户维度加入日期维度以显示属性之外,还有什么缺点吗?

如果重要的话,我正在使用 Amazon Redshift。

标签: dateamazon-redshiftdata-warehouse

解决方案


对于问题 1:row_start_date 和 row_end_date 不是传入数据的一部分。正如您所提到的,它们是为 SCD 类型 2 目的而人工创建的,因此它们不应该具有 Date 维度的键。用户 dim 没有理由拥有 Date 维度的键。对于数据类型YYYY-MM-DD应该没问题。

对于问题 2:如果您有这样的要求,我建议创建一个派生事实表(通常称为累积快照事实表)以保留派生措施,例如user_added_date

欲了解更多信息,请参阅https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/Dimension-modeling-techniques/accumulating-snapshot-fact-table/


推荐阅读