在数据仓库中对双时态数据集建模

Modelling a bitemporal data set in a data warehouse

我有一个双时态 EAV 类型模型。

有多个属性 tables(每个值数据类型(int_attributes、float_attributes 等))看起来像:

|id|field_id|value|as_of_date_start|as_of_date_end|system_date_start|system_date_end|

以及属性的参考 table:

|field_id|name|data_type|target_attribute_table|

通过查询所有属性值tables的并集,可以构造一个实体并在任意时间点获取其所有属性。

问题

我想将此数据移动到数据仓库 (Snowflake)。我无法找到有关将双时态数据移动到仓库以及如何对其建模的大量信息。我不明白在这种情况下我在哪里需要与事实和维度相关的建模。在系统中加载数据时,将此 table 转换为将属性作为列获取是否有意义?

我正在考虑将这些数据按原样移动到仓库。

此数据的主要用例是获取当前数据快照、获取某些实体的完整历史记录以及获取所选实体上所选属性的历史记录并对它们进行一些分析。

我对仓库中的数据建模非常陌生。

我想你会发现阅读一本关于维度建模的书很有帮助——“圣经”是 The Data Warehouse Toolkit

为了大大简化事情,您需要执行以下操作:

  1. 定义您的实体(维度),例如客户、产品、国家、员工等
  2. 为每个实体添加适当的属性
  3. 为每个实体添加有效的开始和结束日期属性(以启用 SCD2 逻辑)

对于每个实体的每条记录,大概会有 none 个属性更改的时间段,因此您需要为每个静态时间段向实体中插入一条记录。例如,如果客户 A 开始时的值属性为 1,则在 2020 年 1 月 23 日更改为 2,然后在 2020 年 8 月 3 日更改为 3(并假设在此期间没有其他属性值更改)客户),您最终会在客户维度中获得这些记录:

希望这有帮助吗?