若是業務頻繁迭代,初期能夠考慮用mysql來支撐,等業務比較穩定之後,經過kylin來優化查詢速度。mysql
度量(指標):度量是具體考察的聚合數量值,例如:銷售數量、銷售金額、人均購買量。計算機一點描述就是在SQL中就是聚合函數。sql
–COUNT:統計行數量 –SUM:獲取單個列的合計值 –AVG:計算某個列的平均值 –MAX:計算列的最大值 –MIN:計算列的最小值 group by 關鍵字表示要進行分類聚合的字段,好比要按照班級分類進行學生人數統計,班級就應該放在group by 的後面。
Aggregation Groups函數
維度聚合組:給維度分組,屬於不一樣組的維度不會組合(各組內部才能隨意組合,組和組之間不組合)。學習
主要做用:減小維度組合。優化
include:組裏的全部維度字段。ui
A、 聯合維度Joint Dimensions:簡單說:全部查詢維度的集合>=聯合維度。聯合維度視爲一個維度。適用於:多個維度都是查詢條件,如group by outid,day,則outid、day做爲聯合維度。考慮查詢條件中的非動態拼接的sql,若是有where、group by有多個維度,能夠考慮設爲聯合維度。code
有效剪枝。跨聯合的查詢會把多個聯合維度查詢出來,再合併。(根據查詢業務分組,就能有效剪枝,而且沒有關聯多個的查詢,從而效率高)。orm
B、 必要維度Mandatory Dimensions:簡單說:全部查詢維度的集合>必要維度。join條件、查詢必須帶上的條件,做爲必要維度。(多個必要維度時,生成的維度組合多是不包括必要維度組合自己的。在查詢中出現了按照必要維度查詢不了的狀況【這裏多是kylin的一個bug,必要維度組合自己不產生維度,可是sql解析的時候認爲產生了因此會匹配成功,而後報錯,而且擋住了其餘可能支持這個查詢的cube的匹配】)多個必要維度能夠用聯合維度代替。若是維度組(聚合組)的維度包含必要維度全部列,則查詢必要維度就能夠進行,由於能夠經過必要維度和其餘維度組合後的結果來彙總必要維度的查詢結果。ip
C、 派生維度derived:把維度表的多個維度字段,不用看成維度構建;而是經過維度表的主鍵來查詢,而後再經過維度表去找到維度。當維度表主鍵和維度字段不是一對一的時候,還須要二次聚合。這個能剪枝,可是影響查詢效率。string
派生維度是針對維度表的,若是某張維度表有多個維度,若是該維度表一個或者多個列和維度表的主鍵是一一對應的,則能夠將這些維度設置爲派生維度。這樣在Kylin內部會將其統一用維度表的主鍵來替換,以下降維度組合的數目。但查詢效率會下降,由於Kylin在使用維度表主鍵進行聚合後,查詢時須要再將主鍵轉換爲真正的維度列返回給用戶。
D、 層級維度Hierarchy Dimensions:指一系列具備層級關係的維度組成一個層級維度,設置了層級以後,對Cuboid增長了約束,低Level的維度必定要伴隨高Level的維度出現,從而使維度組合大大減小。。好比校區、院系、專業、班級
高基數維度,在groups中出現次數較多的維度。
sql | kylin |
---|---|
select 語句中的函數中的字段 | 度量 |
非select語句中的字段和select語句中的直接使用的字段,如where、group by、 | 維度 |
舉例:
select classname, sum(consume) from consummer where gradelevel = '' group by classcode; 維度: classname、gradelevel、classcode, 其中classname在某些狀況下能夠設爲派生維度。 度量:consume
hive建表與導入數據-->新建model-->根據model新建cube
----edu_grade_filter_r------ DROP TABLE IF EXISTS edu_grade_filter_r; create external table edu_grade_filter_r (id BIGINT, outid string,name string,semester string, course_no string, course_name string, score string, course_natures string, course_properties string, class_hour string,credit string, exam_natures string, school_code string, grade_level string, faculty_code string, major_code string, class_code string, point string, course_properties_new string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE location '/jkd/edu_grade_filter_r'; -- load data 適合分區表的狀況 -- load data inpath '/jkd/edu_grade/edu_grade_filter_r.txt.txt' into table edu_grade_filter_r;
若是構建成功,則job不能再從新跑,須要在cube處disabled,而後再build;若是有修改,則先purge(清除),再從新build。
Drop:丟棄現有cube,條件:無Pending, Running, Error 狀態的job.
Edit:編輯現有cube,條件:cube需處於disable狀態。
Refresh:重建某已有時間段數據,針對於已build時間段的源數據發生了改變的狀況。
Merge:手動觸發merge操做。
Enable:使擁有至少一個有效segment的cube從disable變爲enable狀態。
Purge:清空全部該cube的數據。
Clone:克隆一個新的cube,可設置新的名字,其餘相關配置與原cube相同。
Disable:使一個處於ready狀態的cube變爲Disable狀態,查詢不會從disable的cube中獲取數據。
tips:本文屬於本身學習和實踐過程的記錄,不少圖和文字都粘貼自網上文章,沒有註明引用請包涵!若有任何問題請留言或郵件通知,我會及時回覆。