背景
老板一直反馈说我们给不了他想要的, 关键每次他想要的都不一样, 每实现一个新功能, 他就想要一堆相关的信息, 我要将这些信息都给他做成网页, 用图表展示出来, 各种维度搜索, 这还不得累死这帮开发小伙伴. 所以对于他这种需求, 我基本都予以回绝, 坚决不做. 不过口头说不做, 也深知老板不容易, 他要的信息也不过分, 其实就是要一些数据统计罢啦, 经过一些调研, 一些数据分析部门的朋友建议我用tableau, 我也玩了玩, 功能相当强大, 不过有两个问题:
- 单机软件
这种图表总归是希望可以在线查看, 手机查看最完美 - 付费软件
不便宜
所以我就一直在寻找开源在线的解决方案, 最开始打算使用grafana, 后来发现他对时序支持比较好, 对于表查询的展示好像怪怪的, 就放弃了. 终于在某天在一个偶然的机会, 发现了Superset这个开源项目. 好东西. 于是乎有了今天的分享
简介
曾用名Caravel, Panoramix, 是由Airbnb(知名在线房屋短租公司)开源的数据分析与可视化平台, 该工具主要特点是可自助分析, 自定义仪表盘, 分析结果可视化(导出), 用户/角色权限控制, 还集成了一个SQL编辑器, 可以进行SQL编辑查询等。
安装
我使用docker进行安装, 本以为很简单, 中间还是遇到一些坑.
- 首先安装docker
- 创建相关目录
1 2 3 |
mkdir /dockerfs/superset/conf -p mkdir /dockerfs/superset/data -p |
- 创建容器
1 2 |
docker run -p <span class="hljs-number">8088</span>:<span class="hljs-number">8088</span> -v /dockerfs/superset/conf:<span class="hljs-regexp">/etc/</span>superset -v mkdir /dockerfs/superset/data:<span class="hljs-regexp">/data --name superset -d amancevice/</span>superset:<span class="hljs-number">0.18</span><span class="hljs-number">.5</span> |
- 使用配置文件
1 2 |
vi /dockerfs/superset/conf/superset_config.py |
输入内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<span class="hljs-comment">#---------------------------------------------------------</span> <span class="hljs-comment"># Superset specific config</span> <span class="hljs-comment">#---------------------------------------------------------</span> ROW_LIMIT = <span class="hljs-number">5000</span> SUPERSET_WORKERS = <span class="hljs-number">4</span> SUPERSET_WEBSERVER_PORT = <span class="hljs-number">8088</span> <span class="hljs-comment">#---------------------------------------------------------</span> <span class="hljs-comment">#---------------------------------------------------------</span> <span class="hljs-comment"># Flask App Builder configuration</span> <span class="hljs-comment">#---------------------------------------------------------</span> <span class="hljs-comment"># Your App secret key</span> SECRET_KEY = <span class="hljs-string">'\2\1thisismyscretkey\1\2\e\y\y\h'</span> <span class="hljs-comment"># The SQLAlchemy connection string to your database backend</span> <span class="hljs-comment"># This connection defines the path to the database that stores your</span> <span class="hljs-comment"># superset metadata (slices, connections, tables, dashboards, ...).</span> <span class="hljs-comment"># Note that the connection information to connect to the datasources</span> <span class="hljs-comment"># you want to explore are managed directly in the web UI</span> SQLALCHEMY_DATABASE_URI = <span class="hljs-string">'sqlite:////data/superset.db'</span> <span class="hljs-comment"># Flask-WTF flag for CSRF</span> WTF_CSRF_ENABLED = <span class="hljs-keyword">True</span> <span class="hljs-comment"># Set this API key to enable Mapbox visualizations</span> MAPBOX_API_KEY = <span class="hljs-string">''</span> |
问题就出现在sqlite的路径上, sqlite默认存储在sqlite:////home/superset/.superset/superset.db, 我这里为了以后升级, 所以切换了存储路径, 这里有两种做法
- 直接将/home/superset/.superset/路径映射出来
- 将/home/superset/.superset/superset.db文件拷贝到/data目录
我这里选择的是第二种, 坑也在这, 使用
1 2 3 |
docker <span class="hljs-built_in">exec</span> -it superset /bin/bash cp /home/superset/.superset/superset.db /data |
失败, 发现没有权限, ls了一下才发现当前用户是非root用户, 而/data目录是root权限.
经过一番查找, 发现可以使用以下命令用root账号登陆容器
1 2 |
docker <span class="hljs-built_in">exec</span> -u 0 -it superset /bin/bash |
0号用户就是root用户, 剩下来的就简单了
1 2 |
mv /home/superset/.superset/superset.db /data |
- 退出容器, 重启容器, 然后进行用户初始化
1 2 3 |
docker restart superset docker <span class="hljs-built_in">exec</span> -it superset superset-init |
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-3395439fe5b7bf70.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
- 打开浏览器, 键入地址, 可以使用起来了
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-da3f10f91f3e7933.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-2449c39221d985c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
使用
- 配置数据源
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-e06300b81a60e65c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-54dfb4783727c3ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
注意 连接mysql的时候一定要加charset=utf8, 要不然中文会显示乱码.
点击Test Connection, 进行测试, 如果正常会显示”Seems OK!”
- 添加要展示的表
- 创建slice, 然后将创建好的slice加入到dashboard
我感觉这部分不难, 自己摸索摸索总归能够用起来, 我这里就不详细说了 - 多表展示
这里要特别强调一下如何显示多表的展示, 很多文章都说superset不支持多表, 只支持单表, 我刚开始也以为是这样, 后来发现这个方法可以进行基于多表的展示.
首先记得数据库配置里先勾选”Expose in SQL Lab”, 要不然在SQL Lab中是找不到数据源的
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-e09e85a8f3776a45.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-58c364011581c286.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/491)
先执行一个语句, 注意查询结果中不要有相同的列, 如果有, 后续会提示错误
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-d7a4290cf792fb45.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
点击”Query History”, 选择Visualize
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-1ac728c4f4aa7891.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
勾中一个, 会有以下效果, 我基本都是用默认属性, 然后点击最下方按钮
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-a5ede48317cf47af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
他会跳到slice的编辑页, 可以进行编辑, 其实他这个过程是创建了一个以查询为结果的临时表, 后续就是在这个临时表中做展示. 知道这个原理, 也可以通过直接添加表来进行操作, 只是操作流程不允许写入sql, 可以先添加, 然后再填入sql(我没尝试过, 应该行得通)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-0f25a28c7080f37c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-579914598dc0e30e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
最终结果如下
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-a8d463aa9a1f7ba0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
结语
文章写的有点啰嗦, 如果你有数据可视化的问题, 希望这篇文章能够给予你一定的帮助, 目前我观察下来, 这部分做的好的软件不多, 很多都是靠卖服务赚钱的, 比如数据观(人家做的真好, 其实挺鼓励使用人家的服务的, 如果没什么研发人员, 可以优先考虑使用), 希望这个软件可以满足老板的部分需求. 据说这里面的图表还可以嵌入到其他系统中, 没有仔细研究过, 不过这种不易调优的查询, 最好还是临时用用就好, 别嵌入到系统中, 稳定性和性能都不能有所保障.
最后还是附几张人家的图表截图吧
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-b45065d311e9f882.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-4b289fe10a6b4909.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![Superset搭建及其简单使用](http://upload-images.jianshu.io/upload_images/7322003-3ef94e862dbe3d3e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
作者:一根弦的风筝
链接:https://www.jianshu.com/p/a6fe79d0b1b3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。