1.數據準備
hive建表語句和一些測試數據:
部門表:
create external table if not exists default.dept(
deptno int,
dname string,
loc int
) row format delimited fields terminated by '\t';
10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700
員工表:
create external table if not exists default.emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int) row format delimited fields terminated by '\t';
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 10
2.創建工程
1.登陸系統
2.創建工程
填入工程名
3.導入數據
最開始我們在hive中創建了兩張表並導入了數據,這裏直接從hive拉取數據過來。
選擇數據源Data Source
選擇第二項,從列表中導入。
選擇我們在hive中建立的兩張表,這裏並沒有將數據導入,只是導入了表的元數據。
導入成功後,頁面上就顯示了我們剛導入的兩張表。
4.創建model
這裏說明下,kylin目前只支持的數倉模型是星型模型,雪花模型還不支持。
給model取名
選擇事實表。其實員工表,部門表都是維度表,我這裏只有兩張表就以員工表作爲事實表。
添加維度表
先選擇事實表要關聯的維度表,然後選擇兩張表關聯的字段
選擇維度信息,維度信息也就是你最終OLAP分析是以哪些方面來計算的。
選擇度量信息,度量信息也就是你從各個維度分析,最終有個指標來衡量你的分析。
partition和where這裏不填寫,點擊next。
這裏說明下partition和where到底是幹什麼用的。
hive的表內容更新可能有增量更新和全量更新。如果是增量更新,一般都是按照日期來更新,所以partition就要選擇日期字段,這樣hive按照每日增量更新數據後,Kylin根據每日增量構建數據再彙總,計算一份新的數據保存起來。此外,還可以聯合構建cube的設置,選擇多長時間匯聚一次。cube設置位置如下圖所示位置:
where是起過濾作用,從hive導入過來計算的數據可能不需要全量的數據,所以在這裏加上過濾條件,過濾掉不需要的數據。
model創建完成
5.創建cube
選取cube,並填寫cube name,有需要可以填寫郵件,cube在構建後各種狀態時會給你發送郵件。
現在新增維度,剛纔model設置了維度,這裏構建cube的時候可以重新設定維度。
這裏選擇如下幾項維度進行構建,並且選擇normal(第五章cube優化會詳細講解normal,derived)。
現在設立度量到底計算什麼指標。
這裏給你自己的度量取個名字。然後選擇expression,也就是怎麼計算你的度量,我這裏選的是對工資求和,用的sum。param type有colume和constant,一般求count的時候纔是constant。最後選擇要計算的列,這裏選擇的是薪水sal。最後選擇OK保存。
保存之後,後面的步驟4,5,6,7都直接點擊next就行。第五章講cube優化的時候會講述這些到底是做什麼的。
6.查看cube。
保存之後你可以查看我們構建cube的sql語句是什麼,也可以查看我們到底構建了多少種維度。
7.構建cube。
現在我們可以開始讓kylin來構建我們的cube。
我們可以查看cube構建的過程以及每個步驟的日誌。
cube在執行過程中,如果報以下異常,說明你的hadoop歷史服務沒有打開,命令$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver啓動歷史服務。然後jps查看服務是否啓動。然後resume從失敗的地方重新開始執行cube。
org.apache.kylin.engine.mr.exception.MapReduceException: Exception: java.net.ConnectException: Call From hadoop102/192.168.1.102 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
java.net.ConnectException: Call From hadoop102/192.168.1.102 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at org.apache.kylin.engine.mr.common.MapReduceExecutable.doWork(MapReduceExecutable.java:173)
at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:164)
at org.apache.kylin.job.execution.DefaultChainedExecutable.doWork(DefaultChainedExecutable.java:70)
at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:164)
at org.apache.kylin.job.impl.threadpool.DefaultScheduler$JobRunner.run(DefaultScheduler.java:113)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
8.查詢數據。
cube構建完成後,我們可以運行sql來查詢結果,結果可以以圖表的形式展示,也可導出最終結果。