开源数据可视化工具(For Apache Kylin)使用说明
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
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
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包不完整)
进入解压后根目录,执行下面的命令安装:
- pip install .
PS:在国内建议使用https://pypi.tuna.tsinghua.edu.cn/simple/ 作为源来安装。
- pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装完后,执行下面的命令初始化Caravel:
- ## 创建admin用户
- fabmanager create-admin --app caravel
- ## 初始化Caravel元数据
- caravel db upgrade
- ## 初始化Caravel默认的用户角色和权限
- caravel init
- ## 加载示例数据(可选)
- caravel load_examples
另外,Caravel默认使用sqlite作为元数据库,配置在caravel_config.py 中,你可以修改使用其他如MySQL作为元数据。
如果你需要使用其他数据库作为Caravel的数据源,则还需要安装相应的Python包,如MySQL:
- 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包不完整)
进入解压后根目录,执行下面的命令安装即可:
- pip install .
启动Caravel-Kylin
Caravel和PyKylin成功安装后,执行下面的命令启动Caravel:
- 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数据源
这里需要注意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,
该字段表达式为字符串常量:
- '$|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语句为:
- 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
PyKylin经过转换后提交给Kylin的SQL语句为:
- 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
该配置方法对于关联一张维度表获取多个字段,以及关联多张维度表获取多个维度字段同样适用,只需要在Caravel Table中添加多个字段,表达式的写法一样即可。
其他
此版本只是在Caravel基础之上增加了对Apache Kylin的支持,Caravel的其他功能和支持的数据源不受任何影响。
Caravel UI上的错误提示非常不友好,很多时候需要根据Caravel日志来确定问题;
选择的时间段内没有数据、维度和指标的选择,都有可能造成图表不能正常显示;
作者:
lxw http://lxw1234.com/
Rocky Qi https://github.com/rocky1001
20160812更新:
很多网友在按照上面的方法(基于源码离线安装)安装之后,都遇到了js无法正常加载,页面无法正常显示的问题,该问题是由于node/npm环境未正确安装而导致的。
解决方法请参考官方说明 https://github.com/airbnb/caravel/blob/master/CONTRIBUTING.md#setting-up-the-node–npm-javascript-environment
或者 http://www.cnblogs.com/kevin19900306/p/5701401.html
如果觉得本博客对您有帮助,请 赞助作者 。
转载请注明:lxw的大数据田地 » 开源数据可视化工具(For Apache Kylin)使用说明
开源OLAP+数据可视化工具–For Apache Kylin Yarn公平调度器Fair Scheduler根据用户组分配资源池-
博主,您好 安装Caravel-Kylin报错 :pip install .--user另外Caravel-Kylin和PyKylin的地址好像是一样的Installing collected packages: caravel Running setup.py install for caravel ... error Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-JBIve4-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-oIHPQJ-record/install-record.txt --single-version-externally-managed --compile --user --prefix=: running install running build running build_py creating build creating build/lib creating build/lib/tests copying tests/caravel_test_config.py -> build/lib/tests copying tests/core_tests.py -> build/lib/tests copying tests/__init__.py -> build/lib/tests running egg_info creating caravel.egg-info writing requirements to caravel.egg-info/requires.txt writing caravel.egg-info/PKG-INFO writing top-level names to caravel.egg-info/top_level.txt writing dependency_links to caravel.egg-info/dependency_links.txt writing manifest file 'caravel.egg-info/SOURCES.txt' warning: manifest_maker: standard file '-c' not found reading manifest file 'caravel.egg-info/SOURCES.txt' writing manifest file 'caravel.egg-info/SOURCES.txt' running build_scripts creating build/scripts-2.7 error: file '/tmp/pip-JBIve4-build/caravel/bin/caravel' does not exist ----------------------------------------Command "/usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-JBIve4-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-oIHPQJ-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-JBIve4-build/
-
你好博主,我这边一直启动失败,不知道是什么原因,能否帮我查看下。2016-06-27 17:49:33,615:ERROR:flask_appbuilder.base:Add Permission on Menu Error: (sqlite3.InterfaceError) Error binding parameter 0 - probably unsupported type. [SQL: 'SELECT ab_view_menu.id AS ab_view_menu_id, ab_view_menu.name AS ab_view_menu_name \nFROM ab_view_menu \nWHERE ab_view_menu.name = ?\n LIMIT ? OFFSET ?'] [parameters: (l'Security', 1, 0)]2016-06-27 17:49:33,618:INFO:flask_appbuilder.base:Registering class CssTemplateModelView on menu CSS Templates2016-06-27 17:49:33,619:INFO:flask_appbuilder.base:Registering class DruidDatasourceModelView on menu Druid Datasources2016-06-27 17:49:33,623:ERROR:flask_appbuilder.base:Add Permission on Menu Error: (sqlite3.InterfaceError) Error binding parameter 0 - probably unsupported type. [SQL: 'SELECT ab_view_menu.id AS ab_view_menu_id, ab_view_menu.name AS ab_view_menu_name \nFROM ab_view_menu \nWHERE ab_view_menu.name = ?\n LIMIT ? OFFSET ?'] [parameters: (l'Security', 1, 0)]启动页的报错为:access denied.
-
我也遇到同样的问题,要如何解决?
-
-
博主:你好!请问下caravel中文乱码的问题,你们解决了吗?如何解决的?我原来用的python2.7是乱码,升级成3.4了 还是乱码
-
你好,我在机器上装了两个版本的python,2.6和3.5,因为很多项目依赖2.6所以默认指向是2.6,caravel可不可以手动指向python,现在默认会装在2.6的目录下
-
博主你好,请问Caravel支持HANA数据库吗
-
StatementError: (exceptions.AttributeError) 'EntryPoint' object has no attribute 'resolve' [SQL: u'INSERT INTO dbs (created_on, changed_on, database_name, sqlalchemy_uri, password, cache_timeout, extra, changed_by_fk, created_by_fk) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'] [parameters: [{'password': u'aaaaaa', 'database_name': u'CDM', 'cache_timeout': 9999, 'sqlalchemy_uri': 'mysql://admin:XXXXXXXXXX@172.30.249.154:3306/CDM', 'extra': u'{\r\n "metadata_params": {},\r\n "engine_params": {}\r\n}\r\n'}]]想连接mysql 试试效果,可是出现这个错误,不是很懂python,感觉像是返回参数和接收参数不匹配,可是为什么会出现这种问题,还有哪没有配置吗
-
请问支持离线安装吗?。。。。。
-
博主,好。麻烦博主看一下这个问题:在32位的win7系统中安装Caravel,python的版本是3.5,在执行安装caravel后,这个命令“fabmanager create-admin --app caravel”能正确执行,当执行命令“caravel db upgrade”提示:'caravel' 不是内部或外部命令,也不是可运行的程序或批处理文件。以为caravel没有正确安装,当再次执行命令“pip install caravel”时,提示下面这些(部分,剩余部分跟这一样,都提示‘Requirement already satisfied (use --upgrade to upgrade):’),大概意思是已经安装,但是为什么caravel命令不能执行呢?请博主指教Requirement already satisfied (use --upgrade to upgrade): caravel in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages\caravel-0.10.0-py3.5.eggRequirement already satisfied (use --upgrade to upgrade): cryptography==1.4 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)Requirement already satisfied (use --upgrade to upgrade): flask-appbuilder==1.8.1 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)Requirement already satisfied (use --upgrade to upgrade): flask-cache==0.13.1 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)Requirement already satisfied (use --upgrade to upgrade): flask-migrate==1.5.1 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)Requirement already satisfied (use --upgrade to upgrade): flask-script==2.0.5 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)Requirement already satisfied (use --upgrade to upgrade): flask-testing==0.5.0 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)Requirement already satisfied (use --upgrade to upgrade): humanize==0.5.1 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (fromcaravel)Requirement already satisfied (use --upgrade to upgrade): gunicorn==19.6.0 in c:\users\hl\appdata\local\programs\python\python35-32\lib\site-packages (from caravel)
-
到caravel 安装目录下找到执行文件执行
-
还是不行E:\Areport\tool\caravel-0.10.0\caravel\bin>caravel'caravel' 不是内部或外部命令,也不是可运行的程序或批处理文件。
-
-
-
安装完成之后访问页面,进入dashboard发现页面css错误,并且提示缺少js和css。出现这个问题的解决办法是:1、安装node and npm2、 cd ${caravel_path}/caravel/assets npm install npm run prod3、启动
-
亲,在assets目录下执行了npm install npm run prod命令,结果是生成了一个node_modules目录,里面有npm、run、prod三个目录,但是启动后还是缺少css,请问你是怎么处理的
-
抱歉,是我搞错了,原来npm install和npm run prod是两条命令,之前写成一条了
-
想问下你用的npm的版本是多少~
-
我发现我总是安装不了,我现在使用的python2.7 pip 8.1.2 caravel-0.8.9 pykylin-0.0.1,此外npm3.10.9 和 node v5.11.1。
-
-
-
博主 你的站 评论吃掉了换行,使用不友好,建议优化
-
636- return '%Y-%m-%d'637- if type == 'TIME':638- return '%H:%M:%S'639- return '%Y-%m-%d %H:%M:%S.%f'640-641- tf = get_dtformat(cols[granularity].type or 'DATE')642-643- # tf = '%Y-%m-%d %H:%M:%S.%f'644- tf = '%Y%m%d'645- time_filter = [646: timestamp >= from_dttm.strftime(tf),647- timestamp = inner_from_dttm.strftime(tf)====================git下来的这个版本里面的cols[granularity]字段没有了 这个字段很关键 认为应该保留
-
博主,您好,安装好caravel之后,caravel与kylin进行整合的时候,出现如下错误:ERROR:Traceback (most recent call last):.........NoSuchModuleError: Can't load plugin:sqlalchemy.dialects:kylin
-
我安装后也是这个错,请问你是怎么解决的?
-
-
楼主,上面的问题npm install babel-core babel-loader --save-dev之后已经解决掉了,现在又出现一个问题:
-
ERROR in ./javascripts/caravel-select2.jsModule not found: Error: Cannot resolve 'file' or 'directory' ../node_modules/jquery-ui/themes/base/jquery-ui.css in /opt/caravel-master/caravel/assets/javascripts @ ./javascripts/caravel-select2.js 5:0-62请问这个怎么解决啊??
-
请问一下,你这个问题解决了吗
-
-
您好,我使用你上面的http://www.cnblogs.com/kevin19900306/p/5701401.html这个链接的安装方式安装,使用cnpm install的时候出现additional chunk assets 78%,然后就卡死了。请问下这个什么原因么?
-
同样遇到问题 80% optimize chunk assets 最后就nodejs 内存溢出了
-
两个版本node --version v6.9.1npm --version 3.10.8
-
我也一直卡在78%和80%这里,两种情况都会出现。。。。。npm版本是3.10.9node是6.9.2
-
-
-
在List Sql Metric页面,可以编辑和定义指标,如果上面对一些字段勾选了Sum、Min、Max、Count Distinct选项,我勾选了相应的选项但是,没有生成对就原指标,求大神指导
-
博主:你好!请问下caravel中文乱码的问题,你们解决了吗?如何解决的?我原来用的python2.7是乱码,升级成3.3了 还是乱码,我用的是oracle数据库,这个参数是怎么设置的呢
-
博主:安装caravel好了,登录到后台发现有些js和css 404,发现javascripts/dist下的这个dist目录没有,在你的github上也没有这个目录
-
博主,请教一个问题,对于Caravel/Superset 我刚开始研究 有个功能想请教下, 表格(table, pivot table)显示有没有Drill Down和Drill Through的功能
-
如何调用caravel中的图表?
-
你好 我想请问这篇文章里最后提到的kylin schema是什么东西?我按照教程一步步做 最后schema不知道填写什么 留空的话就会添加失败 请问我要去哪里一个table对应的schema呢
-
博主你好 我安装好caravel后访问slice页面下面的图表时出现 Uncaught TypeError: Cannot read property 'prototype' of undefined的错误 explore.entry.js 这个文件存在但加载失败 可否发送一下您这边的js 不胜感激 790753906@qq.com
-
博主你好,请问下安装报错 warning: no previously-included files matching '*.pyc' found under directory 'docs' warning: no previously-included files matching '*.pyo' found under directory 'docs' no previously-included directories found matching 'docs/_build' no previously-included directories found matching 'docs/_themes/.git'以及 non-existing path in 'numpy/distutils': 'site.cfg' Could not locate executable gfortran Could not locate executable f95 Could not locate executable ifort Could not locate executable ifc Could not locate executable lf95 Could not locate executable pgfortran Could not locate executable f90 Could not locate executable f77 Could not locate executable fort Could not locate executable efort Could not locate executable efc Could not locate executable g77 Could not locate executable g95 Could not locate executable pathf95 don't know how to compile Fortran code on platform 'posix'查找不到是什么原因,感觉是在按照numpy模块的时候出错了?因为网络设置问题,我的包是先从https://github.com/rocky1001/caravel.gitdownload的zip包后解压又安装的可以直接安装numpy模块后在执行pip install . 命令吗非常感谢!