kylin 官方案例learn_kylin手動創建測試

在上一篇文章中介紹了kylin相關的基本知識,這篇文章的主要目的是針對kylin初學者,進行一次詳細的kylin案例介紹,這裏,我們還是以官方給定的數據爲例。說明,我用的是kylin2.1.0. 與kylin1.x 可能有不一樣的地方。

核心概念

  1. 事實表和維度表

    • 事實表(Fact Table)是指存儲有事實記錄的表,如系統日誌、銷售記錄等;事實表的記錄在不斷地動態增長,所以它的體積通常遠大於其他表。
    • 維度表(Dimension Table)或維表,有時也稱查找表(Lookup Table),是與事實表相對應的一種表;它保存了維度的屬性值,可以跟事實表做關聯;相當於將事實表上經常重複出現的屬性抽取、規範出來用一張表進行管理。常見的維度表有:日期表(存儲與日期對應的周、月、季度等的屬性)、地點表(包含國家、省/州、城市等屬性)等
  2. Cube、Cuboid和Cube Segment

    • Cuboid在Kylin中特指在某一種維度組合下所計算的數據。
    • Cube(或Data Cube),即數據立方體,是一種常用於數據分析與索引的技術;它可以對原始數據建立多維度索引。簡單來說,一個Cube就是許多按維度聚合的物化視圖的集合。
    • Cube Segment是指針對源數據中的某一個片段,計算出來的Cube數據。通常數據倉庫中的數據數量會隨着時間的增長而增長,而CubeSegment也是按時間順序來構建的。注意的是,在增量構建中,相鄰兩個segment的時間是連續的。
  3. 星型模型

    • 數據挖掘有幾種常見的多維數據模型,如星形模型(Star Schema)、雪花模型(Snowflake Schema)、事實星座模型(Fact Constellation)等。
    • 星形模型中有一張事實表,以及零個或多個維度表;事實表與維度表通過主鍵外鍵相關聯,維度表之間沒有關聯,就像很多星星圍繞在一個恆星周圍,故取名爲星形模型。
      特別注意:Kylin只支持星形模型的數據集
  4. 維度表的設計原則
    除了數據模型只支持星型模型外,kylin對維度表還有一定的要求。

    • 要具有數據一致性,主鍵值必須是唯一的;Kylin會進行檢查,如果有兩行的主鍵值相同則會報錯。
    • 維度表越小越好,因爲Kylin會將維度表加載到內存中供查詢;過大的表不適合作爲維度表,默認的閾值是300MB。
    • 改變頻率低,Kylin會在每次構建中試圖重用維度表的快照,如果維度表經常改變的話,重用就會失效,這就會導致要經常對維度表創建快照。
    • 維度表最好不要是Hive視圖(View),雖然在Kylin1.5.3中加入了對維度表是視圖這種情況的支持,但每次都需要將視圖進行物化,從而導致額外的時間開銷。

hive表中數據

運行$KYLIN_HOME/bin/sample.sh 就會在hive自動創建五張表。當然你可以用vim打開sample.sh看看這個腳本文件到底是怎麼樣執行的。

我們看到,它調用了sample_cube下的create_sample_tables.sql創建表以及加載數據,所有與官方例子有關的數據都在samp_cube文件夾下

導入後,可以在hive查看具體信息。紅線框住的部分,這5張表構成一個星型模型,kylin_sales是事實表,其他的作爲維度表。

導入表

打開kylin主界面,新建一個項目test_kylin

選擇項目test_kylin, 點擊Data Source標籤,第一個圖標load hive table 需手動輸入hive表名(帶數據庫名),中間圖標load hive table from tree可直接選擇表,最後一個圖標爲流式數據,暫時不管。

選擇對應的5張表。

導入成功後,可以看到以下表信息

創建數據模型

不廢話,直接新型操作

輸入模型名稱,注意模型名在整個kylin應用下具有唯一性,而不是隻在單個項目下的唯一性。

直接下一步,選擇維度表和事實表。事實表是唯一的,這裏我們選擇kylin_sales. 單擊 Add Lookup Table,選擇維度表。

依次添加4個維度表。添加維度表的時候,需要選擇連接的類型:是Inner還是Left,然後選擇連接的主鍵和外鍵,這裏也支持多主鍵。

所有維度表添加完成後如下:

接下來選擇維度和度量列,度量只能在事實表中選擇,維度表在事實表和維度表中選擇,一個列只能是維度或度量中的一個。這裏只是選擇一個範圍,不代表這些列將來一定要用作Cube的維度或度量,你可以把所有可能會用到的列都選進來,後續創建Cube的時候,將只能從這些列中進行選擇。

最後一步,是爲模型補充分割時間列信息和過濾條件。如果此模型中的事實表記錄是按時間增長的,那麼可以指定一個日期/時間列作爲模型的分割時間列,從而可以讓Cube按此列做增量構建,如果是想做全局構建,這一步就不用填,我們選擇增量構建。

過濾(Filter)條件是指,如果想把一些記錄忽略掉,那麼這裏可以設置一個過濾條件。Kylin在向Hive請求源數據的時候,會帶上此過濾條件。比如要過濾掉價格小於0的列,只需要在filter中帶上條件 price > 0.

最後,單擊save,即可完成對數據模型的創建。

創建cube

model創建好以後,我們就可以根據它創建cube了。單擊new,選擇new cube。選擇model,輸入cube name,同理,cube name也是全局唯一的。這裏還可以輸入一個郵件通知列表,用於在構建完成或出錯時收到通知。如果不想接收處於某些狀態的通知,那麼可以從“Notification Events”中將其去掉。

接下來,添加維度。這裏和kylin1.5版本有一點不一樣,在kylin2.1中,直接單擊 Add Dimensions ,根據各個表,選擇維度以及設置維度表中維度爲normal 或者derived(衍生維度)。

添加完成後如下

如果是衍生維度的話,則必須是來自於某個維度表,由於這些列值都可以從該維度表的主鍵值中衍生出來,所以實際上只有主鍵列會被Cube加入計算。而在Kylin的具體實現中,往往採用事實表上的外鍵替代主鍵進行計算和存儲。但是在邏輯上可以認爲衍生列來自於維度表的主鍵。

接下來,添加度量。_COUNT_ 是默認的聚合函數。可以單擊“+Measure”按鈕來添加新的度量。Kylin支持的度量有:SUM、MIN、MAX、COUNT、COUNT DISTINCT、TOP_N、RAW等。請選擇需要的度量
類型,然後再選擇適當的參數(通常爲列名)

如果param Type選擇column的話,下拉列表裏面只能是度量信息。Return Type也是根據hive表中字段的類型在自動生成的,當然,這裏也有一些kylin自己封裝的類型,比如hllc(10)等。
需要注意的是,在kylin2.1版本中已經支持normal維度的聚合。


所有度量聚合添加完成後:

是關於Cube數據刷新的設置。在這裏可以設置自動合併的閾值、數據保留的最短時間,以及第一個Segment的起點時間(如果Cube有分割時間列的話)

  • “Partition Start Date”是指Cube默認的第一個Segment的起始時間。同一個Model下不同的Cube可以指定不同的起始時間
  • “Auto Merge Thresholds”用於指定Segment自動合併的閾值
  • “Retention Threshold”則用於指定將過期的Segment自動拋棄

接下來是進行高級設置,維度的優化基本上通過這個這設置,在此頁面上可以設置聚合組和Rowkey。

Kylin默認會把所有維度都放在同一個聚合組中;如果維度數較多(例如>10),那麼建議用戶根據查詢的習慣和模式,單擊“New AggregationGroup+”,將維度分爲多個聚合組。通過使用多個聚合組,可以大大降低Cube中的Cuboid數量。下面來舉例說明,如果一個Cube有(M+N)個維度,那麼默認它會有2m+n 個Cuboid;如果把這些維度分爲兩個不相交的聚合組,那麼Cuboid的數量將被減少爲2m +2n 。

在單個聚合組中,可以對維度設置高級屬性,如Mandatory、Hierarchy、Joint等

  • Mandatory維度指的是那些總是會出現在Where條件或Group By語句裏的維度;通過將某個維度指定爲Mandatory,Kylin就可以不用預計算那些不包含此維度的Cuboid,從而減少計算量。
  • Hierarchy是一組有層級關係的維度,例如“國家”“省”“市”,這裏的“國家”是高級別的維度,“省”“市”依次是低級別的維度。用戶會按高級別維度進行查詢,也會按低級別維度進行查詢,但在查詢低級別維度時,往往都會帶上高級別維度的條件,而不會孤立地審視低級別維度的數據。例如,用戶會單擊“國家”作爲維度來查詢彙總數據,也可能單擊“國家”+“省”,或者“國家”+“省”+“市”來查詢,但是不會跨越國家直接Group By“省”或“市”。通過指定Hierarchy,Kylin可以省略不滿足此模式的Cuboid。
  • Joint是將多個維度組合成一個維度

Kylin以Key-Value的方式將Cube存儲到HBase中。HBase的key,也就是Rowkey,是由各維度的值拼接而成的;爲了更高效地存儲這些值,Kylin會對它們進行編碼和壓縮;每個維度均可以選擇合適的編(Encoding)方式,默認採用的是字典(Dictionary)編碼技術;除了字典以外,還有整數(Int)和固定長度(Fixed Length)的編碼。

在kylin1.5(記得清楚了,好像是1.5)之後,引入了spark引擎,所以現在可以選擇mapreduce和spark構建引擎,Advance ColumnFamily裏面對應hbase裏面的信息,CF 相當於hbase的列簇,而measure就是其中的列。

下一步,爲Cube配置參數。和其他Hadoop工具一樣,Kylin使用了很多配置參數以提高靈活性,用戶可以根據具體的環境、場景等配置不同的參數進行調優。Kylin全局的參數值可在conf/kylin.properties文件中進行配置;如果Cube需要覆蓋全局設置的話,則需要在此頁面中指定。單擊“+Property”按鈕,然後輸入參數名和參數值。我們這裏直接保持默認就好。

直接寫一步,完成。

構建cube

cube的模型建立好以後,我們還需要對其進行構建。

設置segment的結束日期

提交成功。等待cube的完成。

搞定,下面就可以進行sql查詢操作了。

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