http://lxw1234.com/archives/2016/06/691.htm
Apache Kylin,很好的解决了海量数据OLAP的底层存储与分析引擎,但还缺一个数据可视化工具,可以使用户非常方便的通过图形化分析探索海量数据,而不用写SQL。于是我们发现了Caravel。
原生的Caravel并不支持Kylin,也不支持多表关联,经过好友Rocky和我的修改和调试,使得Caravel支持Kylin,同时也实现了Kylin中多表关联分析。
GitHub地址(基于caravel 0.8.9):
https://github.com/rocky1001/pykylin/tree/caravel-kylin
https://github.com/rocky1001/caravel/tree/caravel-kylin
本文详细介绍了如何使用这款工具来可视化分析探索Apache Kylin。
Content:
关于Caravel
关于PyKylin
下载并安装Caravel-Kylin
下载并安装PyKylin
启动Caravel
创建Kylin数据源
添加Kylin表
配置表的维度和指标
数据探索分析与可视化展示
定制自己的DashBoard
配置多表关联
其他
Caravel(曾用名Panoramix),是由知名在线房屋短租公司Airbnb开源的一款数据探索与可视化工具,该工具在可视化、易用性和交互性上非常有特色,用户可以轻松对数据进行可视化分析。官网地址为: http://airbnb.io/caravel/
Caravel底层使用Python开发,与SQLAlchemy深度整合,目前原生支持的数据源有:
MySQL、Postgres、Presto、Oracle、sqlite、Redshift、MSSQL以及Druid。对于前面的关系型数据库,Caravel通过将界面的操作转换成SQL语句,提交给SQLAlchemy适配数据源查询并返回结果,对于Druid,Caravel将界面的操作转换成Druid的API进行查询并返回结果,与Druid的深度集成,可以实现大规模海量数据的OLAP分析和实时探索。
另外,为了提高并发查询下的性能,还支持数据缓存,可配置将数据缓存至Redis、Memcache或者本地文件系统。
Caravel支持十几种可视化图表,用于将查询返回的数据做可视化展示:
PyKylin是由@Wu Xiang开源的Kylin DBAPI Driver 和SQLAlchemy Dialect
(https://github.com/wxiang7/pykylin),Caravel使用SQLAlchemy适配数据源并提交查询,因此,需要使用PyKylin,将Kylin作为一个数据库引擎注册进SQLAlchemy,然后由Caravel自动适配并执行。
Python 2.7.*. (建议使用Python3,避免中文乱码问题)。
关于Python的其他依赖,请参考:http://airbnb.io/caravel/installation.html (OS dependencies)
使用root用户或者sudo权限。
使用命令
wget –no-check-certificate https://github.com/rocky1001/caravel/archive/caravel-kylin.zip
下载zip包,并解压。
(建议使用 git clone https://github.com/rocky1001/caravel.git 来下载源码,之前发现wget获取的zip包不完整)
进入解压后根目录,执行下面的命令安装:
PS:在国内建议使用https://pypi.tuna.tsinghua.edu.cn/simple/ 作为源来安装。
安装完后,执行下面的命令初始化Caravel:
另外,Caravel默认使用sqlite作为元数据库,配置在caravel_config.py 中,你可以修改使用其他如MySQL作为元数据。
如果你需要使用其他数据库作为Caravel的数据源,则还需要安装相应的Python包,如MySQL:
使用root用户或者sudo权限。
使用命令
wget –no-check-certificate https://github.com/rocky1001/pykylin/archive/caravel-kylin.zip
下载zip包,并解压。
(建议使用 git clone https://github.com/rocky1001/pykylin.git 来下载源码,之前发现wget获取的zip包不完整)
进入解压后根目录,执行下面的命令安装即可:
Caravel和PyKylin成功安装后,执行下面的命令启动Caravel:
注意:这里和Caravel给出的启动命令有所不同,这样的启动方式可以避免因查询页面关闭而造成的Server异常退出等问题,建议采用这种启动方式,并将日志重定向到文件中。
启动之后,可以在浏览器打开http://localhost:8088 ,使用admin/admin登陆Caravel。
这里需要注意Sqlalchemy Uri的写法:
kylin://ADMIN:[email protected]:7070/kylin/api?project=lxw1234
Kylin中的project名称,需要以URL参数的方式传递。
点击”TEST CONNECTION”,提示测试连接成功,并且在最下方,列出了project中所有的表。
其中,Database选择之前创建好的数据源,Table Name必须是数据源中对应真实的表名,表中必须包含一个Date或者Timestamp类型的字段。
另外,如果该表在Kylin中的Schema为DEFAULT,这里的Schema配置留空即可。
在Table List页面,点击表的Edit record按钮,进入属性编辑页面:
在List Table Column页面中,可以定义那些字段可以GroupBy,那些可以过滤,那些可以Count Distinct,那些可以Sum、Min、Max,那些字段属于时间序列字段(Is Dttm)。
在List Sql Metric页面,可以编辑和定义指标,如果上面对一些字段勾选了Sum、Min、Max、Count Distinct选项,则这里会自动生成相应的指标字段。
Table定义好维度字段和指标之后,即可针对该表进行数据探索分析与可视化展示,在List Table页面,点击一个表名,即可进入:
如下图,在分析页面中,可以针对某一个表事先定义的时间字段、维度及指标字段进行数据探索分析,并可以选择相应的图表进行可视化展示。
可以将一个定制好的数据探索保存成Slice,后面直接从Slices页面查看:
在添加DashBoard页面,可以将之前保存好的多个Slice组合成一个DashBoard:
其中,每个Slice对应的模块,可以自由拖拽位置和大小,并保存整个Dashboard的布局。
为了支持Kylin中多表查询,一般是一个事实表关联多张维度表,并获取衍生维度,我们通过在Caravel Table中添加自定义字段,并对该字段定义一定规则的表达式(字段串常量),提交到PyKylin之后,PyKylin解析该字符串常量,转换成与维度表关联的SQL查询并返回结果。
这里做法有些粗糙,但功能基本实现,你可以参考该思路做进一步的优化和修改。
这里以事实表AD_REPORT2为例,其中有维度ID字段AD_ID,在Kylin中构建Cube时候,通过INNER JOIN维度表AD_DIM来获取维度名称AD_NAME。
在Caravel的AD_REPORT2中添加字段ad_name,
该字段表达式为字符串常量:
字符串以$开头和结尾,以|分隔。
其中:INNER JOIN (select ad_id as __ad_id,ad_name as __ad_name from LIUXIAOWEN.AD_DIM) as b ON (ad_id = __ad_id) 定义了维度表、JOIN类型、ON条件,该字符串会直接添加到原始SQL中,作为JOIN子句;在维度表中的字段前面加上__为了和事实表中的字段区分而不用考虑表的别名。
b.__ad_name 定义了使用该字段作为最终的字段取值。
当选择ad_name作为维度查询时,Caravel提交给PyKylin的SQL语句为:
PyKylin经过转换后提交给Kylin的SQL语句为:
该配置方法对于关联一张维度表获取多个字段,以及关联多张维度表获取多个维度字段同样适用,只需要在Caravel Table中添加多个字段,表达式的写法一样即可。
此版本只是在Caravel基础之上增加了对Apache Kylin的支持,Caravel的其他功能和支持的数据源不受任何影响。
Caravel UI上的错误提示非常不友好,很多时候需要根据Caravel日志来确定问题;
选择的时间段内没有数据、维度和指标的选择,都有可能造成图表不能正常显示;