问题导读: 1. 如何安装Caravel-Kylin和PyKylin? 2. 如何创建Kylin数据源? 3. 如何添加Kylin表并配置表的维度和指标? 4. 如何进行数据探索分析与可视化展示? 5. 如何定制自己的DashBoard? 6. 如何配置多表关联? Apache Kylin,很好的解决了海量数据OLAP的底层存储与分析引擎,但还缺一个数据可视化工具,可以使用户非常方便的通过图形化分析探索海量数据,而不用写SQL。于是我们发现了Caravel。 本文详细介绍了如何使用这款工具来可视化分析探索Apache Kylin。
Content:
关于Caravel
关于PyKylin
下载并安装Caravel-Kylin
下载并安装PyKylin
启动Caravel
创建Kylin数据源
添加Kylin表
配置表的维度和指标
数据探索分析与可视化展示
定制自己的DashBoard
配置多表关联
其他
关于Caravel
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
PyKylin是由@Wu Xiang开源的Kylin DBAPI Driver 和SQLAlchemy Dialect
( https://github.com/wxiang7/pykylin),Caravel使用SQLAlchemy适配数据源并提交查询,因此,需要使用PyKylin,将Kylin作为一个数据库引擎注册进SQLAlchemy,然后由Caravel自动适配并执行。
下载并安装Caravel-Kylin
使用root用户或者sudo权限。
使用命令
下载zip包,并解压。
进入解压后根目录,执行下面的命令安装: [mw_shl_code=bash,true]pip install .[/mw_shl_code] 安装完后,执行下面的命令初始化Caravel: [mw_shl_code=bash,true]## 创建admin用户
fabmanager create-admin --app caravel
## 初始化Caravel元数据
caravel db upgrade
## 初始化Caravel默认的用户角色和权限
caravel init
## 加载示例数据(可选)
caravel load_examples[/mw_shl_code] 另外,Caravel默认使用sqlite作为元数据库,配置在caravel_config.py 中,你可以修改使用其他如MySQL作为元数据。
如果你需要使用其他数据库作为Caravel的数据源,则还需要安装相应的Python包,如MySQL: [mw_shl_code=bash,true]pip install mysqlclient[/mw_shl_code]
下载并安装PyKylin
使用root用户或者sudo权限。
使用命令
下载zip包,并解压。
进入解压后根目录,执行下面的命令安装即可: [mw_shl_code=bash,true]pip install .[/mw_shl_code]
启动Caravel-Kylin
Caravel和PyKylin成功安装后,执行下面的命令启动Caravel: [mw_shl_code=bash,true]nohup gunicorn -w 16 --timeout 60 -b 0.0.0.0:8088 caravel:app >> /tmp/caravel.log 2>&1 &[/mw_shl_code] 注意:这里和Caravel给出的启动命令有所不同,这样的启动方式可以避免因查询页面关闭而造成的Server异常退出等问题,建议采用这种启动方式,并将日志重定向到文件中。
启动之后,可以在浏览器打开http://localhost:8088 ,使用admin/admin登陆Caravel。
创建Kylin数据源
这里需要注意Sqlalchemy Uri的写法:
kylin://ADMIN:KYLIN@172.16.212.17:7070/kylin/api?project=lxw1234
Kylin中的project名称,需要以URL参数的方式传递。
点击”TEST CONNECTION”,提示测试连接成功,并且在最下方,列出了project中所有的表。
添加Kylin表
其中,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
在添加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,
该字段表达式为字符串常量 [mw_shl_code=sql,true]'$|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|$'[/mw_shl_code] 字符串以$开头和结尾,以|分隔。
其中: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语句为: [mw_shl_code=sql,true]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,
SUM(imp_pv) AS sum__imp_pv
FROM liuxiaowen.AD_REPORT2
WHERE pt >= '2015-06-13'
AND pt <= '2016-06-13'
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|$'
ORDER BY SUM(imp_pv) DESC
LIMIT 50[/mw_shl_code] PyKylin经过转换后提交给Kylin的SQL语句为: [mw_shl_code=sql,true]SELECT b.__ad_name as ad_name,
SUM(imp_pv) AS sum__imp_pv
FROM liuxiaowen.ad_report2
inner join (SELECT ad_id AS __ad_id,ad_name AS __ad_name FROM liuxiaowen.ad_dim) AS b
ON (ad_id = __ad_id)
WHERE pt >= '2015-06-13' AND pt <= '2016-06-13'
GROUP BY b.__ad_name
ORDER BY SUM(imp_pv) DESC[/mw_shl_code] 该配置方法对于关联一张维度表获取多个字段,以及关联多张维度表获取多个维度字段同样适用,只需要在Caravel Table中添加多个字段,表达式的写法一样即可。
其他
此版本只是在Caravel基础之上增加了对Apache Kylin的支持,Caravel的其他功能和支持的数据源不受任何影响。
Caravel UI上的错误提示非常不友好,很多时候需要根据Caravel日志来确定问题;
选择的时间段内没有数据、维度和指标的选择,都有可能造成图表不能正常显示;
转载自 lxw的大数据田地 |