Apache kylin 入門學習(3) build cube

導入hive表

登錄Kylin的Web界面,創建新的或選擇一個已有的項目之後,需要
做的就是將Hive表的定義導入到Kylin中。
單擊Web界面的Model→Data source下的“Load Hive Table”圖標,然
後輸入表的名稱(可以一次導入多張表,以逗號分隔表名,如圖2-1所
示),單擊按鈕“Sync”,Kylin就會使用Hive的API從Hive中獲取表的屬性
信息。

在這裏插入圖片描述
cal_dt內容

kylin_cal_dt.cal_dt,kylin_cal_dt.year_beg_dt,kylin_cal_dt.qtr_beg_dt,kylin_cal_dt.month_beg_dt,kylin_cal_dt.week_beg_dt,kylin_cal_dt.age_for_year_id,kylin_cal_dt.age_for_qtr_id,kylin_cal_dt.age_for_month_id,kylin_cal_dt.age_for_week_id,kylin_cal_dt.age_for_dt_id,kylin_cal_dt.age_for_rtl_year_id,kylin_cal_dt.age_for_rtl_qtr_id,kylin_cal_dt.age_for_rtl_month_id,kylin_cal_dt.age_for_rtl_week_id,kylin_cal_dt.age_for_cs_week_id,kylin_cal_dt.day_of_cal_id,kylin_cal_dt.day_of_year_id,kylin_cal_dt.day_of_qtr_id,kylin_cal_dt.day_of_month_id,kylin_cal_dt.day_of_week_id,kylin_cal_dt.week_of_year_id,kylin_cal_dt.week_of_cal_id,kylin_cal_dt.month_of_qtr_id,kylin_cal_dt.month_of_year_id,kylin_cal_dt.month_of_cal_id,kylin_cal_dt.qtr_of_year_id,kylin_cal_dt.qtr_of_cal_id,kylin_cal_dt.year_of_cal_id,kylin_cal_dt.year_end_dt,kylin_cal_dt.qtr_end_dt,kylin_cal_dt.month_end_dt,kylin_cal_dt.week_end_dt,kylin_cal_dt.cal_dt_name,kylin_cal_dt.cal_dt_desc,kylin_cal_dt.cal_dt_short_name,kylin_cal_dt.ytd_yn_id,kylin_cal_dt.qtd_yn_id,kylin_cal_dt.mtd_yn_id,kylin_cal_dt.wtd_yn_id,kylin_cal_dt.season_beg_dt,kylin_cal_dt.day_in_year_count,kylin_cal_dt.day_in_qtr_count,kylin_cal_dt.day_in_month_count,kylin_cal_dt.day_in_week_count,kylin_cal_dt.rtl_year_beg_dt,kylin_cal_dt.rtl_qtr_beg_dt,kylin_cal_dt.rtl_month_beg_dt,kylin_cal_dt.rtl_week_beg_dt,kylin_cal_dt.cs_week_beg_dt,kylin_cal_dt.cal_date,kylin_cal_dt.day_of_week,kylin_cal_dt.month_id,kylin_cal_dt.prd_desc,kylin_cal_dt.prd_flag,kylin_cal_dt.prd_id,kylin_cal_dt.prd_ind,kylin_cal_dt.qtr_desc,kylin_cal_dt.qtr_id,kylin_cal_dt.qtr_ind,kylin_cal_dt.retail_week,kylin_cal_dt.retail_year,kylin_cal_dt.retail_start_date,kylin_cal_dt.retail_wk_end_date,kylin_cal_dt.week_ind,kylin_cal_dt.week_num_desc,kylin_cal_dt.week_beg_date,kylin_cal_dt.week_end_date,kylin_cal_dt.week_in_year_id,kylin_cal_dt.week_id,kylin_cal_dt.week_beg_end_desc_mdy,kylin_cal_dt.week_beg_end_desc_md,kylin_cal_dt.year_id,kylin_cal_dt.year_ind,kylin_cal_dt.cal_dt_mns_1year_dt,kylin_cal_dt.cal_dt_mns_2year_dt,kylin_cal_dt.cal_dt_mns_1qtr_dt,kylin_cal_dt.cal_dt_mns_2qtr_dt,kylin_cal_dt.cal_dt_mns_1month_dt,kylin_cal_dt.cal_dt_mns_2month_dt,kylin_cal_dt.cal_dt_mns_1week_dt,kylin_cal_dt.cal_dt_mns_2week_dt,kylin_cal_dt.curr_cal_dt_mns_1year_yn_id,kylin_cal_dt.curr_cal_dt_mns_2year_yn_id,kylin_cal_dt.curr_cal_dt_mns_1qtr_yn_id,kylin_cal_dt.curr_cal_dt_mns_2qtr_yn_id,kylin_cal_dt.curr_cal_dt_mns_1month_yn_id,kylin_cal_dt.curr_cal_dt_mns_2month_yn_id,kylin_cal_dt.curr_cal_dt_mns_1week_yn_ind,kylin_cal_dt.curr_cal_dt_mns_2week_yn_ind,kylin_cal_dt.rtl_month_of_rtl_year_id,kylin_cal_dt.rtl_qtr_of_rtl_year_id,kylin_cal_dt.rtl_week_of_rtl_year_id,kylin_cal_dt.season_of_year_id,kylin_cal_dt.ytm_yn_id,kylin_cal_dt.ytq_yn_id,kylin_cal_dt.ytw_yn_id,kylin_cal_dt.kylin_cal_dt_cre_date,kylin_cal_dt.kylin_cal_dt_cre_user,kylin_cal_dt.kylin_cal_dt_upd_date,kylin_cal_dt.kylin_cal_dt_upd_user
2012-08-16,2012-01-01,2012-07-01,2012-08-01,2012-08-11,0,-1,-3,-15,-103,0,-1,-4,-15,-15,41501,228,47,16,6,33,5928,2,8,1364,3,455,114,2012-12-31,2012-09-30,2012-08-31,2012-08-17,16-Aug-2012,Aug 16th 2012,Fri 08-16-13,1,0,0,0,2012-06-21,365,92,31,7,2012-12-30,2012-06-30,2012-07-28,2012-08-11,2012-08-12,2012-08-16,Fri       ,2012M08,Aug-2012,N,2012M08   ,N,Year 2012 - Quarter 03,2012Q03   ,N,33,2012,2012-08-11,2012-08-17,N,Wk.33 - 13,2012-08-11 00:00:00,2012-08-17 00:00:00,2012W33   ,2012W33   ,08/11/13 - 08/17/13,08/11 - 08/17,2012,N,2012-08-16,2011-08-16,2012-05-16,2012-02-16,2012-07-16,2012-06-16,2012-08-09,2012-08-02,0,0,0,0,0,0,0,0,8,3,33,3,1,1,1,2005-09-07,USER_X  ,2012-11-27 00:16:56,USER_X
2012-01-03,2012-01-01,2012-01-01,2012-01-01,2012-01-01,0,-3,-10,-47,-328,0,-3,-11,-47,-47,41276,3,3,3,5,1,5896,1,1,1357,1,453,114,2012-12-31,2012-03-31,2012-01-31,2012-01-05,03-Jan-2012,Jan 3rd 2012,Thu 01-03-13,1,0,0,0,2012-12-21,365,90,31,5,2012-12-30,2012-12-30,2012-12-30,2012-12-30,2012-12-31,2012-01-03,Thu       ,2012M01,Jan-2012,N,2012M01   ,N,Year 2012 - Quarter 01,2012Q01   ,N,1,2012,2012-12-30,2012-01-05,N,Wk.01 - 13,2012-01-01 00:00:00,2012-01-05 00:00:00,2012W01   ,2012W01   ,01/01/13 - 01/05/13,01/01 - 01/05,2012,N,2012-01-03,2011-01-03,2012-10-03,2012-07-03,2012-12-03,2012-11-03,2012-12-27,2012-12-20,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2005-09-07,USER_X  ,2012-11-27 00:16:56,USER_X
2012-04-10,2012-01-01,2012-04-01,2012-04-01,2012-04-07,0,-2,-7,-33,-231,0,-2,-8,-33,-33,41373,100,10,10,4,15,5910,1,4,1360,2,454,114,2012-12-31,2012-06-30,2012-04-30,2012-04-13,10-Apr-2012,Apr 10th 2012,Wed 04-10-13,1,0,0,0,2012-03-21,365,91,30,7,2012-12-30,2012-03-31,2012-03-31,2012-04-07,2012-04-08,2012-04-10,Wed       ,2012M04,Apr-2012,N,2012M04   ,N,Year 2012 - Quarter 02,2012Q02   ,N,15,2012,2012-04-07,2012-04-13,N,Wk.15 - 13,2012-04-07 00:00:00,2012-04-13 00:00:00,2012W15   ,2012W15   ,04/07/13 - 04/13/13,04/07 - 04/13,2012,N,2012-04-10,2011-04-10,2012-01-10,2012-10-10,2012-03-10,2012-02-10,2012-04-03,2012-03-27,0,0,0,0,0,0,0,0,4,2,15,2,1,1,1,2005-09-07,USER_X  ,2012-11-27 00:16:56,USER_X
2012-06-12,2012-01-01,2012-04-01,2012-06-01,2012-06-09,0,-2,-5,-24,-168,0,-2,-6,-24,-24,41436,163,73,12,4,24,5919,3,6,1362,2,454,114,2012-12-31,2012-06-30,2012-06-30,2012-06-15,12-Jun-2012,Jun 12th 2012,Wed 06-12-13,1,0,0,0,2012-03-21,365,91,30,7,2012-12-30,2012-03-31,2012-05-26,2012-06-09,2012-06-10,2012-06-12,Wed       ,2012M06,Jun-2012,N,2012M06   ,N,Year 2012 - Quarter 02,2012Q02   ,N,24,2012,2012-06-09,2012-06-15,N,Wk.24 - 13,2012-06-09 00:00:00,2012-06-15 00:00:00,2012W24   ,2012W24   ,06/09/13 - 06/15/13,06/09 - 06/15,2012,N,2012-06-12,2011-06-12,2012-03-12,2012-12-12,2012-05-12,2012-04-12,2012-06-05,2012-05-29,0,0,0,0,0,0,0,0,6,2,24,2,1,1,1,2005-09-07,USER_X  ,2012-11-27 00:16:56,USER_X
2012-04-27,2012-01-01,2012-04-01,2012-04-01,2012-04-21,0,-2,-7,-31,-214,0,-2,-8,-31,-31,41390,117,27,27,7,17,5912,1,4,1360,2,454,114,2012-12-31,2012-06-30,2012-04-30,2012-04-27,27-Apr-2012,Apr 27th 2012,Sat 04-27-13,1,0,0,0,2012-03-21,365,91,30,7,2012-12-30,2012-03-31,2012-03-31,2012-04-21,2012-04-22,2012-04-27,Sat       ,2012M04,Apr-2012,N,2012M04   ,N,Year 2012 - Quarter 02,2012Q02   ,N,17,2012,2012-04-21,2012-04-27,N,Wk.17 - 13,2012-04-21 00:00:00,2012-04-27 00:00:00,2012W17   ,2012W17   ,04/21/13 - 04/27/13,04/21 - 04/27,2012,N,2012-04-27,2011-04-27,2012-01-27,2012-10-27,2012-03-27,2012-02-27,2012-04-20,2012-04-13,0,0,0,0,0,0,0,0,4,2,17,2,1,1,1,2005-09-07,USER_X  ,2012-11-27 00:16:56,USER_X

sales內容:

kylin_sales.trans_id,kylin_sales.part_dt,kylin_sales.lstg_format_name,kylin_sales.leaf_categ_id,kylin_sales.lstg_site_id,kylin_sales.slr_segment_cd,kylin_sales.price,kylin_sales.item_count,kylin_sales.seller_id,kylin_sales.buyer_id,kylin_sales.ops_user_id,kylin_sales.ops_region
0,2012-12-14,Others,88750,0,11,36.2828,4,10000349,10002313,ANALYST,Beijing
1,2012-08-28,Others,175750,0,13,23.8563,20,10000927,10004376,ANALYST,Beijing
2,2012-02-16,ABIN,148324,15,13,88.3418,18,10000005,10006710,ADMIN,Shanghai
3,2013-10-19,FP-non GTC,37831,0,13,47.3015,3,10000209,10003717,ANALYST,Beijing
4,2012-10-22,Others,140746,100,11,83.454,16,10000154,10006076,ADMIN,Shanghai

導入成功後,表的結構信息會以樹狀的形式顯示在頁面的左側,可
以單擊展開或收縮.
在這裏插入圖片描述
同時,Kylin會在後臺觸發一個MapReduce任務,計算此表每個列的
基數。通常稍過幾分鐘之後再刷新頁面,就會看到顯示出來的基數信息.
在這裏插入圖片描述

創建數據模型

有了表信息之後,就可以開始創建數據模型(Data Model)了。數據模
型是Cube的基礎,它主要用於描述一個星形模型。有了數據模型以後,定
義Cube的時候就可以直接從此模型定義的表和列中進行選擇了,省去重
復指定連接(join)條件的步驟。基於一個數據模型還可以創建多個Cube,
以方便減少用戶的重複性工作。
在Kylin界面的“Models”頁面中,單擊“New”→“New Model”,開始創
建數據模型。

  1. (Model info) 給模型輸入名稱.
  2. (Data Model)選擇一個事實表(fact table)必需.
    在這裏插入圖片描述
    添加維度表(Add Lookup table)(可選),
    在這裏插入圖片描述
     添加維度表的時候,需要選擇連接的類型:是Inner還是Left,然後選
    擇連接的主鍵和外鍵,這裏也支持多主鍵.
  • left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄  inner join(等值連接)
  • 只返回兩個表中聯結字段相等的行
    點擊 New Join Condition 按鈕,左邊選擇事實表的外鍵,右邊選擇 lookup 表的主鍵。如果有多於一個 join 列重複執行。
  1. (Dimensions)選擇會用作維度的列.這裏只是選擇一個範圍,不代表這些列將來一定要用作Cube的維度. 你可以把所有可能會用到的列都選進來,後續創建Cube的時候,將只能從這些列中進行選擇。
    選擇維度列時,維度可以來自事實表或維度表,如圖所示。
    在這裏插入圖片描述
  2. (Measures)度量的列。這裏只是選擇一個範圍,不代表這些列將來一定要用作Cube的度量,你可以把所有可能會用到的列都選進來,後續創建Cube的時候,將只能從這些列中進行選擇。
    選擇度量列時,度量只能來自事實表,如圖所示。
    在這裏插入圖片描述
  3. 最後一步,是爲模型補充分割時間列信息和過濾條件。
    如果此模型中的事實表記錄是按時間增長的,那麼可以指定一個日期/時間列作爲
    模型的分割時間列,從而可以讓Cube按此列做增量構建,關於增量構建的具體內容後面學習。
    過濾(Filter)條件是指,如果想把一些記錄忽略掉,那麼這裏可以設置一個過濾條件。Kylin在向Hive請求源數據的時候,會帶上此過濾條件。
    語法與sql語法相似.
    在這裏插入圖片描述
    最後,單擊“Save”保存此數據模型,隨後它將出現在“Models”的列表
    中。

創建cube

接下來開始Cube的創建;單擊“New”,選擇“New Cube”,會開啓一個
包含若干步驟的嚮導。
在這裏插入圖片描述
1.(Cube Info)選擇要使用的數據模型,併爲此Cube輸入一個唯一的名稱
(必需的)和描述(可選的)(如圖2-9所示);這裏還可以輸入一個郵件通知
列表,用於在構建完成或出錯時收到通知。
在這裏插入圖片描述
2. (Dimensions)點擊 Add Dimension添加維度,在彈窗中顯示的事實表和 lookup 表裏勾選輸入需要的列。Lookup 表的列有2個選項:“Normal” 和 “Derived”(默認)。“Normal” 添加一個普通獨立的維度列,“Derived” 添加一個 derived 維度,derived 維度不會計算入 cube,將由事實表的外鍵推算出。
在這裏插入圖片描述在這裏插入圖片描述
3. (Measures)點擊 +Measure 按鈕添加一個新的度量。
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
4. (Refresh Setting)更新設置

這一步驟是爲增量構建 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. (Advanced Setting)高級設置
(這裏沒有太弄懂但直接跳過下一步也可以,那就下次再研究)
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. (Configuration Overwrites)重寫配置

Kylin 允許在 Cube 級別覆蓋部分 kylin.properties 中的配置,你可以在這裏定義覆蓋的屬性。如果你沒有要配置的,點擊 Next 按鈕。
7. (Overview)你可以概覽你的 cube 並返回之前的步驟進行修改。點擊 Save 按鈕完成 cube 創建。
在這裏插入圖片描述
創建好的Cube會顯示在“Cubes”列表中,如要對Cube的定義進行修
改,只需單擊“Edit”按鈕就可以進行修改。也可以展開此Cube行以查看更
多的信息,如JSON格式的元數據、訪問權限、通知列表等。
在這裏插入圖片描述
點擊 Actions > Build 選擇合適的時間,進行build cube

在這裏插入圖片描述
在這裏插入圖片描述
點擊Monitor即可看到job的執行情況.

在這裏插入圖片描述

當job執行成功,進入Insight ,在New Query中添加sql語句,如:

select *from KYLIN_SALES ;

在這裏插入圖片描述
運行結果:
在這裏插入圖片描述

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