BI应用程序Superset的搭建及与Mysql交互

1. 概述

OS环境:Win10
Python版本:Python3.7.1

Superset是一个现代化的企业级商业智能Web应用程序,具有如下特征:

  • 丰富的数据可视化集

  • 易于使用的界面,用于探索和可视化数据

  • 创建和共享仪表板 与主要身份验证提供程序集成的企业级身份验证(如 Database,OpenID,LDAP,OAuth和基于Flask
    AppBuilder的REMOTE_USER)

  • 可扩展的高粒度安全/权限模型,允许谁可以访问各个功能和数据集的复杂规则

  • 一个简单的语义层,允许用户通过定义哪些字段应显示在哪个下拉列表以及哪些聚合和功能度量标准可供用户使用来控制数据源在UI中的显示方式

  • 通过SQLAlchemy与大多数讲SQL的RDBMS集成

  • 与Druid.io深度整合

2. 创建虚拟环境

使用 Anaconda 自带的 conda 工具创建虚拟环境,去Anaconda官网下载:
BI应用程序Superset的搭建及与Mysql交互
安装完毕后,在 Anaconda Prompt 中使用命令行创建虚拟环境:

conda create -n superset python=3.7

通过 cd 命令进入 superset 文件夹路径( …\Anaconda\envs\superset\ ),输入如下命令进入虚拟环境

activate superset

3. 安装 Superset

pip install superset -i https://pypi.douban.com/simple

这里安装时会有 “Microsoft Visual C++ 14.0 is required” 信息报错,需要安装C++对该依赖包进行编译,可以下载该包的whl格式文件(注意版本python3.7);然后在 Anaconda Prompt 中进入whl 文件所在的路径通过 pip install 安装即可。

4. 初始化Superset

命令行中直接运行 superset, 会提示“不是内部或外部命令”。要解决这个问题,可以直接通过 cd 命令进入 Superset 安装目录( …\Anaconda\envs\superset\Lib\site-packages\superset\bin )。然后运行如下命令:

# 创建管理员账号
fabmanager create-admin --app superset 

# 初始化数据库
python superset db upgrade

# 载入案例数据
python superset load_examples

# 初始化角色和权限
python superset init

5. 启动服务Superset

由于Superset 使用 gunicorn 作为应用程序服务器,而 gunicorn 不支持 Windows,所以直接运行 python superset runserver 会出错,可以在命令行中添加 -d ,使用 development web server 运行,默认端口号8088:

# 启动服务,端口号 8088,使用 -p 更改端口号
python superset runserver -d

6. 登录Superset

在浏览器输入 http://localhost:8088http://127.0.0.1:8088/ 进入登录界面:

BI应用程序Superset的搭建及与Mysql交互
再输入 fabmanager create-admin --app superset 这步设置的账号和密码登录后进入这样的页面:
BI应用程序Superset的搭建及与Mysql交互
7. 连接Mysql数据库

7.1 连接数据库前,需在本地创建 Mysql 数据库,数据库下载地址

7.2 配置数据源

Superset默认使用sqllite。支持以下数据库:
BI应用程序Superset的搭建及与Mysql交互
虚拟环境中,配置 Mysql 数据源命令:

pip install mysqlclient

7.3 连接数据库:

BI应用程序Superset的搭建及与Mysql交互
点击添加按钮:
BI应用程序Superset的搭建及与Mysql交互
填写数据库的名字以及SQLAlchemy连接字符串:
BI应用程序Superset的搭建及与Mysql交互
点击“Test Connection”,如果 运行superset服务的实例能够连接到数据库 ,会弹出类似下面的连接成功提示信息:
BI应用程序Superset的搭建及与Mysql交互
8. 体会
Superset的可视化,具有一定的局限性,目前每次只支持可视化一张表,还不支持join多表的情况。