1、數(shù)據(jù)倉庫、OLAP 與 BI
數(shù)據(jù)倉庫
數(shù)據(jù)倉庫,英文名稱 Data Warehouse,簡稱 DW。《數(shù)據(jù)倉庫》一書中的定義 為:數(shù)據(jù)倉庫就是面向主題的、集成的、相對穩(wěn)定的、隨時間不斷變化(不同時 間)的數(shù)據(jù)集合,用以支持經(jīng)營管理中的決策制定過程、數(shù)據(jù)倉庫中的數(shù)據(jù)面向 主題,與傳統(tǒng)數(shù)據(jù)庫面向應(yīng)用相對應(yīng)。
利用數(shù)據(jù)倉庫的方式存放的資料,具有一旦存入,便不會隨時間發(fā)生變動的 特性,此外,存入的資料必定包含時間屬性,通常一個數(shù)據(jù)倉庫中會含有大量的 歷史性資料,并且它可利用特定的分析方式,從其中發(fā)掘出特定的資訊。
OLAP
1、OLAP的基本概念
OLAP(Online Analytical Process),聯(lián)機(jī)分析處理,以多維度的方式分 析數(shù)據(jù),而且能夠彈性地提供上卷(Roll-up)、下鉆(Drill-down)和切片(Slice) 等操作,它是呈現(xiàn)集成性決策信息的方法,多用于決策支持系統(tǒng)、商務(wù)智能或數(shù) 據(jù)倉庫。其主要的功能在于方便大規(guī)模數(shù)據(jù)分析及統(tǒng)計(jì)計(jì)算,可對決策提供參考 和支持。與之相區(qū)別的是聯(lián)機(jī)交易處理(OLTP),聯(lián)機(jī)交易處理,更側(cè)重于基本 的、日常的事務(wù)處理,包括數(shù)據(jù)的增刪改查。
OLAP 需要以大量歷史數(shù)據(jù)為基礎(chǔ),再配合上時間點(diǎn)的差異,對多維 度及匯整型的信息進(jìn)行復(fù)雜的分析。
OLAP 需要用戶有主觀的信息需求定義,因此系統(tǒng)效率較佳。
OLAP 的概念,在實(shí)際應(yīng)用中存在廣義和狹義兩種不同的理解方式。廣義上 的理解與字面上的意思相同,泛指一切不會對數(shù)據(jù)進(jìn)行更新的分析處理。但更多 的情況下 OLAP 被理解為其狹義上的含義,即與多維分析相關(guān),基于立方體(Cube) 計(jì)算而進(jìn)行的分析。
OLAP(online analytical processing)是一種軟件技術(shù),它使分析人員能夠迅速、一致、交互地從各個方面觀察信息,以達(dá)到深入理解數(shù)據(jù)的目的。從各方面觀察信息,也就是從不同的維度分析數(shù)據(jù),因此OLAP也成為多維分析。
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path></v:stroke></v:shapetype><v:shape id="圖片_x0020_90" style="width:437.4pt;height:122.4pt;visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1035"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"></v:imagedata></v:shape>
2、OLAP的類型
也可以分為ROLAP和MOLAP
<v:shape id="圖片_x0020_92" style="width:388.2pt;height:185.4pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1034"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png"></v:imagedata></v:shape>
3、OLAP CUBE
<v:shape id="圖片_x0020_93" style="width:437.4pt;height:201pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1033"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png"></v:imagedata></v:shape>
4、CUBE與 Cuboid
<v:shape id="圖片_x0020_94" style="width:437.4pt;height:186pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1032"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png"></v:imagedata></v:shape>
BI
BI(Business Intelligence),即商務(wù)智能,指用現(xiàn)代數(shù)據(jù)倉庫技術(shù)、在線 分析技術(shù)、數(shù)據(jù)挖掘和數(shù)據(jù)展現(xiàn)技術(shù)進(jìn)行數(shù)據(jù)分析以實(shí)現(xiàn)商業(yè)價值。
2、事實(shí)表與維度表
事實(shí)表(Fact Table)是指存儲有事實(shí)記錄的表,如系統(tǒng)日志、銷售記錄等; 事實(shí)表的記錄在不斷地動態(tài)增長,所以它的體積通常遠(yuǎn)大于其他表。
維度表(Dimension Table)或維表,有時也稱查找表(Lookup Table),是 分析事實(shí)的一種角度,是與事實(shí)表相對應(yīng)的一種表;它保存了維度的屬性值,可 以跟事實(shí)表做關(guān)聯(lián);相當(dāng)于將事實(shí)表上經(jīng)常重復(fù)出現(xiàn)的屬性抽取、規(guī)范出來用一 張表進(jìn)行管理。常見的維度表有:日期表(存儲與日期對應(yīng)的周、月、季度等的 屬性)、地點(diǎn)表(包含國家、?。?、城市等屬性)等。使用維度表有諸多好處, 具體如下。
·縮小了事實(shí)表的大小。
·便于維度的管理和維護(hù),增加、刪除和修改維度的屬性,不必對事實(shí)表的 大量記錄進(jìn)行改動。
·維度表可以為多個事實(shí)表重用,以減少重復(fù)工作。
3、維度與度量
維度是指審視數(shù)據(jù)的角度,它通常是數(shù)據(jù)記錄的一個屬性,例如時間、地點(diǎn) 等。
度量是基于數(shù)據(jù)所計(jì)算出來的考量值;它通常是一個數(shù)值,如總銷售額、不 同的用戶數(shù)等。 分析人員往往要結(jié)合若干個維度來審查度量值,以便在其中找到變化規(guī)律。 在一個 SQL 查詢中,Group By 的屬性通常就是維度,而所計(jì)算的值則是度量。 如下面的示例:
<v:shape id="image5.jpeg" style="width:415.2pt;height:22.8pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1031"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image005.jpg"></v:imagedata></v:shape>
在上面的這個查詢中,part_dt 和 lstg_site_id 是維度,sum(price)和
count(distinct seller_id)是度量。
<v:shape id="圖片_x0020_95" style="width:438pt;height:220.2pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1030"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png"></v:imagedata></v:shape>
4、數(shù)據(jù)倉庫建模常用手段方式
星型模型:
星形模型中有一張事實(shí)表,以及零個或多個維度表;事實(shí)表與維度表通過主 鍵外鍵相關(guān)聯(lián),維度表之間沒有關(guān)聯(lián),就像很多星星圍繞在一個恒星周圍,故取 名為星形模型。
<v:shape id="image6.jpeg" style="width:377.4pt;height:256.8pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1029"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image007.jpg"></v:imagedata></v:shape>
雪花模型:
若將星形模型中某些維度的表再做規(guī)范,抽取成更細(xì)的維度表,然后讓維
度表之間也進(jìn)行關(guān)聯(lián),那么這種模型稱為雪花模型。
<v:shape id="image7.jpeg" style="width:412.8pt;height:229.8pt;visibility:visible; mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1028"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image008.jpg"></v:imagedata></v:shape>
星座模式:
星座模式是星型模式延伸而來,星型模式是基于一張事實(shí)表的,而星座模式是基于多張事實(shí)表的,而且共享維度信息。
前面介紹的兩種維度建模方法都是多維表對應(yīng)單事實(shí)表,但在很多時候維度空間內(nèi)的事實(shí)表不止一個,而一個維表也可能被多個事實(shí)表用到。在業(yè)務(wù)發(fā)展后期,絕大部分維度建模都采用的是星座模式。
<v:shape id="圖片_x0020_51" style="width:415.2pt;height:216.6pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1027"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png"></v:imagedata></v:shape>
注意:Kylin 只支持星形模型的數(shù)據(jù)集
5、數(shù)據(jù)立方體
Cube(或 Data Cube),即數(shù)據(jù)立方體,是一種常用于數(shù)據(jù)分析與索引的技術(shù);它可以對原始數(shù)據(jù)建立多維度索引。通過 Cube 對數(shù)據(jù)進(jìn)行分析,可以大大 加快數(shù)據(jù)的查詢效率。
Cuboid 在 Kylin 中特指在某一種維度組合下所計(jì)算的數(shù)據(jù)。 給定一個數(shù)據(jù)模型,我們可以對其上的所有維度進(jìn)行組合。對于 N 個維度來
說,組合的所有可能性共有 2 的 N 次方種。對于每一種維度的組合,將度量做 聚合運(yùn)算,然后將運(yùn)算的結(jié)果保存為一個物化視圖,稱為 Cuboid。
所有維度組合的 Cuboid 作為一個整體,被稱為 Cube。所以簡單來說,一個 Cube 就是許多按維度聚合的物化視圖的集合。
下面來列舉一個具體的例子。假定有一個電商的銷售數(shù)據(jù)集,其中維度包括 時間(Time)、商品(Item)、地點(diǎn)(Location)和供應(yīng)商(Supplier),度量為銷 售額(GMV)。那么所有維度的組合就有 2 的 4 次方 =16 種,比如一維度(1D) 的組合有[Time]、[Item]、[Location]、[Supplier]4 種;二維度(2D)的組合 有[Time,Item]、[Time,Location]、[Time、Supplier]、[Item,Location]、 [Item,Supplier]、[Location,Supplier]6 種;三維度(3D)的組合也有 4 種; 最后零維度(0D)和四維度(4D)的組合各有 1 種,總共就有 16 種組合。
<v:shape id="image8.jpeg" style="width:415.8pt;height:219.6pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1026"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image010.jpg"></v:imagedata></v:shape>
6、Kylin的工作原理
Apache Kylin 的工作原理就是對數(shù)據(jù)模型做 Cube 預(yù)計(jì)算,并利用計(jì)算的結(jié) 果加速查詢,具體工作過程如下。
1)指定數(shù)據(jù)模型,定義維度和度量。
2)預(yù)計(jì)算 Cube,計(jì)算所有 Cuboid 并保存為物化視圖。
3)執(zhí)行查詢時,讀取 Cuboid,運(yùn)算,產(chǎn)生查詢結(jié)果。
由于 Kylin 的查詢過程不會掃描原始記錄,而是通過預(yù)計(jì)算預(yù)先完成表的關(guān) 聯(lián)、聚合等復(fù)雜運(yùn)算,并利用預(yù)計(jì)算的結(jié)果來執(zhí)行查詢,因此相比非預(yù)計(jì)算的查 詢技術(shù),其速度一般要快一到兩個數(shù)量級,并且這點(diǎn)在超大的數(shù)據(jù)集上優(yōu)勢更明 顯。當(dāng)數(shù)據(jù)集達(dá)到千億乃至萬億級別時,Kylin 的速度甚至可以超越其他非預(yù)計(jì)算技術(shù) 1000 倍以上。
7、Kylin的體系架構(gòu)
Apache Kylin 系統(tǒng)可以分為在線查詢和離線構(gòu)建兩部分,技術(shù)架構(gòu)如圖所 示,在線查詢的模塊主要處于上半?yún)^(qū),而離線構(gòu)建則處于下半?yún)^(qū)。
<v:shape id="image9.jpeg" style="width:414.6pt;height:245.4pt;visibility:visible; mso-wrap-style:square" type="#_x0000_t75" o:spid="_x0000_i1025"><v:imagedata o:title="" src="file:///C:\Users\chenning\AppData\Local\Temp\msohtmlclip1\01\clip_image011.jpg"></v:imagedata></v:shape>
1)REST Server
REST Server是一套面向應(yīng)用程序開發(fā)的入口點(diǎn),旨在實(shí)現(xiàn)針對Kylin平臺的應(yīng)用開發(fā)工作。 此類應(yīng)用程序可以提供查詢、獲取結(jié)果、觸發(fā)cube構(gòu)建任務(wù)、獲取元數(shù)據(jù)以及獲取用戶權(quán)限等等。另外可以通過Restful接口實(shí)現(xiàn)SQL查詢。
2)查詢引擎(Query Engine)
當(dāng)cube準(zhǔn)備就緒后,查詢引擎就能夠獲取并解析用戶查詢。它隨后會與系統(tǒng)中的其它組件進(jìn)行交互,從而向用戶返回對應(yīng)的結(jié)果。
3)路由器(Routing)
在最初設(shè)計(jì)時曾考慮過將Kylin不能執(zhí)行的查詢引導(dǎo)去Hive中繼續(xù)執(zhí)行,但在實(shí)踐后發(fā)現(xiàn)Hive與Kylin的速度差異過大,導(dǎo)致用戶無法對查詢的速度有一致的期望,很可能大多數(shù)查詢幾秒內(nèi)就返回結(jié)果了,而有些查詢則要等幾分鐘到幾十分鐘,因此體驗(yàn)非常糟糕。最后這個路由功能在發(fā)行版中默認(rèn)關(guān)閉。
4)元數(shù)據(jù)管理工具(Metadata)
Kylin是一款元數(shù)據(jù)驅(qū)動型應(yīng)用程序。元數(shù)據(jù)管理工具是一大關(guān)鍵性組件,用于對保存在Kylin當(dāng)中的所有元數(shù)據(jù)進(jìn)行管理,其中包括最為重要的cube元數(shù)據(jù)。其它全部組件的正常運(yùn)作都需以元數(shù)據(jù)管理工具為基礎(chǔ)。 Kylin的元數(shù)據(jù)存儲在hbase中。
5)任務(wù)引擎(Cube Build Engine)
這套引擎的設(shè)計(jì)目的在于處理所有離線任務(wù),其中包括shell腳本、Java API以及Map Reduce任務(wù)等等。任務(wù)引擎對Kylin當(dāng)中的全部任務(wù)加以管理與協(xié)調(diào),從而確保每一項(xiàng)任務(wù)都能得到切實(shí)執(zhí)行并解決其間出現(xiàn)的故障。
8、Kylin特點(diǎn)
Kylin的主要特點(diǎn)包括支持SQL接口、支持超大規(guī)模數(shù)據(jù)集、亞秒級響應(yīng)、可伸縮性、高吞吐率、BI工具集成等。
1)標(biāo)準(zhǔn)SQL接口:Kylin是以標(biāo)準(zhǔn)的SQL作為對外服務(wù)的接口。
2)支持超大數(shù)據(jù)集:Kylin對于大數(shù)據(jù)的支撐能力可能是目前所有技術(shù)中最為領(lǐng)先的。早在2015年eBay的生產(chǎn)環(huán)境中就能支持百億記錄的秒級查詢,之后在移動的應(yīng)用場景中又有了千億記錄秒級查詢的案例。
3)亞秒級響應(yīng):Kylin擁有優(yōu)異的查詢相應(yīng)速度,這點(diǎn)得益于預(yù)計(jì)算,很多復(fù)雜的計(jì)算,比如連接、聚合,在離線的預(yù)計(jì)算過程中就已經(jīng)完成,這大大降低了查詢時刻所需的計(jì)算量,提高了響應(yīng)速度。
4)可伸縮性和高吞吐率:單節(jié)點(diǎn)Kylin可實(shí)現(xiàn)每秒70個查詢,還可以搭建Kylin的集群。
5)BI工具集成
Kylin可以與現(xiàn)有的BI工具集成,具體包括如下內(nèi)容。
ODBC:與Tableau、Excel、PowerBI等工具集成
JDBC:與Saiku、BIRT等Java工具集成
RestAPI:與JavaScript、Web網(wǎng)頁集成
Kylin開發(fā)團(tuán)隊(duì)還貢獻(xiàn)了Zepplin的插件,也可以使用Zepplin來訪問Kylin服務(wù)。