使用Saiku+Kylin構建多維分析OLAP平臺
http://lxw1234.com/archives/2016/05/647.htm
關於Kylin的介紹和使用請參考之前的文章
《分散式大資料多維分析(OLAP)引擎Apache Kylin安裝配置及使用示例》
Kylin對外提供的是SQL查詢介面,基於Kylin構建OLAP多維分析系統,第一種方案是針對業務,定製開發一個前端介面,將介面上使用者的選擇和操作,翻譯成SQL,提交給Kylin查詢。另一種方案則是將Kylin與BI工具整合起來,藉助BI工具,對Kylin中的Cube進行查詢分析。Kylin本身對於BI工具Tableau可以非常好的整合使用,我自己下載了Tableau的試用版,效果確實不錯,官方文件中也給出了詳細的教程:
http://kylin.apache.org/cn/docs15/tutorial/tableau_91.html
可惜,Tableau是商業軟體,收費的。
本文介紹另一個開源免費的BI工具–Saiku。
Saiku是一個輕量級的OLAP分析引擎,使用者可以在非常友好的介面下利用OLAP和記憶體引擎進行向下鑽取,過濾、分類、排序和生成圖表。Saiku利用Mondrian完成了介面?MDX?SQL
的轉換,最終將SQL通過JDBC提交給Kylin執行。
Github上已經有大神提供了編譯好的相關jar包下載:
https://github.com/mustangore/kylin-mondrian-interaction
按照裡面的說明,很簡單就完成了Saiku+Kylin的整合部署。
Saiku中配置Kylin資料來源
在瀏覽器輸入Saiku的WEB地址:http://172.16.212.17:8080/
使用者名稱密碼為:admin/admin
STEP1:編寫Mondrian Schema檔案
- <?xml version="1.0"?>
- <Schemaname="ad_schema">
- <Cubename="lxw1234_ad_cube2">
- <!-- 事實表(fact table) -->
- <Tablename="AD_REPORT"/>
- <Dimension
- <HierarchyhasAll="false">
- <Tablename="AD_REPORT"></Table>
- <Levelname="省份"column="PROVINCE"table="AD_REPORT"></Level>
- <Levelname="城市"column="CITY"table="AD_REPORT"/>
- </Hierarchy>
- </Dimension>
- <Measurename="曝光數"column="IMP_PV"aggregator="sum"datatype="Integer"/>
- <Measurename="唯一曝光數"column="COOKIEID_IMP"aggregator="distinct-count"datatype="Integer"/>
- <Measurename="點選數"column="CLK_PV"aggregator="sum"datatype="Integer"/>
- <Measurename="唯一點選數"column="COOKIEID_CLK"aggregator="distinct-count"datatype="Integer"/>
- </Cube>
- </Schema>
STEP2:新增Kylin資料來源
進入Saiku管理控制檯,點選”Add Schema”,將編寫好Schema檔案上傳。
接著點選”Add Data Source”,新增資料來源:
STEP3:建立查詢
回到Saiku Home主頁,點選”Create a new query”,建立查詢:
在多維資料下拉選單中,選擇Schema檔案中定義好的Cube,自動獲取指標和維度,雙擊指標和維度,在右邊的區域即可自動進行查詢展示。
Saiku中同樣支援上鑽、下鑽、過濾、排序等操作。
存在的問題
在試用期間,發現兩個嚴重的問題,導致Saiku和Kylin的整合甚至不能繼續:
1. 事實表和維度表的join方式:
Mondrian中統一使用內關聯(Inner Join)的方式將事實表和維度表關聯,而Kylin中,我的Cube是將事實表和維度表進行左關聯(Left Join)生成的,因此不支援Inner Join的查詢。除非像我例子中的,把左右的維度名稱都放置到事實表中,不和維度表關聯,這樣就沒有問題。
2. Count Distinct的問題:
Mondrian對於Count Distinct的指標會翻譯成SELECT COUNT(*) FROM (SELECT DISTINCT …)的形式,這種查詢SQL提交給Kylin,並不支援,因此對於Count Distinct型別的指標無法查詢分析。
看來要想很好的使用Saiku+Kylin,這兩個問題還有待研究解決。