Apache Kylin 入門系列目錄算法
本文從各個角度總結一些 Kylin 實踐相關的最佳實踐,不必定很是準確,歡迎批評指正。編程
若是維度與事實表沒法映射,某些字段(數據類型爲 number 系列)會遇到構建失敗的問題(
numberFormatException('\N')
,\N
是爲 Hive 中 NULL 的實際存儲內容);此外,在進行 Left Join 的時候會產生大量的 NULL,這些 NULL 值在真正查詢中根本沒有任何做用。架構
Hive 表支持多分區(Partition),簡單地說,一個分區就是一個文件目錄,存儲了特定的數據文件。當有新的數據生成的時候,能夠將數據加載到指定的分區,讀取數據的時候也能夠指定分區。對於 SQL 查詢,若是查詢中指定了分區列的屬性條件,則 Hive 會智能地選擇特定分區(也就是目錄),從而避免全量數據的掃描,減小讀寫操做對集羣的壓力。app
Kylin 支持增量的 Cube 構建,一般是按時間屬性來增量地從 Hive 表中抽取數據。若是 Hive 表正好是按此時間屬性作分區的話,那麼就能夠利用到 Hive 分區的好處,每次在 Hive 構建的時候均可以直接跳過不相干日期的數據,節省 Cube 構建的時間。這樣的列在 Kylin 裏也稱爲分割時間列(Partition Time Column),一般它應該也是 Hive 表的分區列。oop
必需維度、層級維度、聯合維度、衍生維度以及聚合組能夠參看 Apache Kylin 入門 5 一文的詳細說明。post
不少人會誤覺得只有聚合組 Includes 裏面被選擇的維度才參與 Cube 構建的計算,其實真正參與計算是 Dimensions 設置界面選擇爲 Default 的那些維度,還有 Left Join 的字段(若是其 Derived 字段被勾選)。優化
簡單來講,在 RowKeys 排序界面看到的維度都會參與 Cuboid 的構建,若是在 RowKeys 看到不想參與計算的維度,能夠到 Dimensions 設置界面進行修改。code
層級維度在設置的時候必定要深入理解業務,例如:企業到底歸屬到行業類型下仍是歸屬到區域類型下?從層級結構的角度來說都是能夠的,深層次挖掘業務需求後咱們會發現,凡是查詢企業的時候均附帶有區域的過濾條件,所以將企業歸屬到區域的層級下比歸屬到行業類型下更加有效。orm
在實踐中,可能會遇到各類不肯定的思路,最佳的作法是去實踐,多創建 Model 和 Cube,從不一樣層次去優化,去嘗試,在實踐中不斷總結經驗。cdn
Any Code,Code Any!
掃碼關注『AnyCode』,編程路上,一塊兒前行。