Apache Kylin的核心思想是根據使用者的資料模型和查詢樣式對資料進行預計算,並在查詢時直接利用預計算結果返回查詢結果。
相比普通的大規模並行處理解決方案,Kylin具有響應時間快、查詢時資源需求小、吞吐量大等優點。
下面是Apache Kylin在使用過程中的一些最佳化技巧:
(1)對於大的事實表可以採用分割槽來增量構建。為了不影響查詢效能,可以設定定期自動做合併Merge操作,合併的週期可以根據實際情況確定,比如10天進行一次合併。
(2)如果每次查詢都帶有某個維度,那麼建議在高階設定步驟中將此維度設定為Mandatory,好處是最終Build出來Cube的大小會減少一半。
(3)對於維表比較大的情況,或者查詢select部分存在複雜的邏輯判斷,或者存在Kylin不支援的函式或語句時,可以先在Hive中對事實表和維表的進行關聯等邏輯處理,並建立Hive檢視,之後根據檢視建立Cube模型。
下面是針對分表的情況,建立檢視進行合併。
create view palearn_cube as
select userid,eventid,label,day,'android' as platform from
palearn_android WHERE category='gc001'
UNION ALL
select userid,eventid,label,day,'ios' as platform from
palearn_ios WHERE category='gc001';
Apache Kylin中Cube依賴的事實表透過view建立,這樣增加了一層對映,可以減小Cube對原始表的依賴,提高靈活性。
(4)Cube的維度如果超過10個,建議將常用的聚合欄位分組,我們對於最大的16個維度分了三個組,每組大概在5個維度左右。當然,你也可以透過修改Kylin的配置引數,限制Cube的維度個數或者維度組合總數。
(5)Cube定義中RowKey順序:Mandatory維度、Where過濾條件中出現頻率較多的維度、高基數維度、低基數維度。
(6)在搭建Kylin的大資料分析平臺時,可以透過Nginx在前端做負載均衡,後端啟動多個Query Server接收查詢請求處理,提高併發度。