淺談資料倉庫(DataWarehouse)

語言: CN / TW / HK

什麼是 Data Warehouse?

在計算機領域,資料倉庫(DW 或 DWH),是一個用於報告和資料分析的系統,被認為是商業智慧的一個核心組成部分。它將當前和歷史資料儲存在一個地方,為整個企業的工作人員建立分析報告。(維基百科)

典型的基於提取、轉換、載入(ETL)的資料倉庫使用 ODS 層、DWD 層和 DWS 層來容納其關鍵功能。資料分析師可以靈活的查詢 (Query) 數倉中的每一層,獲取有價值的商業資訊。

數倉中有三個關鍵指標

  • 資料的新鮮度:資料從產生開始,到在倉庫中經過一系列處理後可供使用者查詢所經過的時間長度。通常 ETL 就是用來準備資料的一系列過程,ETL 更多是通過排程執行一系列流計算或者批計算的作業來完成。
  • 資料的查詢延時:資料準備好後,使用者通過 Query 查詢表中的資料,從使用者發出查詢到收到查詢結果的時間長度為查詢延時。查詢延時直接決定了終端使用者的體感。
  • 成本:完成一定量的資料分析(包括 ETL 和查詢等各類計算)需要的資源量。成本也是數倉中的一個關鍵指標。

這三個指標的關係是什麼呢?

  • 企業需要在控制成本的情況下,能達到更好的查詢延時和新鮮度。不同的資料可能有不同的成本要求。
  • 新鮮度和查詢延時在某些情況也是此消彼長的關係,比如使用更長時間來準備資料、清洗和預處理資料,查詢會更快。

這三個指標構成了數倉中的一個三角:

資料倉庫分層

資料倉庫分層主要分為以下三層:DWD、DWM、DWS。每一層功能如下:

1. 資料明細層:DWD(Data Warehouse Detail)

DWD層直接與ODS層接觸,ODS層的資料經過ETL後流向該層,一般保持和ODS層一樣的資料粒度。

DWD層的主要工作有以下幾點:

① 資料質量保證

ODS層的異常值、缺失值等等資料問題在這一層中解決,視具體情況進行資料矯正或者補充預設值或者直接丟棄。

② 維度退化

在本層同時也要開始為後續的資料使用做準備,之前維度建模的事實表和維度表後續使用的話需要進行大量的事實表維度表關聯,顯然效率是非常低下的;在DWD層將一些維度退化至事實表中以減少關聯,即提前關聯好各維度以便後續使用。

③ 資料聚集

ODS層的資料來源各種各樣,有些資料屬於同一個主題的但是來源不同,因此存在於不同表之中,需要將不同來源但是屬於相同主題的資料彙總到同一張表之中。

2. 資料中間層:DWM(Data Warehouse Middle)

DWM 層的作用是進行資料聚合,即計算出一些公共指標,生成一系列中間表,方便後續使用方直接取數,本層的資料聚合保留較細的維度;這一層視具體業務而定,如果業務比較簡單可以不需要這一層。

3. 資料服務層:DWS(Data Warehouse Servce)

WS層即我們熟知的資料集市或者大寬表。本層將DWM層的指標資料按主題進行彙總,生成一些欄位較多的大寬表,即將各個指標都放在一張表中,方便使用方直接從表裡面取數不需要進行任何計算。

由於將各種指標都合併到一張表中,DWS層的表不會太多,一張表包含了較多的業務內容,多指標的整合也註定了DWS層的資料表裡面的維度不會太多,僅保留各指標共有的常用的一些維度。

資料庫與資料倉庫的區別是什麼?

資料庫:傳統的關係型資料庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。 

資料倉庫:資料倉庫系統的主要應用主要是OLAP(On-Line Analytical Processing),支援複雜的分析操作,側重決策支援,並且提供直觀易懂的查詢結果。

以電商行業舉個例子:

基本每家電商公司都會經歷,從只需要 業務資料庫 到 需要 資料倉庫 的階段。

  • 第一階段:創業期。開始設計一個簡單的網頁(前端)+ 幾臺伺服器 + 一個MySQL,就能開門迎客了。
  • 第二階段,流量來了,客戶和訂單都多起來了,普通查詢已經有壓力了,這個時候就需要升級架構變成多臺伺服器和多個業務資料庫(量大+分庫分表),這個階段的業務數字和指標還可以勉強從業務資料庫裡查詢。初步進入工業化。
  • 第三個階段,一般需要 3-5 年左右的時間,隨著業務指數級的增長,資料量的會陡增,公司角色也開始多了起來,開始有了 CEO、CMO、CIO,大家需要面臨的問題越來越複雜,越來越深入。高管們關心的問題,從最初非常粗放的:“昨天的收入是多少”、“上個月的 PV、UV 是多少”,逐漸演化到非常精細化和具體的使用者的叢集分析,特定使用者在某種使用場景中,例如“20~30歲女性使用者在過去五年的第一季度化妝品類商品的購買行為與公司進行的促銷活動方案之間的關係”。

這類非常具體,且能夠對公司決策起到關鍵性作用的問題,基本很難從業務資料庫從調取出來。原因在於:

  1. 業務資料庫中的資料結構是為了完成交易而設計的,不是為了而查詢和分析的便利設計的。
  1. 業務資料庫大多是讀寫優化的,即又要讀(檢視商品資訊),也要寫(產生訂單,完成支付)。因此對於大量資料的讀(查詢指標,一般是複雜的只讀型別查詢)是支援不足的。

而怎麼解決這個問題,此時我們就需要建立一個數據倉庫了,公司也算開始進入資訊化階段了。資料倉庫的作用在於:

  1. 資料結構為了分析和查詢的便利;
  1. 只讀優化的資料庫,即不需要它寫入速度多麼快,只要做大量資料的複雜查詢的速度足夠快就行了。

那麼在這裡前一種業務資料庫(讀寫都優化)的是業務性資料庫,後一種是分析型資料庫,即資料倉庫。