上一篇重點講解了數據倉庫建模,它是數據倉庫開發中最核心的部分。然而完整的數據倉庫系統還會涉及其餘一些組件的開發,其中最主要的是ETL工程,在線分析處理工具(OLAP)和商務智能(BI)應用等。前端
本文將對這些方面作一個整體性的介紹(尤爲是OLAP),旨在讓讀者對數據倉庫的認識提高到一個全局性的高度。算法
數據倉庫的建立方法和數據庫相似,也是經過編寫DDL語句來實現。在過去,數據倉庫系統大都創建在RDBMS上,由於維度建模其實也能夠看作是關係建模的一種。但現在隨着開源分佈式數據倉庫工具如Hadoop Hive,Spark SQL的興起,開發人員每每將建模和實現分離。使用專門的建模軟件進行ER建模、關係建模、維度建模,而具體實現則在Hive/Spark SQL下進行。沒辦法,誰讓這些開源工具沒有提供自帶的可視化建模插件呢:-(。sql
話說如今的開源分佈式工具都是"散兵做戰",完成一個大的項目要組合N個工具,沒有一個統一的開發平臺。還有就是可視化效果比較差,界面很難看或者沒有界面。我的建議在資金足夠的狀況下儘可能使用商用大數據平臺來開發,雖然這些商用產品廣告打得多少有點誇張,可是它們的易用性作的是真好。這裏筆者推薦阿里雲的數加平臺,附連接:https://data.aliyun.com/。數據庫
在本系列第一篇中,曾大體介紹了該環節,它極可能是數據倉庫開發中最耗時的階段。本文將詳細對這個環節進行講解。架構
ETL工做的實質就是從各個數據源提取數據,對數據進行轉換,並最終加載填充數據到數據倉庫維度建模後的表中。只有當這些維度/事實表被填充好,ETL工做纔算完成。接下來分別對抽取,轉換,加載這三個環節進行講解:分佈式
1. 抽取(Extract)工具
數據倉庫是面向分析的,而操做型數據庫是面向應用的。顯然,並非全部用於支撐業務系統的數據都有拿來分析的必要。所以,該階段主要是根據數據倉庫主題、主題域肯定須要從應用數據庫中提取的數。oop
具體開發過程當中,開發人員必然常常發現某些ETL步驟和數據倉庫建模後的表描述不符。這時候就要從新覈對、設計需求,從新進行ETL。正如數據庫系列的這篇中講到的,任何涉及到需求的變更,都須要重頭開始並更新需求文檔。學習
2. 轉換(Transform)
轉換步驟主要是指對提取好了的數據的結構進行轉換,以知足目標數據倉庫模型的過程。此外,轉換過程也負責數據質量工做,這部分也被稱爲數據清洗(data cleaning)。數據質量涵蓋的內容可具體參考這裏。
3. 加載(Load)
加載過程將已經提取好了,轉換後保證了數據質量的數據加載到目標數據倉庫。加載可分爲兩種L:首次加載(first load)和刷新加載(refresh load)。其中,首次加載會涉及到大量數據,而刷新加載則屬於一種微批量式的加載。
多說一句,現在隨着各類分佈式、雲計算工具的興起,ETL實則變成了ELT。就是業務系統自身不會作轉換工做,而是在簡單的清洗後將數據導入分佈式平臺,讓平臺統一進行清洗轉換等工做。這樣作能充分利用平臺的分佈式特性,同時使業務系統更專一於業務自己。
數據倉庫建設好之後,用戶就能夠編寫SQL語句對其進行訪問並對其中數據進行分析。但每次查詢都要編寫SQL語句的話,未免太麻煩,並且對維度建模數據進行分析的SQL代碼套路比較固定。因而,便有了OLAP工具,它專用於維度建模數據的分析。而BI工具則是可以將OLAP的結果以圖表的方式展示出來,它和OLAP一般出如今一塊兒。(注:本文所指的OLAP工具均指代這二者。)
在規範化數據倉庫中OLAP工具和數據倉庫的關係大體是這樣的:
這種狀況下,OLAP不容許訪問中心數據庫。一方面中心數據庫是採起規範化建模的,而OLAP只支持對維度建模數據的分析;另外一方面規範化數據倉庫的中心數據庫自己就不容許上層開發人員訪問。而在維度建模數據倉庫中,OLAP/BI工具和數據倉庫的關係則是這樣的:
在維度建模數據倉庫中,OLAP不但能夠從數據倉庫中直接取數進行分析,還能對架構在其上的數據集市羣作一樣工做。對該部分講解感到模糊的讀者請重看上篇中三種數據倉庫建模體系部分。
在介紹OLAP工具的具體使用前,先要了解這個概念:數據立方體(Data Cube)。
不少年前,當咱們要手工從一堆數據中提取信息時,咱們會分析一堆數據報告。一般這些數據報告採用二維表示,是行與列組成的二維表格。但在真實世界裏咱們分析數據的角度極可能有多個,數據立方體能夠理解爲就是維度擴展後的二維表格。下圖展現了一個三維數據立方體:
儘管這個例子是三維的,但更多時候數據立方體是N維的。它的實現有兩種方式,本文後面部分會講到。其中上一篇講到的星形模式就是其中一種,該模式實際上是一種鏈接關係表與數據立方體的橋樑。但對於大多數純OLAP使用者來說,數據分析的對象就是這個邏輯概念上的數據立方體,其具體實現不用深究。對於這些OLAP工具的使用者來說,基本用法是首先配置好維表、事實表,而後在每次查詢的時候告訴OLAP須要展現的維度和事實字段和操做類型便可。
下面介紹數據立方體中最多見的五大操做:切片,切塊,旋轉,上卷,下鑽。
1. 切片和切塊(Slice and Dice)
在數據立方體的某一維度上選定一個維成員的操做叫切片,而對兩個或多個維執行選擇則叫作切塊。下圖邏輯上展現了切片和切塊操做:
這兩種操做的SQL模擬語句以下,主要是對WHERE語句作工做:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 切片
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語句作工做:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 上卷
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操做疊加的結果。
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出來吧!須要進一步挖掘其價值吧!歡迎繼續關注!!
轉載:https://www.cnblogs.com/muchen/p/5318808.html