官方教程:http://superset.apache.org/tutorial.html
Superset是由Airbnb(知名在线房屋短租公司)开源BI数据分析与可视化平台(曾用名Caravel、Panoramix),该工具主要特点是可自助分析、自定义仪表盘、分析结果可视化(导出)、用户/角色权限控制,还集成了一个SQL编辑器,可以进行SQL编辑查询等,原来是用于支持Druid的可视化分析,后面发展为支持很多种关系数据库及大数据计算框架,如:mysql, oracle, Postgres, Presto, sqlite, Redshift, Impala, SparkSQL, Greenplum, MSSQL.
安装、配置Superset
1、安装虚拟环境virtualenv(需要安装Python,并配置环境变量)
pip install virtualenv
2、使用virtualenv。先在D盘建立d:\pycharm\superset目录(文件夹名字随意)。
d:
md pycharm
cd pycharm
md superset
cd superset
3、然后激活:
cd d:\pycharm\superset
# 创建虚拟环境
virtualenv env
# 激活,启用虚拟环境(必须要用反斜杆)
env\Scripts\activate
激活之后的界面如上图,注意在命令行输入的左侧有(env)标记,这样我们的后续操作都会在env中生效,不会影响整体的pyhton环境。
5、安装sasl。不装这个包,可能superset安装会不成功。下载地址
6、前置项安装完毕,开始安装superset。
这里遇到了一个坑,某个依赖包没有被正确的安装,报错信息"error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/ ",这是因为该依赖包需要安装 C++ 进行编译。
一般不用为此专门安装 Microsoft Visual C++ 14.0,而是去下载该依赖包的 whl 格式文件(需要对应虚拟环境的 python 版本),再进入 whl 文件所在的路径通过 pip install
安装即可(https://www.lfd.uci.edu/~gohlke/pythonlibs/)。如果在安装过程中遇到其他问题,就把报错信息复制出来,然后去问问神奇的 stackoverflow 吧!
pip install superset
# 创建管理员帐号
fabmanager create-admin --app superset
# 初始化数据库 (windows下,先进入到
Python安装目录(或者virtualEnv的虚拟目录)下,lib\site-packages\superset\bin下)
python superset db upgrade
# 加载例子(后续操作都需要在lib\site-packages\superset\bin下)
python superset load_examples
# 初始化角色和权限
python superset init
# 启动服务,端口 8088, 使用 -p 更改端口号。
python superset runserver -d
但在命令行中直接运行 superset
, 会提示“不是内部或外部命令”。要解决这个问题,可以直接通过 cd
命令进入 Superset 安装目录( ...\Anaconda3\envs\superset\Lib\site-packages\superset\bin )。然后运行如下命令:
python superset db upgrade
python superset load_examples
python superset init
python superset runserver
如果有多版本的python,要注意
这里直接运行 python superset runserver
会出错,原因是 Superset 使用 gunicorn 作为应用程序服务器,而 gunicorn 不支持 Windows。需要在命令行中添加 -d
,使用 development web server 运行。最终运行命令为:
python superset runserver -d -p 8088
但是这种部署方式,官方并不建议在生产环境中使用。在 Superset 的 issues 922,有人提供了一种方法,使用 waitress。首先安装 waitress:
pip install waitress
接着找到 superset/cil.py 的 debug_run()
函数:
def debug_run(app, port, use_reloader):
app.run(
host='0.0.0.0',
port=int(port),
threaded=True,
debug=True,
use_reloader=use_reloader)
将其改写成:
def debug_run(app, port):
from waitress import serve #使用 waitress 解决 gunicorn 不支持 windows 问题
return serve(
app,
host='0.0.0.0',
port=int(port))
7、然后使用浏览器,打开localhost:8088即可看到登录页面。
输入在 fabmanager create-admin --app superset
这步设置的账号和密码登录,进入 Superset 首页(右上角国旗处可设置语言):
8、数据库连接:mysql://root:123456@127.0.0.1/crawler?charset=utf8。连接数据库之前一定要安装mysqlclient包:pip install mysqlclient
Superset支持的数据库:
教程
4 数据源
接下来,将演示如何连接数据库,以及怎样使用表和导入 CSV 到数据库。Superset 还深度支持 Druid(一个高效的海量数据查询系统),但这里不做介绍。
4.1 连接到数据库
1、连接到新的数据库:
1、从顶部导航菜单的 Source — Databases 进入数据库列表页:
2、只需填写两项:数据库(名称)、SQLAlchemy URI(如果是mysql,中文一定要设置charset=utf8,不然会乱码)
3、保存(Save)
4.2 创建表
现在已经配置了数据库,接下来需要向 Superset 添加想要查询的特定表。从 Sources — Tables 进入到数据表列表页:
点击列表页右上角的绿色加号按钮:
点击按钮后,将进入添加数据表的表单页,在该页面依次填写目标数据库、数据表名称、数据库模式(可选),再点击 Save 按钮,即可完成创建。
创建完成后,将重定向回到列表页,此时在页面顶部会出现一条消息提示指示表已创建:
在列表页还可以对已添加的数据表进行编辑:
点击编辑图标,可进入表的编辑页,对表的详细信息、字段、指标进行配置,这里演示对表字段的配置(设置是否可对指定字段进行分组或过滤):
4.3 上传 CSV
Superset 还可以导入 CSV 到数据库中,从 Sources — Upload a CSV 进入到导入 CSV 的表单页:
依次填写表名称、导入 CSV 文件、选择要导入的数据库,再点击 Save 按钮完成导入:
创导入完成后,将重定向回到数据表列表页,此时在页面顶部会出现一条消息提示指示表已创建:
5 创建 dashboard
5.1 探索数据
要开始探索数据,只需在可用数据表列表中点击刚刚创建的表名:
点击表名后进入表的可视化页面,默认的可视化类型为表视图:
在 Datasouce & Chart Type 下方,依次可以进行时间、Group By、Not Group By 以及字段过滤等设置:
在页面左侧完成相关设置后,点击 Run Query 按钮,即可在右侧的可视化视图,查看数据的可视化展示:
5.2 创建图表
通过更改可视化类型和其他设置,可以很灵活地对数据进行探索性分析。若在探索的过程中发现某个有价值的点,可以点击左上角的 Save 按钮,在出现的弹出框中命名图表并选择是否将其添加到 dashboard,以将其保存为图表:
从顶部导航菜单的 Charts 进入到图表的列表页,找到刚刚创建的图表:
点击图表名称进入到刚才的可视化页面,对已保存的图表进行再次编辑。
5.3 创建 dashboard
从顶部导航菜单的 Dashboards 进入到 dashboard 的列表页,点击右上角的绿色加号按钮:
点击按钮后,将进入添加 dashboard 的表单页,在该页面依次填写 dashboard 名称和拥有者,再点击 Save 按钮,即可完成创建:
5.4 编辑 dashboard
完成 dashboard 的创建后,将重定向到 dashboard 的列表页,找到刚创建的 dashboard:
点击 dashboard 的名称,进入 dashboard,此时 dashboard 还未配置任何图表,处于空值状态,点击右上角的 Edit dashboard 按钮进行编辑:
进入编辑状态后,可已导入图表(仅限 dashboard 拥有者拥有的图表)、标签页、行、列、标题、Markdown 和分割线等组件:
并可通过拖拽编辑 dashboard 的布局(在拖拽过程中,Superset 还提供了辅助线和栅格进行提示):
Superset 还可以通过编辑 CSS 修改 dashboard 的样式:
在进行编辑之后,点击 Save changes 按钮,即可完成操作。
6 SQL 查询
在使用 SQL 查询前,需要进行两项设置:
首先,从顶部导航菜单的 Sources — Databases 进入数据库的列表页,选中数据库进行编辑,将 Expose in SQL Lab 和 Allow Run Sync 都勾选上,其余的不要勾选。
在勾选完上述两项之后,Windows 用户还会出现 “module" object has no attribute 'SIGALRM'
错误,这又是由于 Windows 环境下依赖包不兼容导致的 —— Python 的 signal 包只作用于 Linux 和 Mac ,在 Windows 下不启作用。解决方法很简单粗暴,在 superset/utils.py 下找到相关代码,把 signal
所在行都注释,然后再加上一个 pass
(这块代码的功能是在超时后将查询进程杀掉,注释后没大影响)。
def __enter__(self):
try:
pass
#signal.signal(signal.SIGALRM, self.handle_timeout)
#signal.alarm(self.seconds)
except ValueError as e:
logging.warning("timeout can't be used in the current context")
logging.exception(e)
def __exit__(self, type, value, traceback):
try:
pass
#signal.alarm(0)
except ValueError as e:
logging.warning("timeout can't be used in the current context")
logging.exception(e)
上面两步做完后,即可在 SQL Lab — SQL Editor 进行 SQL 查询操作:
可对查询语句进行执行、保存、分享(复制)操作,还可以对查询结果可以进行可视化和导出为 CSV 文件。
7 安全性
Superset 中的安全性由 Flask AppBuilder(FAB)处理(一个“简单快速的应用程序开发框架,构建在Flask之上”)。FAB 提供身份验证、用户管理、权限和角色,可参阅其安全文档。角色由一组权限组成,不同的用户角色被赋予了不同的权限,Superset 本身提供了一组基本角色:
- Admin:拥有所有可能的权限,包括从其他用户授予或撤消权限以及更改其他人的切片和 dashboard。
- Alpha:可以访问所有数据源,但不能授予或撤消其他用户的访问权限。它们也仅限于改变它们拥有的对象。可以添加和更改数据源。
- Gamma:访问受限,只能使用通过另一个互补角色获得访问权限的数据源。他们只能查看由他们有权访问的数据源制作的切片和 dashboard。无法更改或添加数据源,但可以可以创建切片和 dashboard。
- sql_lab:被授予对 SQL Lab 的访问权限。
- public:可以通过在 superset\config.py 设置
PUBLIC_ROLE_LIKE_GAMMA = True
,授予该角色与 Gamma 角色相同的权限集。
在执行
superset init
命令时,所有这些基本角色将重新同步到初始值,因此不建议通过授予或撤消权限来更改这些基本角色。
这里不对 Superset 的安全机制做过多展开,如果想了解更多,包括如何为用户提供对特定数据集的访问权限,以及如何定制自己的角色,可以参阅官方的安全文档。
8 小结
虽然 Superset 仍有着很多不足,例如:没有提供图表的下钻功能、不支持多图表间的复杂联动、处理大数据集效率较低、权限管理和图表管理的功能设计不友好等。但其作为一款轻量级的 BI 应用,对于个人开发者和中小型团队,其不失为一个优雅且高效的自助式数据分析解决方案。
Superset 的不足,一方面可以看后续 Airbnb 会不会优化,另一方面可以对其进行二次开发。实际上,Superset 应主要提供基于最终结果表的数据查询和报表展示,对于复杂的数据联动,则放在 ETL 的过程中完成。