如何處理數據倉庫中傳入的時間序列數據?
我是數據倉庫的新手(在我的學生時代就學會了這一點),並且希望將數據倉庫作為一個副項目。下面是我想出的一個簡單的數據倉庫設計:
數據倉庫有 2 個維度表和 1 個事實表。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
表格的目的,不是因為我的日期時間已經在我的事實表中了嗎?PS:對不起,如果我的問題令人困惑;由於我不精通該領域,因此盡力解釋。
如評論中所述,您需要一種將時間序列事實數據關聯
fact_deviceValues
回日期時間維度表的方法dim_datetime
。這應該是通過datetime
在兩個表中通過引用 from 的外鍵來fact_deviceValues
實現的dim_datetime
。
datetime
應該是您要儲存時間序列數據的度量單位,例如您的範例有02/01/2022 13:05
小時和分鐘。這可能會使表seconds
中不需要該欄位dim_datetime
(除非您確實計劃以秒為粒度儲存數據)。在涵蓋您的數據和案例的合理時間範圍內,您的父
dim_datetime
表每天每小時的每一分鐘都會有 1 行。例如,如果您需要涵蓋大約 100 年的數據,那麼您的dim_datetime
表中將有大約 5300 萬行(60 分鐘 * 24 小時 * 365 天 * 100 年 = ~5300 萬)。而您的子
fact_deviceValues
表將保存datetime
時間序列中發生的事件的實際情況。多個事件可能同時發生datetime
,因此將存在多行,其具有與表中相同的單個父行相關的相同值dim_datetime
。如果您發現您的
dim_datetime
表太大,您可能會找到一個更好的架構來使其成為一個dim_date
表,而不是每個日期只儲存 1 個唯一行。然後您的fact_deviceValues
表可以將日期與時間分開儲存,並且可以將dim_date
特定於日期的維度(通常比特定於時間的維度更豐富)連接到表中。但這取決於您的案例,以及是否有任何特定於您真正關心的時間的維度(我能想到的任何維度通常都可以從時間本身推導出來)。