Kylin 剪枝優化及其方法

2021-07-31 06:48:31 字數 1006 閱讀 1495

在沒有採取任何的優化措施的時候,kylin會對每乙個維度組合進行預計算,若有4個維度,則會有將近2^4 = 16個cuboid需要進行計算。但是我們知道很多維度是:

檢查cube的數量 -> 檢查被物化的cube數量 (meterialized)

檢查cube的大小 -> expansion rate (0-1000%是乙個較為正常的數字)

即使用維度表的主鍵(也就是事實表的外來鍵)來代替維度表的非主鍵維度,這種方式犧牲一部分執行時間效能來節省cube的空間占用目的。

聚合組假設乙個cube的所有維度均可以根據業務需求劃分為若干組(或者乙個組),由於同一組合內更有可能被同一查詢到,因此會表現出更強大的內在關聯

每乙個組內,會包含三種可選的維度:

1.強制維度(mandatory)

若為強制維度,則該分組中每乙個cubiod都會包含這個維度,若該維度一定會出現在查詢中,則應當將其設定為強制維度

2.層級維度(hierachy)

每乙個層級中應包含2-n個維度,這n個維度會以()、(n1)、(n1,n2)、…、(n1, n2,…,nn)這n+1種情況進行組合

3.聯合維度(joint)

每乙個聯合維度包括兩個或者更多的維度,聯合維度內的維度,要麼不出現,要麼必須一起出現。不同的聯合之間不應當有共同的維度

粒度優化對應的是提高cube的併發度,其設定是在自定義屬性中的

一共有三個屬性可以提高併發度。

1.kylin.hbase.region.cut(共使用幾個分割槽)

2.kylin.hbase.region.count.min(最少使用幾個分割槽)

3.kylin.hbase.region.count.max(最多使用幾個分割槽)

根據相對應的情況調高最少使用分割槽,降低最大使用分割槽,能夠有效增加系統的並行度。

和hbase 的rowkey優化類似

1.在查詢的過程中,被用作過濾條件的維度可能放在其他維度的前面

2.經常出現的維度應該放在前面

3.基數比較大的維度應該放在前面

kylin剪枝優化的兩種方式

1.衍生維度。在kylin中,如果某些維度都屬於同一種型別,且數量較多,可以考慮做成衍生維度。衍生維度就是將一批維度做成一張維度表,只在源表中保留這張表的外來鍵,這樣預處理的時候,就只會處理這個外來鍵,而不會去處理維度表中的維度,降低cuboid的數量。衍生維度用於在有效維度內將維度表上的非主鍵維度...

DFS及其剪枝

深度優先搜尋,是從初始狀態起,利用一定的規則生成搜尋樹,尋找下一層任乙個結點,檢查是否出現目標狀態,若未出現,以此狀態利用規則生成再下一層任乙個結點,再檢查,重複過程一直到葉節點 即不能再生成新狀態節點 當它仍不是目標狀態時,回溯到上一層結果,取另一可能擴充套件搜尋的分支。採用相同辦法一直進行下去,...

kylin構建cube優化

下面通過對kylin構建cube流程的分析來介紹cube優化思路。kylin會在cube構建的第一步先構建一張hive的中間表,該錶關聯了所有的事實表和維度表,也就是一張寬表。優化點 1.hive表分割槽優化,在構建寬表的時候,kylin需要遍歷hive表,事實表和維度表如果是分割槽表,那麼會減少遍...