Database-Design

如何處理數據倉庫中傳入的時間序列數據?

  • February 5, 2022

我是數據倉庫的新手(在我的學生時代就學會了這一點),並且希望將數據倉庫作為一個副項目。下面是我想出的一個簡單的數據倉庫設計: 在此處輸入圖像描述

數據倉庫有 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特定於日期的維度(通常比特定於時間的維度更豐富)連接到表中。但這取決於您的案例,以及是否有任何特定於您真正關心的時間的維度(我能想到的任何維度通常都可以從時間本身推導出來)。

引用自:https://dba.stackexchange.com/questions/307039