OALP基礎入門
一、Data WareHousing和OLAP的區別
DW是一套資料處理流程和資料結構,其目的是將一個公司的各種資料整理儲存。OLTP(online transaction processing)資料模型用於記錄公司的業務流水,除了查詢資料,還涉及到資料的新增和更新,並且要保證資料的事務性,即Transaction。而DW更多是應對大資料的查詢和報表計算,不會涉及事務和更新等場景。
OLAP是基於DW中的海量資料做分析,挖掘出資料中隱藏的資訊從而指導商業決策
二、什麼是Star schema
2.1 定義
將原始OLTP中的業務表,按照一定的業務邏輯組織成事實表(Fact Table)和維度表(Dimension Table)兩種型別的表。且一張事實表,往往關聯多張維度表,從而形成一個星形,故而將這種資料結構設計叫做Star schema.
事實表一條記錄往往定義了一次業務事件。其中儲存這次業務事件對應各維度id和業務指標。
維度表存放了維度的詳細資訊
以下圖來舉例
事實表存放了某一時間點,某個商店(store)銷售了什麼商品,以及銷售了多少個的資訊。而圍繞它周圍的是三張維度表,時間維度表詳細記錄了某個具體時間其對應一週的第幾天、對應哪個季度、哪年等資訊。商店維度記錄了每個具體商店的編號,所屬國家省份等資訊。產品維度表記錄了產品的名稱、品牌、分類等資訊。
有些維度表,可能過於複雜,還需要進一步拆分成更細的維度表。這樣構建起來的schema更為複雜,叫做雪花型(
Snowflake schema)。形狀如下:

2.2 作用
星形模型的schema設計,雖然不符合OLTP資料結構設計正規化。但其方便了海量資料的查詢和統計。
三、什麼是OLAP Cube
想要對傳統OLTP資料庫做資料分析,在資料量變大時,往往耗時嚴重,一張報表的計算長達數天都是不什麼新鮮事。且基於OLTP做報表計算,還會拖慢OLTP本身的業務處理。所以預計算的OLAP Cube就應運而生,只要建模合適,這樣的立方可以快速高效的進行報表計算。
OLAP Cube是為方便海量資料分析而設計的資料結構。它由多個維度和指標組成。比如:
上圖的立方體的三個座標方向中,有兩個業務維度和一個指標維度
- 分類維度(Category Dimension) 類別有confections、condiments等
- 時間維度(Time Dimension) 記錄了2013年各月份
- 指標維度(Measures) 則是各指標
以上三個維度每個單位交叉的表格,即為具體的指標值。比如最左下角的數值22表示了,四月份,confections的庫存數(In Stock)。
有了這個資料立方,我們可以進行一系列的操作,就像使用真正的立方一樣,來求取各種報表資料。
3.1 切片(slice)
想象用一把刀,將立方底部四分之一出,水平切割。切出一片只含四月份(april)的各產品型別的各種指標。切出來的效果

3.2 切塊(dice)
假設我們從左到右五分之二處,沿垂直方向切割。切出了所有分類在2013年所有月份的庫存(in stock) 和訂單(on order)數量。

可以看到切片和切塊的區別在於,塊中不止一片
3.3 向下鑽取(Drill Down)
有可能我關注的不是每個月的指標,而是想看每天的指標,這個時候對某一月向下檢視明細,便叫做鑽取。
3.4 向上鑽取(Drill Up)
而對某個維度的向上統計其父級別的指標,則叫做向上鑽取,比如按年維度來統計指標
3.5 透視表(pivot table)
資料cube,可能多個維度,而從資料cube中只切分兩個維度的形成的資料表,叫做透視表,透視表可以方便的進行一系列的彙總操作。
例如普通的表:

pivot table則為:

四、OLAP Cube資料庫
OLAP Cube的可以直接基於Star schema 建立,也可以基於原始OLTP資料來建立。由於OLAP Cube的多維度特性。普通的關係型資料庫無法處理,所以需要專門的資料庫產品進行儲存使用。這裡有各種商業產品,也有許多開源產品。比如Apach kylin, Druid 等。
普通的關係資料表,其查詢語句是SQL,OLAP Cube也有其專有的查詢語法,叫做 ofollow,noindex" target="_blank">MDX ,當然很多OLAP產品提供了更友好的支援,不需要使用者去直接寫MDX