微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

使用Saiku+Kylin构建多维分析OLAP平台

Kylin lxw1234@qq.com 39063℃ 12评论

关于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文件

<?xml version="1.0"?>
<Schema name="ad_schema">  
<Cube name="lxw1234_ad_cube2">  
    <!-- 事实表(fact table) -->  
    <Table name="AD_REPORT" />  
    <Dimension name="地域">  
        <Hierarchy hasAll="false">  
            <Table name="AD_REPORT"></Table>  
            <Level name="省份" column="PROVINCE" table="AD_REPORT"></Level>
            <Level name="城市" column="CITY" table="AD_REPORT"/>
        </Hierarchy> 
    </Dimension>  
  
    <Measure name="曝光数" column="IMP_PV" aggregator="sum" datatype="Integer" />
    <Measure name="唯一曝光数" column="COOKIEID_IMP" aggregator="distinct-count" datatype="Integer" />
    <Measure name="点击数" column="CLK_PV" aggregator="sum" datatype="Integer" />
    <Measure name="唯一点击数" column="COOKIEID_CLK" aggregator="distinct-count" datatype="Integer" />
</Cube>  
</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,这两个问题还有待研究解决。

 

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » 使用Saiku+Kylin构建多维分析OLAP平台

喜欢 (22)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(12)个小伙伴在吐槽
  1. Mondrian在维度有条件查询时,会有UPPER 关键词,KYLIN 也不支持。
    moodmass2016-07-26 16:28 回复
    • 不用Saiku了,用Caravel,强太多了。
      lxw1234@qq.com2016-07-27 07:33 回复
      • caravel在操作上有哪些优势吗
        wj02282016-07-28 15:11 回复
      • 你前端用Caravel,后端现在用啥了?
        moodmass2016-07-29 13:53 回复
      • caravel 支持多表关联吗,后端打算用kylin
        wang02282016-08-14 20:05 回复
    • 这个问题解决了吗
      trip2017-10-12 11:20 回复
  2. 您好,请问新建查询时,您添加的cube(lxw1234_ad_cube2)是怎么来的呢?
    大星星2016-09-04 10:27 回复
  3. 对于saiku,distinct count 在 https://issues.apache.org/jira/browse/KYLIN-2029 这个jira之后可以支持了。 之前是lookup 表不支持select count(distinct )语法,这个jira fix掉了,对应的Mondrian要改下,KylinDialect.allowsCountDistinct 返回true即可
    Jason2016-09-22 11:29 回复
    • 你好,我遇到的问题跟博主一样,是事实表不支持count distinct,请问可以加你联系方式求教一下么
      石头2018-03-09 17:32 回复
  4. 请问Saiku的schema文件要怎么生成?如何生成kylin自带sample的kylin_sales_cube对应的Saiku schema文件?
    Casel Chen2017-09-22 18:00 回复
  5. 你好,我们公司最近也在使用saiku+kylin,在安装kylin的过程是按照博主,但是最后add datasource的时候报错,方便跟博主交流一下吗?
    小石头2018-01-24 17:25 回复
    • 同问啊
      2018-08-22 11:38 回复