简介
曾用名Caravel, Panoramix, 是由Airbnb(知名在线房屋短租公司)开源的数据分析与可视化平台, 该工具主要特点是可自助分析, 自定义仪表盘, 分析结果可视化(导出), 用户/角色权限控制, 还集成了一个SQL编辑器, 可以进行SQL编辑查询等。
安装
我使用docker进行安装, 本以为很简单, 中间还是遇到一些坑,总结如下:
1、首先安装docker
2、创建相关目录
mkdir /data/docker/volumes/superset/conf -p
mkdir /data/docker/volumes/superset/data -p
拉取镜像superset镜像
docker pull amancevice/superset:0.18.5
注:这一步可以省略,默认第三步会创建相关目录
3、创建容器
docker run -p 8088:8088 -v /data/docker/volumes/superset/conf:/etc/superset -v /data/docker/volumes/superset/data:/data --name superset -d amancevice/superset:0.18.5
4、使用配置文件
vi /data/docker/volumes/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
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_COMMIT_TEARDOWN = True
# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
加入
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_COMMIT_TEARDOWN = True
是为了处理warning
UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.
warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')
问题就出现在sqlite的路径上, sqlite默认存储在sqlite:////home/superset/.superset/superset.db, 我这里为了以后升级, 所以切换了存储路径, 这里有两种做法
1)直接将/home/superset/.superset/路径映射出来
2)将/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
运行
ERROR:flask_appbuilder.security.sqla.manager:DB Creation and initialization failed: (sqlite3.OperationalError) unable to open database file (Background on this error at: http://sqlalche.me/e/e3q8)
百度了一下,错误有许多种,这里稍微列举一些
1)数据库路径最好写成绝对路径,并且目录要存在,而且 对目录要有读写的权限, 因为打开数据库的时候,会产生临时数据;
2)在Win 7 enterprise 和 Win Xp Pro上面写python v2.7时, 'C:\Users\Lux\Desktop\History' 路径 有时候要写成 'C:\\Users\\Lux\\Desktop\\History';
3)有种情况我也是无法解释的,某些时候你的数据库文件后缀名不是 db 也不行,需要改名为 xxx.db ;
4)对数据库文件要有读写的权限;
我遇到的是第一个情况,只需要数据目录授权即可,
cd /data/docker/volumes/superset/
chmod -R 777 data
5、退出容器, 重启容器, 然后进行用户初始化
docker restart superset
6、配置superset容器
设置用户名和密码(docker exec -it 容器ID fabmanager create-admin –app superset)
初始化数据库(docker exec -it 容器ID superset db upgrade)
superset初始化(docker exec -it 容器ID superset init)
开启superset服务(docker exec -it 容器ID superset runserver)
访问地址http://localhost:8088
配置数据源
注意连接mysql的时候一定要加charset=utf8, 要不然中文会显示乱码.
点击Test Connection, 进行测试, 如果正常会显示"Seems OK!"
添加要展示的表
创建slice, 然后将创建好的slice加入到dashboard
我感觉这部分不难, 自己摸索摸索总归能够用起来, 我这里就不详细说了
多表展示
这里要特别强调一下如何显示多表的展示, 很多文章都说superset不支持多表, 只支持单表, 我刚开始也以为是这样, 后来发现这个方法可以进行基于多表的展示.
首先记得数据库配置里先勾选"Expose in SQL Lab", 要不然在SQL Lab中是找不到数据源的
Expose in SQL lab.png
先执行一个语句, 注意查询结果中不要有相同的列, 如果有, 后续会提示错误
点击"Query History", 选择Visualize
勾中一个, 会有以下效果, 我基本都是用默认属性, 然后点击最下方按钮
他会跳到slice的编辑页, 可以进行编辑, 其实他这个过程是创建了一个以查询为结果的临时表, 后续就是在这个临时表中做展示. 知道这个原理, 也可以通过直接添加表来进行操作, 只是操作流程不允许写入sql, 可以先添加, 然后再填入sql(我没尝试过, 应该行得通)
table detail.png
最终结果如下
结语
文章写的有点啰嗦, 如果你有数据可视化的问题, 希望这篇文章能够给予你一定的帮助, 目前我观察下来, 这部分做的好的软件不多, 很多都是靠卖服务赚钱的, 比如数据观(人家做的真好, 其实挺鼓励使用人家的服务的, 如果没什么研发人员, 可以优先考虑使用), 希望这个软件可以满足老板的部分需求. 据说这里面的图表还可以嵌入到其他系统中, 没有仔细研究过, 不过这种不易调优的查询, 最好还是临时用用就好, 别嵌入到系统中, 稳定性和性能都不能有所保障.
最后还是附几张人家的图表截图吧
spanshot1.png