深度分享:OLAP CUBE、空間換時(shí)間、MDX(下)
前面的文章把空間換時(shí)間的原理給大家介紹了一下,接著我們?cè)賮?lái)看看OLAP CUBE具體是如何來(lái)實(shí)現(xiàn)的。
CUBE
比如時(shí)間、區(qū)域、產(chǎn)品和銷(xiāo)售收入這三個(gè)維度和指標(biāo)的組合。它會(huì)先跑一遍SELECT SUM(收入)FROM 表 GROUP BY 時(shí)間,接著就是SELECT SUM(收入)FROM 表 GROUP BY 時(shí)間、區(qū)域,接著就是SELECT SUM(收入)FROM 表 GROUP BY 時(shí)間、區(qū)域、產(chǎn)品,然后就可以是SELECT MAX(收入)FROM 表 GROUP BY 時(shí)間、區(qū)域、產(chǎn)品,就是把各種聚合函數(shù)、各種指標(biāo)、各種維度、各種維度屬性的查詢SQL全都執(zhí)行一遍,把結(jié)果存儲(chǔ)起來(lái)管理起來(lái),就變成了一個(gè)多維立方體就是CUBE。

這個(gè)CUBE本身的描述是通過(guò)一個(gè)或者一組XML文件來(lái)組成的,把里面所有可能用到的SQL在XML文件里面組織起來(lái)。真正處理這個(gè)CUBE的時(shí)候,實(shí)際上跑的是這些SQL語(yǔ)句,在關(guān)系型數(shù)據(jù)庫(kù)中比如數(shù)據(jù)倉(cāng)庫(kù)中把數(shù)據(jù)取出來(lái)進(jìn)行存儲(chǔ)。所以CUBE的空間有時(shí)比數(shù)據(jù)倉(cāng)庫(kù)還要大,各種數(shù)據(jù)的組合都考慮到了。
當(dāng)然,實(shí)際開(kāi)發(fā)中并不會(huì)是所有的維度、所有的屬性、所有的指標(biāo)都有組合分析的必要,因此還可以提前做一些配置,把哪些認(rèn)為可能組合分析的維度、指標(biāo)關(guān)聯(lián)上就可以了。

在CUBE里面就可以很靈活的做各種透視分析,數(shù)據(jù)都是秒出的。但是有一些非直接通過(guò)維度和指標(biāo)組合就可以出來(lái)的數(shù)據(jù)結(jié)果就需要通過(guò)查詢的方式把數(shù)據(jù)給查詢出來(lái),這個(gè)時(shí)候就要用到MDX語(yǔ)句。
MDX
在關(guān)系型數(shù)據(jù)庫(kù)上的數(shù)據(jù)操作我們通過(guò)SQL語(yǔ)句去搞定,在多維分析數(shù)據(jù)庫(kù)CUBE上的數(shù)據(jù)操作就要使用MDX的語(yǔ)句去搞定。
從代碼量上比,MDX比SQL要少很多。比如分析去年在TOP 10消費(fèi)的客戶今年不在的客戶有哪些,MDX可能兩句話就搞定了,但是SQL就需要寫(xiě)一堆。
不過(guò)從便利性上來(lái)說(shuō),MDX語(yǔ)法更加復(fù)雜,三個(gè)月不寫(xiě)基本上就可以忘記差不多了,因?yàn)镃UBE它是一個(gè)多維空間,不像關(guān)系型數(shù)據(jù)庫(kù)是一個(gè)二維的、行列交叉一眼就能看明白。學(xué)習(xí)CUBE還是需要有一定的想象力空間,跟關(guān)系型數(shù)據(jù)庫(kù)取數(shù)的邏輯思考方式完全不一樣。

CUBE在一些海量數(shù)據(jù),特別是大維度表,比如百萬(wàn)級(jí)別的維度、千萬(wàn)級(jí)的維度這種場(chǎng)景下分析優(yōu)勢(shì)還是比較明顯的。
但是現(xiàn)在也有很多MPP數(shù)據(jù)庫(kù)、列式數(shù)據(jù)庫(kù),再結(jié)合對(duì)數(shù)據(jù)倉(cāng)庫(kù)建模的優(yōu)化,也可以解決一部分場(chǎng)景下的分析性能問(wèn)題?,F(xiàn)在OLAP的引擎也已經(jīng)很多了,比如ClickHouse、Impala、Doris、Kylin 等等。
OLAP CUBE 的數(shù)據(jù)來(lái)源一般是來(lái)自規(guī)范的數(shù)據(jù)倉(cāng)庫(kù),最好是基于Kimball 維度建模的數(shù)據(jù)倉(cāng)庫(kù),本身就是標(biāo)準(zhǔn)的維度和事實(shí),CUBE處理起來(lái)就更加的簡(jiǎn)單方便。但是在ETL調(diào)度的時(shí)候,周期就會(huì)拉的比較長(zhǎng),因?yàn)橐忍幚頂?shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù),再才能處理OLAP CUBE里面的數(shù)據(jù)。
OLAP 里面還有一些分類(lèi)比如MOLAP、HOLAP、ROLAP,這些查查資料基本上就看明白,大概理解了就可以了。