Kylin Cube 創建教程

Cube 創建

I. 新建項目

  1. 由頂部菜單欄進入 Model 頁面,然後點擊 Manage Projects

  2. 點擊 + Project 按鈕添加一個新的項目。

  3. 填寫下列表單並點擊 submit 按鈕提交請求。

  4. 成功後,底部會顯示通知。

II. 同步Hive表

  1. 在頂部菜單欄點擊 Model,然後點擊左邊的 Data Source 標籤,它會列出所有加載進 Kylin 的表,點擊 Load Table 按鈕。

  2. 輸入表名並點擊 Sync 按鈕提交請求。

  3. 【可選】如果你想要瀏覽 hive 數據庫來選擇表,點擊 Load Table From Tree 按鈕。

  4. 【可選】展開數據庫節點,點擊選擇要加載的表,然後點擊 Sync 按鈕。

  5. 成功的消息將會彈出,在左邊的 Tables 部分,新加載的表已經被添加進來。點擊表將會展開列。

  6. 在後臺,Kylin 將會執行 MapReduce 任務計算新同步表的基數(cardinality),任務完成後,刷新頁面並點擊表名,基數值將會顯示在表信息中。

III. 新建 Data Model

創建 cube 前,需定義一個數據模型。數據模型定義了一個星型(star schema)或雪花(snowflake schema)模型。一個模型可以被多個 cube 使用。

  1. 點擊頂部的 Model ,然後點擊 Models 標籤。點擊 +New 按鈕,在下拉框中選擇 New Model

  2. 輸入 model 的名字和可選的描述。

  1.  Fact Table 中,爲模型選擇事實表。

  2. 【可選】點擊 Add Lookup Table 按鈕添加一個 lookup 表。選擇表名和關聯類型(內連接或左連接)

  3. 點擊 New Join Condition 按鈕,左邊選擇事實表的外鍵,右邊選擇 lookup 表的主鍵。如果有多於一個 join 列重複執行。

  4. 點擊 “OK”,重複4,5步來添加更多的 lookup 表。完成後,點擊 “Next”。

  5. Dimensions 頁面允許選擇在子 cube 中用作維度的列,然後點擊 Columns 列,在下拉框中選擇需要的列。

  6. 點擊 “Next” 到達 “Measures” 頁面,選擇作爲 measure 的列,其只能從事實表中選擇。

  1. 點擊 “Next” 到達 “Settings” 頁面,如果事實表中的數據每日增長,選擇 Partition Date Column 中相應的 日期列以及日期格式,否則就將其留白。

  2. 【可選】選擇是否需要 “time of the day” 列,默認情況下爲 No。如果選擇 Yes, 選擇 Partition Time Column 中相應的 time 列以及 time 格式

  3. 【可選】如果在從 hive 抽取數據時候想做一些篩選,可以在 Filter 中輸入篩選條件。

  4. 點擊 Save 然後選擇 Yes 來保存 data model。創建完成,data model 就會列在左邊 Models 列表中。

IV. 新建 Cube

創建完 data model,可以開始創建 cube。
點擊頂部 Model,然後點擊 Models 標籤。點擊 +New 按鈕,在下拉框中選擇 New Cube

步驟1. Cube 信息

  1. 選擇 data model,輸入 cube 名字;點擊 Next 進行下一步。

cube 名字可以使用字母,數字和下劃線(空格不允許)。Notification Email List 是運用來通知job執行成功或失敗情況的郵箱列表。Notification Events 是觸發事件的狀態。

步驟2. 維度

  1. 點擊 Add Dimension,在彈窗中顯示的事實表和 lookup 表裏勾選輸入需要的列。Lookup 表的列有2個選項:“Normal” 和 “Derived”(默認)。“Normal” 添加一個普通獨立的維度列,“Derived” 添加一個 derived 維度,derived 維度不會計算入 cube,將由事實表的外鍵推算出。閱讀更多【如何優化 cube】(/docs15/howto/howto_optimize_cubes.html)。

  2. 選擇所有維度後點擊 “Next”。

步驟3. 度量

  1. 點擊 +Measure 按鈕添加一個新的度量。

  2. 根據它的表達式共有8種不同類型的度量:SUMMAXMINCOUNTCOUNT_DISTINCT TOP_N, EXTENDED_COLUMN  PERCENTILE。請合理選擇 COUNT_DISTINCT  TOP_N 返回類型,它與 cube 的大小相關。

    • SUM

    • MIN

    • MAX

    • COUNT

    • DISTINCT_COUNT
      這個度量有兩個實現:
      1)近似實現 HyperLogLog,選擇可接受的錯誤率,低錯誤率需要更多存儲;
      2)精確實現 bitmap(具體限制請看 https://issues.apache.org/jira/browse/KYLIN-1186)

    注意:distinct 是一種非常重的數據類型,和其他度量相比構建和查詢會更慢。

    • TOP_N
      TopN 度量在每個維度結合時預計算,它比未預計算的在查詢時間上性能更好;需要兩個參數:一是被用來作爲 Top 記錄的度量列,Kylin 將計算它的 SUM 值並做倒序排列;二是 literal ID,代表最 Top 的記錄,例如 seller_id;

    合理的選擇返回類型,將決定多少 top 記錄被監察:top 10, top 100, top 500, top 1000, top 5000 or top 10000。
    注意:如果您想要使用 TOP_N,您需要爲 “ORDER | SUM by Column” 添加一個 SUM 度量。例如,如果您創建了一個根據價格的總和選出 top100 的賣家的度量,那麼也應該創建一個 SUM(price) 度量。

    • EXTENDED_COLUMN
      Extended_Column 作爲度量比作爲維度更節省空間。一列和另一列可以生成新的列。

    • PERCENTILE
      Percentile 代表了百分比。值越大,錯誤就越少。100爲最合適的值。

步驟4. 更新設置

這一步驟是爲增量構建 cube 而設計的。

Auto Merge Thresholds: 自動合併小的 segments 到中等甚至更大的 segment。如果不想自動合併,刪除默認2個選項。

Volatile Range: 默認爲0,會自動合併所有可能的 cube segments,或者用 ‘Auto Merge’ 將不會合並最新的 [Volatile Range] 天的 cube segments。

Retention Threshold: 只會保存 cube 過去幾天的 segment,舊的 segment 將會自動從頭部刪除;0表示不啓用這個功能。

Partition Start Date: cube 的開始日期.

步驟5. 高級設置

Aggregation Groups: Cube 中的維度可以劃分到多個聚合組中。默認 kylin 會把所有維度放在一個聚合組,當維度較多時,產生的組合數可能是巨大的,會造成 Cube 爆炸;如果你很好的瞭解你的查詢模式,那麼你可以創建多個聚合組。在每個聚合組內,使用 “Mandatory Dimensions”, “Hierarchy Dimensions” 和 “Joint Dimensions” 來進一步優化維度組合。

Mandatory Dimensions: 必要維度,用於總是出現的維度。例如,如果你的查詢中總是會帶有 “ORDER_DATE” 做爲 group by 或 過濾條件, 那麼它可以被聲明爲必要維度。這樣一來,所有不含此維度的 cuboid 就可以被跳過計算。

Hierarchy Dimensions: 層級維度,例如 “國家” -> “省” -> “市” 是一個層級;不符合此層級關係的 cuboid 可以被跳過計算,例如 [“省”], [“市”]. 定義層級維度時,將父級別維度放在子維度的左邊。

Joint Dimensions:聯合維度,有些維度往往一起出現,或者它們的基數非常接近(有1:1映射關係)。例如 “user_id” 和 “email”。把多個維度定義爲組合關係後,所有不符合此關係的 cuboids 會被跳過計算。

關於更多維度優化,請閱讀這個博客: 新的聚合組

Rowkeys: 是由維度編碼值組成。”Dictionary” (字典)是默認的編碼方式; 字典只能處理中低基數(少於一千萬)的維度;如果維度基數很高(如大於1千萬), 選擇 “false” 然後爲維度輸入合適的長度,通常是那列的最大長度值; 如果超過最大值,會被截斷。請注意,如果沒有字典編碼,cube 的大小可能會非常大。

你可以拖拽維度列去調整其在 rowkey 中位置; 位於rowkey前面的列,將可以用來大幅縮小查詢的範圍。通常建議將 mandantory 維度放在開頭, 然後是在過濾 ( where 條件)中起到很大作用的維度;如果多個列都會被用於過濾,將高基數的維度(如 user_id)放在低基數的維度(如 age)的前面。

Mandatory Cuboids: 維度組合白名單。確保你想要構建的 cuboid 能被構建。

Cube Engine: cube 構建引擎。有兩種:MapReduce 和 Spark。如果你的 cube 只有簡單度量(SUM, MIN, MAX),建議使用 Spark。如果 cube 中有複雜類型度量(COUNT DISTINCT, TOP_N),建議使用 MapReduce。

Advanced Dictionaries: “Global Dictionary” 是用於精確計算 COUNT DISTINCT 的字典, 它會將一個非 integer的值轉成 integer,以便於 bitmap 進行去重。如果你要計算 COUNT DISTINCT 的列本身已經是 integer 類型,那麼不需要定義 Global Dictionary。 Global Dictionary 會被所有 segment 共享,因此支持在跨 segments 之間做上捲去重操作。請注意,Global Dictionary 隨着數據的加載,可能會不斷變大。

“Segment Dictionary” 是另一個用於精確計算 COUNT DISTINCT 的字典,與 Global Dictionary 不同的是,它是基於一個 segment 的值構建的,因此不支持跨 segments 的彙總計算。如果你的 cube 不是分區的或者能保證你的所有 SQL 按照 partition_column 進行 group by, 那麼你應該使用 “Segment Dictionary” 而不是 “Global Dictionary”,這樣可以避免單個字典過大的問題。

請注意:”Global Dictionary” 和 “Segment Dictionary” 都是單向編碼的字典,僅用於 COUNT DISTINCT 計算(將非 integer 類型轉成 integer 用於 bitmap計算),他們不支持解碼,因此不能爲普通維度編碼。

Advanced Snapshot Table: 爲全局 lookup 表而設計,提供不同的存儲類型。

Advanced ColumnFamily: 如果有超過一個的COUNT DISTINCT 或 TopN 度量, 你可以將它們放在更多列簇中,以優化與HBase 的I/O。

步驟6. 重寫配置

Kylin 允許在 Cube 級別覆蓋部分 kylin.properties 中的配置,你可以在這裏定義覆蓋的屬性。如果你沒有要配置的,點擊 Next 按鈕。

步驟7. 概覽 & 保存

你可以概覽你的 cube 並返回之前的步驟進行修改。點擊 Save 按鈕完成 cube 創建。

恭喜,cube 創建好了,你可以去構建和玩它了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章