上一篇重點講解了資料倉庫模組化,它是資料倉庫開發中最核心的部分。然而完整的資料倉庫系統還會涉及其他一些元件的開發,其中包括ETL工程,線上分析處理工具(OLAP)和商務智能(BI)應用等。本文将對這些方面做一個總體性的介紹(尤其是OLAP),旨在讓讀者對資料倉庫的認識提升到一個全局性的高度...
前言
上一篇重點講解了資料倉庫模組化,它是資料倉庫開發中最核心的部分。然而完整的資料倉庫系統還會涉及其他一些元件的開發,其中最主要的是ETL工程,線上分析處理工具(OLAP)和商務智能(BI)應用等。
本文将對這些方面做一個總體性的介紹(尤其是OLAP),旨在讓讀者對資料倉庫的認識提升到一個全局性的高度。
建立資料倉庫
資料倉庫的建立方法和資料庫類似,也是通過編寫DDL語句來實作。在過去,資料倉庫系統大都建立在RDBMS上,因為次元模組化其實也可以看做是關系模組化的一種。但如今随着開源分布式資料倉庫工具如Hadoop Hive,Spark SQL的興起,開發人員往往将模組化和實作分離。使用專門的模組化軟體進行ER模組化、關系模組化、次元模組化,而具體實作則在Hive/Spark SQL下進行。沒辦法,誰讓這些開源工具沒有提供自帶的可視化模組化插件呢:-(。
話說現在的開源分布式工具都是"散兵作戰",完成一個大的項目要組合N個工具,沒有一個統一的開發平台。還有就是可視化效果比較差,界面很難看或者沒有界面。個人建議在資金足夠的情況下盡量使用商用大資料平台來開發,雖然這些商用産品廣告打得多少有點誇張,但是它們的易用性做的是真好。這裡筆者推薦阿裡雲的數加平台,附連結:https://data.aliyun.com/。
ETL:抽取、轉換、加載
在本系列第一篇中,曾大緻介紹了該環節,它很可能是資料倉庫開發中最耗時的階段。本文将詳細對這個環節進行講解。
ETL工作的實質就是從各個資料源提取資料,對資料進行轉換,并最終加載填充資料到資料倉庫次元模組化後的表中。隻有當這些次元/事實表被填充好,ETL工作才算完成。接下來分别對抽取,轉換,加載這三個環節進行講解:
1. 抽取(Extract)
資料倉庫是面向分析的,而操作型資料庫是面向應用的。顯然,并不是所有用于支撐業務系統的資料都有拿來分析的必要。是以,該階段主要是根據資料倉庫主題、主題域确定需要從應用資料庫中提取的數。
具體開發過程中,開發人員必然經常發現某些ETL步驟和資料倉庫模組化後的表描述不符。這時候就要重新核對、設計需求,重新進行ETL。正如資料庫系列的這篇中講到的,任何涉及到需求的變動,都需要重頭開始并更新需求文檔。
2. 轉換(Transform)
轉換步驟主要是指對提取好了的資料的結構進行轉換,以滿足目标資料倉庫模型的過程。此外,轉換過程也負責資料品質工作,這部分也被稱為資料清洗(data cleaning)。資料品質涵蓋的内容可具體參考這裡。
3. 加載(Load)
加載過程将已經提取好了,轉換後保證了資料品質的資料加載到目标資料倉庫。加載可分為兩種L:首次加載(first load)和重新整理加載(refresh load)。其中,首次加載會涉及到大量資料,而重新整理加載則屬于一種微批量式的加載。
多說一句,如今随着各種分布式、雲計算工具的興起,ETL實則變成了ELT。就是業務系統自身不會做轉換工作,而是在簡單的清洗後将資料導入分布式平台,讓平台統一進行清洗轉換等工作。這樣做能充分利用平台的分布式特性,同時使業務系統更專注于業務本身。
OLAP/BI工具
資料倉庫建設好以後,使用者就可以編寫SQL語句對其進行通路并對其中資料進行分析。但每次查詢都要編寫SQL語句的話,未免太麻煩,而且對次元模組化資料進行分析的SQL代碼套路比較固定。于是,便有了OLAP工具,它專用于次元模組化資料的分析。而BI工具則是能夠将OLAP的結果以圖表的方式展現出來,它和OLAP通常出現在一起。(注:本文所指的OLAP工具均指代這兩者。)
在規範化資料倉庫中OLAP工具和資料倉庫的關系大緻是這樣的:
這種情況下,OLAP不允許通路中心資料庫。一方面中心資料庫是采取規範化模組化的,而OLAP隻支援對次元模組化資料的分析;另一方面規範化資料倉庫的中心資料庫本身就不允許上層開發人員通路。而在次元模組化資料倉庫中,OLAP/BI工具和資料倉庫的關系則是這樣的:
在次元模組化資料倉庫中,OLAP不但可以從資料倉庫中直接取數進行分析,還能對架構在其上的資料集市群做同樣工作。對該部分講解感到模糊的讀者請重看上篇中三種資料倉庫模組化體系部分。
資料立方體(Data Cube)
在介紹OLAP工具的具體使用前,先要了解這個概念:資料立方體(Data Cube)。
很多年前,當我們要手工從一堆資料中提取資訊時,我們會分析一堆資料報告。通常這些資料報告采用二維表示,是行與列組成的二維表格。但在真實世界裡我們分析資料的角度很可能有多個,資料立方體可以了解為就是次元擴充後的二維表格。下圖展示了一個三維資料立方體:
盡管這個例子是三維的,但更多時候資料立方體是N維的。它的實作有兩種方式,本文後面部分會講到。其中上一篇講到的星形模式就是其中一種,該模式其實是一種連接配接關系表與資料立方體的橋梁。但對于大多數純OLAP使用者來講,資料分析的對象就是這個邏輯概念上的資料立方體,其具體實作不用深究。對于這些OLAP工具的使用者來講,基本用法是首先配置好維表、事實表,然後在每次查詢的時候告訴OLAP需要展示的次元和事實字段和操作類型即可。
下面介紹資料立方體中最常見的五大操作:切片,切塊,旋轉,上卷,下鑽。
1. 切片和切塊(Slice and Dice)
在資料立方體的某一次元上標明一個維成員的操作叫切片,而對兩個或多個維執行選擇則叫做切塊。下圖邏輯上展示了切片和切塊操作:
這兩種操作的SQL模拟語句如下,主要是對WHERE語句做工作:
# 切片
SELECT Locates.地區, Products.分類, SUM(數量)
FROM Sales, Dates, Products, Locates
WHERE Dates.季度 = 2
AND Sales.Date_key = Dates.Date_key
AND Sales.Locate_key = Locates.Locate_key
AND Sales.Product_key = Products.Product_key
GROUP BY Locates.地區, Products.分類
# 切塊
SELECT Locates.地區, Products.分類, SUM(數量)
FROM Sales, Dates, Products, Locates
WHERE (Dates.季度 = 2 OR Dates.季度 = 3) AND (Locates.地區 = '江蘇' OR Locates.地區 = '上海')
AND Sales.Date_key = Dates.Date_key
AND Sales.Locate_key = Locates.Locate_key
AND Sales.Product_key = Products.Product_key
GROUP BY Dates.季度, Locates.地區, Products.分類
2. 旋轉(Pivot)
旋轉就是指改變報表或頁面的展示方向。對于使用者來說,就是個視圖操作,而從SQL模拟語句的角度來說,就是改變SELECT後面字段的順序而已。下圖邏輯上展示了旋轉操作:
3. 上卷和下鑽(Rol-up and Drill-down)
上卷可以了解為"無視"某些次元;下鑽則是指将某些次元進行細分。下圖邏輯上展示了上卷和下鑽操作:
這兩種操作的SQL模拟語句如下,主要是對GROUP BY語句做工作:
# 上卷
SELECT Locates.地區, Products.分類, SUM(數量)
FROM Sales, Products, Locates
WHERE Sales.Locate_key = Locates.Locate_key
AND Sales.Product_key = Products.Product_key
GROUP BY Locates.地區, Products.分類
# 下鑽
SELECT Locates.地區, Dates.季度, Products.分類, SUM(數量)
FROM Sales, Dates, Products, Locates
WHERE Sales.Date_key = Dates.Date_key
AND Sales.Locate_key = Locates.Locate_key
AND Sales.Product_key = Products.Product_key
GROUP BY Dates.季度.月份, Locates.地區, Products.分類
4. 其他OLAP操作
除了上述的幾個基本操作,不同的OLAP工具也會提供自有的OLAP查詢功能,如鑽過,鑽透等,本文不一一進行講解。通常一個複雜的OLAP查詢是多個這類OLAP操作疊加的結果。
OLAP的架構模式
1. MOLAP(Multidimensional Online Analytical Processing)
MOLAP架構會生成一個新的多元資料集,也可以說是建構了一個實際資料立方體。其架構如下圖所示:
在該立方體中,每一格對應一個直接位址,且常用的查詢已被預先計算好。是以每次的查詢都是非常快速的,但是由于立方體的更新比較慢,是以是否使用這種架構得具體問題具體分析。
2. ROLAP(Relational Online Analytical Processing)
ROLAP架構并不會生成實際的多元資料集,而是使用星形模式以及多個關系表對資料立方體進行模拟。其架構如下圖所示:
顯然,這種架構下的查詢沒有MOLAP快速。因為ROLAP中,所有的查詢都是被轉換為SQL語句執行的。而這些SQL語句的執行會涉及到多個表之間的JOIN操作,沒有MOLAP速度快。
3. HOLAP(Hybrid Online Analytical Processing)
這種架構綜合參考MOLAP和ROLAP而采用一種混合解決方案,将某些需要特别提速的查詢放到MOLAP引擎,其他查詢則調用ROLAP引擎。
筆者發現一個有趣的現象,很多工具的發展都滿足這個規律:工具A被創造,投入使用後發現缺點;然後工具B為了彌補這個缺點而被創造,但是帶來了新的缺點;然後就會用工具C被創造,根據不同情況調用A和B。比較無語......
小結
本文是資料倉庫系列的最後一篇。一路下來,讀者有木有發現資料倉庫系統的開發是一個非常浩大的工程呢?
确實,整個資料倉庫系統的開發會涉及到各種團隊:資料模組化團隊,業務分析團隊,系統架構團隊,平台維護團隊,前端開發團隊等等。對于志在從事這方面工作的人來說,需要學習的還有很多。但對于和筆者一樣志在成為一名優秀"資料科學家"的人來說,這些資料基礎知識已經夠用了。筆者看來,資料科學家的核心競争優勢在三個方面:資料基礎,資料可視化,算法模型。這三個方面需要投入的時間成本遞增,而知識的重要性遞減。是以,資料庫系列和資料倉庫系列是成本效益最高的兩個系列哦。
接下來,我将把目光聚焦到資料可視化系列,以及醞釀了很久的資料挖掘系列上來。資料管理好了,需要酷炫的show出來吧!需要進一步挖掘其價值吧!歡迎繼續關注!!