1. 程式人生 > >使用Saiku+Kylin構建多維分析OLAP平臺

使用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

kylin

可惜,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檔案

  1. <?xml version="1.0"?>
  2. <Schemaname="ad_schema">
  3. <Cubename="lxw1234_ad_cube2">
  4. <!-- 事實表(fact table) -->
  5. <Tablename="AD_REPORT"/>
  6. <Dimension
    name="地域">
  7. <HierarchyhasAll="false">
  8. <Tablename="AD_REPORT"></Table>
  9. <Levelname="省份"column="PROVINCE"table="AD_REPORT"></Level>
  10. <Levelname="城市"column="CITY"table="AD_REPORT"/>
  11. </Hierarchy>
  12. </Dimension>
  13. <Measurename="曝光數"column="IMP_PV"aggregator="sum"datatype="Integer"/>
  14. <Measurename="唯一曝光數"column="COOKIEID_IMP"aggregator="distinct-count"datatype="Integer"/>
  15. <Measurename="點選數"column="CLK_PV"aggregator="sum"datatype="Integer"/>
  16. <Measurename="唯一點選數"column="COOKIEID_CLK"aggregator="distinct-count"datatype="Integer"/>
  17. </Cube>
  18. </Schema>

STEP2:新增Kylin資料來源

kylin

進入Saiku管理控制檯,點選”Add Schema”,將編寫好Schema檔案上傳。

接著點選”Add Data Source”,新增資料來源:

kylin

STEP3:建立查詢

回到Saiku Home主頁,點選”Create a new query”,建立查詢:

kylin

在多維資料下拉選單中,選擇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,這兩個問題還有待研究解決。