我对数据仓库很陌生(在我上学的时候就学会了这一点),并希望把数据仓库作为一个附带项目。下面是我提出的一个简单的数据仓库设计:

数据仓库有二维表和事实表。1维表包含日期时间数据,另一维表包含设备数据。事实表包含在字段中捕获的设备传入数据值。事实表中的数据粒度为5分钟。
我搞不懂时间序列是如何处理的,如果有人能澄清这一点,我会很感激。假设来自设备的一行数据如下所示:
datetime drive_a drive_b drive_c shaft_a shaft_b shaft_c total_output
02/01/2022 13:05 4.2 3.2 7.4 5.3 8.2 6.4 4563.2这将被处理并存储到数据仓库中的事实表中。
如何处理这个传入数据中的datetime列,因为dateKey与datetime传入数据的格式不同?
我认为事实表需要另一个名为dateTime_raw的列,但这不符合dim_datetime表的目的,不是因为我的日期时间已经在事实表中了吗?
对不起,如果我的问题混淆了,尽量解释,因为我不精通这个领域。
发布于 2022-02-05 17:50:39
正如注释中提到的那样,您需要一种将timeseries事实数据fact_deviceValues与日期时间维度表dim_datetime关联起来的方法。这应该由两个表中的datetime通过从fact_deviceValues引用到dim_datetime的外键来实现。
datetime应该是您要存储时间序列数据的度量单位,例如,您的02/01/2022 13:05示例有几个小时和几分钟。这可能使seconds字段在dim_datetime表中不需要(除非您计划以秒的粒度存储数据)。
在覆盖数据和用例的合理时间框架内,父dim_datetime表将在每天每小时的每分钟中有1行。例如,如果您需要覆盖大约100年的数据,您的dim_datetime表中大约有5 300万行(60分钟* 24小时* 365天*100年=5 300万)。
而您的子fact_deviceValues表将保存在timeseries中发生的事件的实际datetime。多个事件可能发生在同一个datetime上,因此多个行将存在,其值与dim_datetime表中相同的父行相关联。
如果您发现您的dim_datetime表太大,您可能会发现一种更好的体系结构,可以使它成为一个dim_date表,每个日期只存储一个唯一的行。然后,您的fact_deviceValues表可以将日期与时间分开存储,并可以为特定于日期的维度(通常比特定于时间的维度更丰富)加入到dim_date表中。但是这取决于您的用例,如果有特定于您真正关心的时间的维度(我所能想到的任何维度通常都是从时间本身衍生出来的)。
https://dba.stackexchange.com/questions/307039
复制相似问题