分享

开源数据可视化工具(For Apache Kylin)使用说明

 openlog 2017-06-21

 http:///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

Caravel(曾用名Panoramix),是由知名在线房屋短租公司Airbnb开源的一款数据探索与可视化工具,该工具在可视化、易用性和交互性上非常有特色,用户可以轻松对数据进行可视化分析。官网地址为: http:///caravel/
Caravel底层使用Python开发,与SQLAlchemy深度整合,目前原生支持的数据源有:
MySQL、Postgres、Presto、Oracle、sqlite、Redshift、MSSQL以及Druid。对于前面的关系型数据库,Caravel通过将界面的操作转换成SQL语句,提交给SQLAlchemy适配数据源查询并返回结果,对于Druid,Caravel将界面的操作转换成Druid的API进行查询并返回结果,与Druid的深度集成,可以实现大规模海量数据的OLAP分析和实时探索。
另外,为了提高并发查询下的性能,还支持数据缓存,可配置将数据缓存至Redis、Memcache或者本地文件系统。
Caravel支持十几种可视化图表,用于将查询返回的数据做可视化展示:

caravel-kylin

关于PyKylin

PyKylin是由@Wu Xiang开源的Kylin DBAPI Driver 和SQLAlchemy Dialect
(https://github.com/wxiang7/pykylin),Caravel使用SQLAlchemy适配数据源并提交查询,因此,需要使用PyKylin,将Kylin作为一个数据库引擎注册进SQLAlchemy,然后由Caravel自动适配并执行。

下载并安装Caravel-Kylin

python 2.7.*. (建议使用Python3,避免中文乱码问题)。
关于Python的其他依赖,请参考:http:///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包不完整

进入解压后根目录,执行下面的命令安装:

  1. pip install .

PS:在国内建议使用https://pypi.tuna./simple/ 作为源来安装。

  1. pip install . -i https://pypi.tuna./simple/

安装完后,执行下面的命令初始化Caravel:

  1. ## 创建admin用户
  2. fabmanager create-admin --app caravel
  3.  
  4. ## 初始化Caravel元数据
  5. caravel db upgrade
  6.  
  7. ## 初始化Caravel默认的用户角色和权限
  8. caravel init
  9.  
  10. ## 加载示例数据(可选)
  11. caravel load_examples
  12.  

另外,Caravel默认使用sqlite作为元数据库,配置在caravel_config.py 中,你可以修改使用其他如mysql作为元数据。
如果你需要使用其他数据库作为Caravel的数据源,则还需要安装相应的Python包,如MySQL:

  1. pip install mysqlclient

下载并安装PyKylin

使用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包不完整)

进入解压后根目录,执行下面的命令安装即可:

  1. pip install .

启动Caravel-Kylin

Caravel和PyKylin成功安装后,执行下面的命令启动Caravel:

  1. nohup gunicorn -w 16 --timeout 60 -b 0.0.0.0:8088 caravel:app >> /tmp/caravel.log 2>&1 &

注意:这里和Caravel给出的启动命令有所不同,这样的启动方式可以避免因查询页面关闭而造成的Server异常退出等问题,建议采用这种启动方式,并将日志重定向到文件中。
启动之后,可以在浏览器打开http://localhost:8088 ,使用admin/admin登陆Caravel。

创建Kylin数据源

caravel-kylin

caravel-kylin

这里需要注意Sqlalchemy Uri的写法:
kylin://ADMIN:KYLIN@172.16.212.17:7070/kylin/api?project=lxw1234
Kylin中的project名称,需要以URL参数的方式传递。
点击”TEST CONNECTION”,提示测试连接成功,并且在最下方,列出了project中所有的表。

添加Kylin表

caravel-kylin

caravel-kylin

其中,Database选择之前创建好的数据源,Table Name必须是数据源中对应真实的表名,表中必须包含一个Date或者Timestamp类型的字段。
另外,如果该表在Kylin中的Schema为DEFAULT,这里的Schema配置留空即可。

配置分析维度和指标

caravel-kylin

在Table List页面,点击表的Edit record按钮,进入属性编辑页面:

caravel-kylin

在List Table Column页面中,可以定义那些字段可以GroupBy,那些可以过滤,那些可以Count Distinct,那些可以Sum、Min、Max,那些字段属于时间序列字段(Is Dttm)。

caravel-kylin

在List Sql Metric页面,可以编辑和定义指标,如果上面对一些字段勾选了Sum、Min、Max、Count Distinct选项,则这里会自动生成相应的指标字段。

数据探索分析与可视化展示

Table定义好维度字段和指标之后,即可针对该表进行数据探索分析与可视化展示,在List Table页面,点击一个表名,即可进入:

caravel-kylin

如下图,在分析页面中,可以针对某一个表事先定义的时间字段、维度及指标字段进行数据探索分析,并可以选择相应的图表进行可视化展示。

caravel-kylin

可以将一个定制好的数据探索保存成Slice,后面直接从Slices页面查看:

caravel-kylin

定制自己的DashBoard

在添加DashBoard页面,可以将之前保存好的多个Slice组合成一个DashBoard:

caravel-kylin

caravel-kylin

其中,每个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,

caravel-kylin

该字段表达式为字符串常量:

  1. '$|INNER JOIN (select ad_id as __ad_id,ad_name as __ad_name from LIUXIAOWEN.AD_DIM) as b ON (ad_id = __ad_id)|b.__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语句为:

  1. SELECT '$|INNER JOIN (select ad_id as __ad_id,ad_name as __ad_name from LIUXIAOWEN.AD_DIM) as b ON (ad_id = __ad_id)|b.__ad_name|$' AS ad_name,
  2. SUM(imp_pv) AS sum__imp_pv
  3. FROM liuxiaowen.AD_REPORT2
  4. WHERE pt >= '2015-06-13'
  5. AND pt <= '2016-06-13'
  6. GROUP BY '$|INNER JOIN (select ad_id as __ad_id,ad_name as __ad_name from LIUXIAOWEN.AD_DIM) as b ON (ad_id = __ad_id)|b.__ad_name|$'
  7. ORDER BY SUM(imp_pv) DESC
  8. LIMIT 50

PyKylin经过转换后提交给Kylin的SQL语句为:

  1. SELECT b.__ad_name as ad_name,
  2. SUM(imp_pv) AS sum__imp_pv
  3. FROM liuxiaowen.ad_report2
  4. inner join (SELECT ad_id AS __ad_id,ad_name AS __ad_name FROM liuxiaowen.ad_dim) AS b
  5. ON (ad_id = __ad_id)
  6. WHERE pt >= '2015-06-13' AND pt <= '2016-06-13'
  7. GROUP BY b.__ad_name
  8. ORDER BY SUM(imp_pv) DESC
  9.  

该配置方法对于关联一张维度表获取多个字段,以及关联多张维度表获取多个维度字段同样适用,只需要在Caravel Table中添加多个字段,表达式的写法一样即可。

其他

此版本只是在Caravel基础之上增加了对Apache Kylin的支持,Caravel的其他功能和支持的数据源不受任何影响。
Caravel UI上的错误提示非常不友好,很多时候需要根据Caravel日志来确定问题;
选择的时间段内没有数据、维度和指标的选择,都有可能造成图表不能正常显示;


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多