背景
老板一直反馈说我们给不了他想要的, 关键每次他想要的都不一样, 每实现一个新功能, 他就想要一堆相关的信息, 我要将这些信息都给他做成网页, 用图表展示出来, 各种维度搜索, 这还不得累死这帮开发小伙伴. 所以对于他这种需求, 我基本都予以回绝, 坚决不做. 不过口头说不做, 也深知老板不容易, 他要的信息也不过分, 其实就是要一些数据统计罢啦, 经过一些调研, 一些数据分析部门的朋友建议我用tableau, 我也玩了玩, 功能相当强大, 不过有两个问题:
- 单机软件
这种图表总归是希望可以在线查看, 手机查看最完美 - 付费软件
不便宜
所以我就一直在寻找开源在线的解决方案, 最开始打算使用grafana, 后来发现他对时序支持比较好, 对于表查询的展示好像怪怪的, 就放弃了. 终于在某天在一个偶然的机会, 发现了Superset这个开源项目. 好东西. 于是乎有了今天的分享
简介
曾用名Caravel, Panoramix, 是由Airbnb(知名在线房屋短租公司)开源的数据分析与可视化平台, 该工具主要特点是可自助分析, 自定义仪表盘, 分析结果可视化(导出), 用户/角色权限控制, 还集成了一个SQL编辑器, 可以进行SQL编辑查询等。
安装
我使用docker进行安装, 本以为很简单, 中间还是遇到一些坑.
- 首先安装docker
- 创建相关目录
mkdir /dockerfs/superset/conf -p
mkdir /dockerfs/superset/data -p
- 创建容器
docker run -p 8088:8088 -v /dockerfs/superset/conf:/etc/superset -v mkdir /dockerfs/superset/data:/data --name superset -d amancevice/superset:0.18.5
- 使用配置文件
vi /dockerfs/superset/conf/superset_config.py
输入内容
#---------------------------------------------------------
# Superset specific config
#---------------------------------------------------------
ROW_LIMIT = 5000
SUPERSET_WORKERS = 4
SUPERSET_WEBSERVER_PORT = 8088
#---------------------------------------------------------
#---------------------------------------------------------
# Flask App Builder configuration
#---------------------------------------------------------
# Your App secret key
SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'
# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
SQLALCHEMY_DATABASE_URI = 'sqlite:////data/superset.db'
# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
问题就出现在sqlite的路径上, sqlite默认存储在sqlite:////home/superset/.superset/superset.db, 我这里为了以后升级, 所以切换了存储路径, 这里有两种做法
- 直接将/home/superset/.superset/路径映射出来
- 将/home/superset/.superset/superset.db文件拷贝到/data目录
我这里选择的是第二种, 坑也在这, 使用
docker exec -it superset /bin/bash
cp /home/superset/.superset/superset.db /data
失败, 发现没有权限, ls了一下才发现当前用户是非root用户, 而/data目录是root权限.
经过一番查找, 发现可以使用以下命令用root账号登陆容器
docker exec -u 0 -it superset /bin/bash
0号用户就是root用户, 剩下来的就简单了
mv /home/superset/.superset/superset.db /data
- 退出容器, 重启容器, 然后进行用户初始化
docker restart superset
docker exec -it superset superset-init

- 打开浏览器, 键入地址, 可以使用起来了


使用
- 配置数据源


注意 连接mysql的时候一定要加charset=utf8, 要不然中文会显示乱码.
点击Test Connection, 进行测试, 如果正常会显示"Seems OK!"
- 添加要展示的表
- 创建slice, 然后将创建好的slice加入到dashboard
我感觉这部分不难, 自己摸索摸索总归能够用起来, 我这里就不详细说了 - 多表展示
这里要特别强调一下如何显示多表的展示, 很多文章都说superset不支持多表, 只支持单表, 我刚开始也以为是这样, 后来发现这个方法可以进行基于多表的展示.
首先记得数据库配置里先勾选"Expose in SQL Lab", 要不然在SQL Lab中是找不到数据源的


先执行一个语句, 注意查询结果中不要有相同的列, 如果有, 后续会提示错误

点击"Query History", 选择Visualize

勾中一个, 会有以下效果, 我基本都是用默认属性, 然后点击最下方按钮

他会跳到slice的编辑页, 可以进行编辑, 其实他这个过程是创建了一个以查询为结果的临时表, 后续就是在这个临时表中做展示. 知道这个原理, 也可以通过直接添加表来进行操作, 只是操作流程不允许写入sql, 可以先添加, 然后再填入sql(我没尝试过, 应该行得通)


最终结果如下

结语
文章写的有点啰嗦, 如果你有数据可视化的问题, 希望这篇文章能够给予你一定的帮助, 目前我观察下来, 这部分做的好的软件不多, 很多都是靠卖服务赚钱的, 比如数据观(人家做的真好, 其实挺鼓励使用人家的服务的, 如果没什么研发人员, 可以优先考虑使用), 希望这个软件可以满足老板的部分需求. 据说这里面的图表还可以嵌入到其他系统中, 没有仔细研究过, 不过这种不易调优的查询, 最好还是临时用用就好, 别嵌入到系统中, 稳定性和性能都不能有所保障.
最后还是附几张人家的图表截图吧



网友评论