自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Apache Kylin優(yōu)化之—Cube的高級(jí)設(shè)置

大數(shù)據(jù)
根據(jù)本系列的原理介紹,在Kylin的高級(jí)設(shè)置中,用戶可以根據(jù)查詢需求對(duì)Cube構(gòu)建預(yù)計(jì)算的結(jié)果進(jìn)行優(yōu)化(剪枝),從而減少占用的存儲(chǔ)空間。 而優(yōu)化得當(dāng)?shù)腃ube可以在占用盡量少的存儲(chǔ)空間的同時(shí)提供極強(qiáng)的查詢性能。

隨著維度數(shù)目的增加,Cuboid 的數(shù)量會(huì)爆炸式地增長(zhǎng)。為了緩解 Cube 的構(gòu)建壓力,Apache Kylin 引入了一系列的高級(jí)設(shè)置,幫助用戶篩選出真正需要的 Cuboid。這些高級(jí)設(shè)置包括聚合組(Aggregation Group)、聯(lián)合維度(Joint Dimension)、層級(jí)維度(Hierachy Dimension)和必要維度(Mandatory Dimension)等。”

眾所周知,Apache Kylin 的主要工作就是為源數(shù)據(jù)構(gòu)建 N 個(gè)維度的 Cube,實(shí)現(xiàn)聚合的預(yù)計(jì)算。理論上而言,構(gòu)建 N 個(gè)維度的 Cube 會(huì)生成 2N 個(gè) Cuboid, 如圖 1 所示,構(gòu)建一個(gè) 4 個(gè)維度(A,B,C, D)的 Cube,需要生成 16 個(gè)Cuboid。

(圖1)

隨著維度數(shù)目的增加 Cuboid 的數(shù)量會(huì)爆炸式地增長(zhǎng),不僅占用大量的存儲(chǔ)空間還會(huì)延長(zhǎng) Cube 的構(gòu)建時(shí)間。為了緩解 Cube 的構(gòu)建壓力,減少生成的 Cuboid 數(shù)目,Apache Kylin 引入了一系列的高級(jí)設(shè)置,幫助用戶篩選出真正需要的 Cuboid。這些高級(jí)設(shè)置包括聚合組(Aggregation Group)、聯(lián)合維度(Joint Dimension)、層級(jí)維度(Hierachy Dimension)和必要維度(Mandatory Dimension)等,本系列將深入講解這些高級(jí)設(shè)置的含義及其適用的場(chǎng)景。

聚合組(Aggregation Group)

用戶根據(jù)自己關(guān)注的維度組合,可以劃分出自己關(guān)注的組合大類,這些大類在 Apache Kylin 里面被稱為聚合組。例如圖 1 中展示的 Cube,如果用戶僅僅關(guān)注維度 AB 組合和維度 CD 組合,那么該 Cube 則可以被分化成兩個(gè)聚合組,分別是聚合組 AB 和聚合組 CD。如圖 2 所示,生成的 Cuboid 數(shù)目從 16 個(gè)縮減成了 8 個(gè)。

(圖2)

用戶關(guān)心的聚合組之間可能包含相同的維度,例如聚合組 ABC 和聚合組 BCD 都包含維度 B 和維度 C。這些聚合組之間會(huì)衍生出相同的 Cuboid,例如聚合組 ABC 會(huì)產(chǎn)生 Cuboid BC,聚合組 BCD 也會(huì)產(chǎn)生 Cuboid BC。這些 Cuboid不會(huì)被重復(fù)生成,一份 Cuboid 為這些聚合組所共有,如圖 3 所示。

(圖3)

有了聚合組用戶就可以粗粒度地對(duì) Cuboid 進(jìn)行篩選,獲取自己想要的維度組合。

聚合組應(yīng)用實(shí)例

假設(shè)創(chuàng)建一個(gè)交易數(shù)據(jù)的 Cube,它包含了以下一些維度:顧客 ID buyer_id 交易日期 cal_dt、付款的方式 pay_type 和買家所在的城市 city。有時(shí)候,分析師需要通過分組聚合 city、cal_dt 和 pay_type 來獲知不同消費(fèi)方式在不同城市的應(yīng)用情況;有時(shí)候,分析師需要通過聚合 city 、cal_dt 和 buyer_id,來查看顧客在不同城市的消費(fèi)行為。在上述的實(shí)例中,推薦建立兩個(gè)聚合組,包含的維度和方式如圖 4 :

(圖4)

聚合組 1: [cal_dt, city, pay_type]

聚合組 2: [cal_dt, city, buyer_id]

在不考慮其他干擾因素的情況下,這樣的聚合組將節(jié)省不必要的 3 個(gè) Cuboid: [pay_type, buyer_id]、[city, pay_type, buyer_id] 和 [cal_dt, pay_type, buyer_id] 等,節(jié)省了存儲(chǔ)資源和構(gòu)建的執(zhí)行時(shí)間。

Case 1:

SELECT cal_dt, city, pay_type, count(*) FROM table GROUP BY cal_dt, city, pay_type 則將從 Cuboid [cal_dt, city, pay_type] 中獲取數(shù)據(jù)。

Case2:

SELECT cal_dt, city, buy_id, count(*) FROM table GROUP BY cal_dt, city, buyer_id 則將從 Cuboid [cal_dt, city, pay_type] 中獲取數(shù)據(jù)。

Case3 如果有一條不常用的查詢:

SELECT pay_type, buyer_id, count(*) FROM table GROUP BY pay_type, buyer_id 則沒有現(xiàn)成的完全匹配的 Cuboid。

此時(shí),Apache Kylin 會(huì)通過在線計(jì)算的方式,從現(xiàn)有的 Cuboid 中計(jì)算出最終結(jié)果。

聯(lián)合維度(Joint Dimension)

用戶有時(shí)并不關(guān)心維度之間各種細(xì)節(jié)的組合方式,例如用戶的查詢語(yǔ)句中僅僅會(huì)出現(xiàn) group by A, B, C,而不會(huì)出現(xiàn) group by A, B 或者 group by C 等等這些細(xì)化的維度組合。這一類問題就是聯(lián)合維度所解決的問題。例如將維度 A、B 和 C 定義為聯(lián)合維度,Apache Kylin 就僅僅會(huì)構(gòu)建 Cuboid ABC,而 Cuboid AB、BC、A 等等Cuboid 都不會(huì)被生成。最終的 Cube 結(jié)果如圖5所示,Cuboid 數(shù)目從 16 減少到 4。

(圖5)

聯(lián)合維度應(yīng)用實(shí)例

假設(shè)創(chuàng)建一個(gè)交易數(shù)據(jù)的Cube,它具有很多普通的維度,像是交易日期 cal_dt,交易的城市 city,顧客性別 sex_id 和支付類型 pay_type 等。分析師常用的分析方法為通過按照交易時(shí)間、交易地點(diǎn)和顧客性別來聚合,獲取不同城市男女顧客間不同的消費(fèi)偏好,例如同時(shí)聚合交易日期 cal_dt、交易的城市 city 和顧客性別 sex_id來分組。在上述的實(shí)例中,推薦在已有的聚合組中建立一組聯(lián)合維度,包含的維度和組合方式如圖6:

(圖6)

聚合組:[cal_dt, city, sex_id,pay_type]

聯(lián)合維度: [cal_dt, city, sex_id]

Case 1:

SELECT cal_dt, city, sex_id, count(*) FROM table GROUP BY cal_dt, city, sex_id 則它將從Cuboid [cal_dt, city, sex_id]中獲取數(shù)據(jù)

Case2如果有一條不常用的查詢:

SELECT cal_dt, city, count(*) FROM table GROUP BY cal_dt, city 則沒有現(xiàn)成的完全匹配的 Cuboid,Apache Kylin 會(huì)通過在線計(jì)算的方式,從現(xiàn)有的 Cuboid 中計(jì)算出最終結(jié)果。

層級(jí)維度(Hierarchy Dimension)

用戶選擇的維度中常常會(huì)出現(xiàn)具有層級(jí)關(guān)系的維度。例如對(duì)于國(guó)家(country)、省份(province)和城市(city)這三個(gè)維度,從上而下來說國(guó)家/省份/城市之間分別是一對(duì)多的關(guān)系。也就是說,用戶對(duì)于這三個(gè)維度的查詢可以歸類為以下三類:

group by country

group by country, province(等同于group by province)

group by country, province, city(等同于 group by country, city 或者group by city)

以圖7所示的 Cube 為例,假設(shè)維度 A 代表國(guó)家,維度 B 代表省份,維度 C 代表城市,那么ABC 三個(gè)維度可以被設(shè)置為層級(jí)維度,生成的Cube 如圖7所示。

(圖7)

例如,Cuboid [A,C,D]=Cuboid[A, B, C, D],Cuboid[B, D]=Cuboid[A, B, D],因而 Cuboid[A, C, D] 和 Cuboid[B, D] 就不必重復(fù)存儲(chǔ)。

圖8展示了 Kylin 按照前文的方法將冗余的Cuboid 剪枝從而形成圖 2 的 Cube 結(jié)構(gòu),Cuboid 數(shù)目從 16 減小到 8。

(圖8)

層級(jí)維度應(yīng)用實(shí)例

假設(shè)一個(gè)交易數(shù)據(jù)的 Cube,它具有很多普通的維度,像是交易的城市 city,交易的省 province,交易的國(guó)家 country, 和支付類型 pay_type等。分析師可以通過按照交易城市、交易省份、交易國(guó)家和支付類型來聚合,獲取不同層級(jí)的地理位置消費(fèi)者的支付偏好。在上述的實(shí)例中,建議在已有的聚合組中建立一組層級(jí)維度(國(guó)家country/省province/城市city),包含的維度和組合方式如圖9:

[[190149]]

(圖9)

聚合組:[country, province, city,pay_type]

層級(jí)維度: [country, province, city]

Case 1 當(dāng)分析師想從城市維度獲取消費(fèi)偏好時(shí):

SELECT city, pay_type, count(*) FROM table GROUP BY city, pay_type 則它將從 Cuboid [country, province, city, pay_type] 中獲取數(shù)據(jù)。

Case 2 當(dāng)分析師想從省級(jí)維度獲取消費(fèi)偏好時(shí):

SELECT province, pay_type, count(*) FROM table GROUP BY province, pay_type 則它將從Cuboid [country, province, pay_type] 中獲取數(shù)據(jù)。

Case 3 當(dāng)分析師想從國(guó)家維度獲取消費(fèi)偏好時(shí):

SELECT country, pay_type, count(*) FROM table GROUP BY country, pay_type 則它將從Cuboid [country, pay_type] 中獲取數(shù)據(jù)。

Case 4 如果分析師想獲取不同粒度地理維度的聚合結(jié)果時(shí):

無一例外都可以由圖 3 中的 cuboid 提供數(shù)據(jù) 。

例如,SELECT country, city, count(*) FROM table GROUP BY country, city 則它將從 Cuboid [country, province, city] 中獲取數(shù)據(jù)。

必要維度 (Mandatory Dimension)

用戶有時(shí)會(huì)對(duì)某一個(gè)或幾個(gè)維度特別感興趣,所有的查詢請(qǐng)求中都存在group by這個(gè)維度,那么這個(gè)維度就被稱為必要維度,只有包含此維度的Cuboid會(huì)被生成(如圖10)。

(圖10)

以圖 1中的Cube為例,假設(shè)維度A是必要維度,那么生成的Cube則如圖11所示,維度數(shù)目從16變?yōu)?。

(圖11)

必要維度應(yīng)用實(shí)例

假設(shè)一個(gè)交易數(shù)據(jù)的Cube,它具有很多普通的維度,像是交易時(shí)間order_dt,交易的地點(diǎn)location,交易的商品product和支付類型pay_type等。其中,交易時(shí)間就是一個(gè)被高頻作為分組條件(group by)的維度。 如果將交易時(shí)間order_dt設(shè)置為必要維度,包含的維度和組合方式如圖12:

(圖12)

系列總結(jié)

根據(jù)本系列的原理介紹,在Kylin的高級(jí)設(shè)置中,用戶可以根據(jù)查詢需求對(duì)Cube構(gòu)建預(yù)計(jì)算的結(jié)果進(jìn)行優(yōu)化(剪枝),從而減少占用的存儲(chǔ)空間。 而優(yōu)化得當(dāng)?shù)腃ube可以在占用盡量少的存儲(chǔ)空間的同時(shí)提供極強(qiáng)的查詢性能。

責(zé)任編輯:武曉燕 來源: apachekylin公眾號(hào)
相關(guān)推薦

2017-04-11 09:33:55

Apache Kyli優(yōu)化聚合組

2017-01-15 14:27:32

大數(shù)據(jù)美團(tuán)點(diǎn)評(píng)技術(shù)

2022-05-26 21:38:02

開源分布式Hadoop

2016-11-15 09:34:14

Apache Kyli流處理引擎

2023-10-09 07:42:49

PawSQL數(shù)據(jù)庫(kù)管理

2023-11-28 07:54:18

2018-03-07 12:50:59

Apache優(yōu)化建議

2023-10-23 09:19:47

PawSQL數(shù)據(jù)庫(kù)

2023-11-07 07:50:55

LIMIT子句下推優(yōu)化

2011-03-11 15:52:59

LAMP優(yōu)化

2011-03-11 14:02:53

Apache配置

2011-07-21 16:40:28

網(wǎng)站優(yōu)化

2010-05-05 19:00:54

apache負(fù)載均衡

2011-06-22 17:11:18

SEO

2010-08-05 13:28:57

2012-02-22 22:56:19

開源Apache

2011-03-21 10:49:33

LAMPApache

2017-05-11 10:44:19

Apache KyliCount_Disti字符串

2011-06-20 14:59:33

網(wǎng)站優(yōu)化

2013-09-16 16:56:09

AndroidBitmap內(nèi)存優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)