kylin的維度組合預設的是2^n;但是在實際場景中簡單的使用這種計算方式去計算生成的維度組合,對於維度數來那個超過40個的,那麼生成的cubeid的數量是4096;如果維度的數量超過這個值,那麼在構建和儲存集查詢方面都可能存在問題,此文章從以下四個層次來管理dinmensions:【以下所有的設定都是基於各司的業務設定,非通用模版】
設:共有維度10個維度:分別為a,b,c,d,e,f,g,h,i,j[其中維度a,b,c,d四個維度直接存在層級關係];
a:全國;b:省;c:市,d:縣;e:單價;f:數量;g:商品;h:員工;i:評級:j:工資
1、聚合組(aggregation groups):
聚合組,主要是業務對於維度分為多類,之間不會有交集或者幾乎沒有交集的各個維度集合進行分類:eg:倉庫管理者關注的是商品,出報告或者分析考慮efg這幾個維度;人事部關注的物件是人,考勤或者工資的定級等考慮的是hij這個幾個維度組合;上層管理者年底想看一下某乙個員工賣出了多少價值的東西,這個時候才會將efghij這幾個維度同時用到,由於使用的頻率低,所以這個結果不會預先處理好,只有到使用的時候實時計算。此時我們就可以分兩個聚合組abcdefg和abcdhij;來減少cubeid的生成。
2、必須維度(mandatory dimensions):
必須must,一定會出現的維度,每次查詢都會出現的維度;eg:對於倉庫管理員來說,在核查商品的時候,商品的名稱及數量是他每次核查必須都關注的物件,那麼在系統查詢的時候這兩個維度是必須出現的,這個時候就可以把fg設定成必須維度。此時的維度數量是2^(10-2)=256,2^(n-x),以此來減少cubeid的數量
3、層次維度(hirearchy dimensions):
層次維度,就是一些維度之間存在一定的層級關係,就像乙個家庭,爺爺、爸爸、哥哥、妹妹等,這也算乙個層次。eg:總公司想看一下各個地方的商品儲存情況,此時的地區就可以以層級維度的進行設計;abcd,此時生成的組合為a,ab,abc,abcd,*;5中cube可以用n+1的方式計算,以此來減少cubeid的數量
4、聯合維度(joint dimensions):
聯合維度,將多個維度繫結在一起,當乙個來進行構建,在查詢的時候這些維度總是一起組合查詢;eg:管理層想關注一下公司的工資水平情況,此時需要關注兩個物件等級和工資這兩個維度,ij就可以作為聯合維度,2^(n-x+1);以此來減少cubeid的數量
kylin的rowkey優化之按維度分片
我們知道,系統會對cuboid的資料進行分片處理。但是預設的分片策略是隨機的,如果group by a,b 的查詢命中了某個cuboid,但是a 1 and b 1 的兩條資料在不同的機器上儲存,那就要將這兩條資料返回到儲存引擎的driver hbase裡是coprocessor 再根據邏輯做聚合。...
Kylin的cubeID各種組合的計算公式
cube的設定組合如下 包含維度,無層級 必須 聯合維度,生成的cubeid 2 n 包含維度,與必須維度,則生成的cubeid 2 n m 包含維度 必須維度 層級維度,則生成的cubeid 2 n m c c 1 包含維度 必須維度 層次維度 聯合維度,則生成的cubeid 2 n c m j ...
按不同維度組合並聚合方法
grouping sets,在乙個 group by 查詢中,根據不同的維度組合進行聚合,等價於將不同維度的 group by 結果集進行 union all cube,根據 group by 的維度的所有組合進行聚合 rollup,是 cube 的子集,以最左側的維度為主,從該維度進行層級聚合。s...