%%%%%2021-9-2更新%%%%%%
更新使用docker安装连接宿主机的数据库
介绍
Apache Superset是一个现代的、企业级的商业智能(Business Intelligence)网络应用程序,它使得用户可以使用无代码可视化构建器和SQL编辑器来轻松探索和可视化自己的数据。
其最初由Airbnb开源,后来由Apache进行孵化,并且于今年(2021年)1 月 21 日宣布毕业并成为 Apache 软件基金会(ASF)的顶级项目(Top-Level Project),截止到现在(2021年8月25日)已经在GitHub上收获了超过4万颗star。
官网地址在这里。
示例看板在这里。
有一句评价非常中肯:对开发人员最大的吸引力在于:支持的数据源足够多,界面足够花里胡哨!。
安装
有多种方式安装superset,比如使用docker、使用pip安装等方式。
使用docker安装是最简单的一种方式,因为它已经将相关依赖都做成了一个镜像,同时其包含了github上的源码,有最大的自由度可供开发。
使用pip安装也较为方便,但是pip包本质上是一个已经编译好的包,没法修改源码,尤其是没法修改前端ui相关的代码。
下面介绍两种安装方式。
docker安装
安装docker软件
可以参考此处的教程。
拉取superset镜像
1 | docker pull apache/superset |
使用镜像
(1)开启一个superset实例:1
docker run -d -p 8080:8088 --name superset apache/superset
(2)初始化实例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 配置管理员账号
docker exec -it superset superset fab create-admin \
--username admin \
--firstname Superset \
--lastname Admin \
--email [email protected] \
--password admin
# 迁移数据库
docker exec -it superset superset db upgrade
# 加载实例
docker exec -it superset superset load_examples
# 初始化
docker exec -it superset superset init
(3)登录:
在浏览器中的地址为:1
http://localhost:8080/login/
连接宿主机的数据库
(具体怎样连接数据库是在下面一节,但是因为docker安装方式会有一点不同,这里先说明一下,后面具体连接时注意这点即可)
如果数据库也是安装在同一个docker容器中,就没有如下特殊操作;
而如果数据库是在本地宿主机中,而superset安装在docker容器中,这样直接使用localhost是不能连接到宿主机的。还需要进行如下配置才可以。
(1)设置宿主机的数据库可外部访问
(1.1)修改postgresql.conf
确保数据库可以接受来自任意IP的连接:1
listen_addresses = '*'
(1.2)修改pg_hba.conf
默认pg只允许本机通过密码认证登录,修改为以下内容后即可以对任意IP访问进行密码验证:1
host all all 0.0.0.0/0 md5
(1.3)重启PostgreSQL服务
在windows的services中重启服务。
(2)连接数据库时主机名更改
如上所述,连接数据库时主机名不能使用localhost,而需要使用特定名称。
对于Mac和Windows系统,docker有一个自动的解析,使用:1
host.docker.internal
作为主机名即可。
对于Linux,可以先尝试:1
172.18.0.1
作为主机名。如果这个不行,可以用以下命令:1
docker inspect <container-id-or-name> | grep Gateway
查看一下docker容器指向的宿主机的ip地址。
pip安装
创建虚拟环境
使用virtualenv或Conda。
使用虚拟环境主要是为了安装环境的独立性,防止里面的库的版本混乱。这一步不详述了。
安装必要的包
大部分的包都能自动下载,但是下面这两个有可能会在自动安装时出现错误,导致整个安装出错(我在windows平台上安装时遇到了这两个问题)。
建议是自动安装,如果出错,再手动安装一下看看是不是这两个出现的问题。
(1)安装Sasl:
下载Sasl的wheel文件:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl
然后:1
pip install
(2)安装python-geohash package:
下载wheel包,然后pip install。
https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-geohash
安装Superset
1 | # 最好确保一下superset是最新版 |
初始化数据库
1 | superset db upgrade |
配置superset
1 | # 将Flask默认的app设置为superset,这样flask就能找到它 |
启动superset
1 | superset run -p 8088 --with-threads --reload --debugger |
连接数据库
Superset本身不提供数据库,其需要连接已有的数据库来作为数据存储的容器。
Superset支持各种数据库,包括MySQL,Presto,Hive,Postgres,Dremio,Snowflake,Teradata和其他数PB级的。由于Superset后端是用Python编写的,因此本质上是Python后端的Flask应用程序……在Python中,所有数据库都有很多驱动程序支持。
这里我们选用PostgreSQL数据库作为后端。
安装PostgreSQL
可以通过下面的链接进行下载安装:
PostgreSQL Database Download
里面自带了pgAdmin图形管理工具来操作PostgreSQL数据库。
创建数据库
安装好pgAdmin后,再通过它来手动创建一个自己的数据库,用于后续存储数据。
具体可以参考如下教程:
PostgreSQL 创建数据库
特别注意的是该数据库的用户名username、密码password、主机地址host(本机就是localhost)、端口号port(默认是5432)和名称database。
初次创建后该数据库就直接跑起来后,但后面电脑关机后,有可能出现明明信息都正确,但是启动不起来的问题,比如出现下面这个问题:1
Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432?
这是因为后台的数据库服务没有启动。解决方法是在windows的Services中找到postgresql-x64-13这个服务,然后启动它。
安装数据库驱动
首先需要安装一个额外的库:1
pip install psycopg2
连接
在上面的启动的superset的web页面中,选择添加一个数据库,然后根据PostgreSQL的连接语法与前面创建的数据库进行连接,语法格式为:1
postgresql://{username}:{password}@{host}:{port}/{database}
然后点击“测试连接”,连接成功后即表明可以正确添加该数据库。
数据集
有了底层数据库,还需要提取里面的数据。
对于本来就存在数据的数据库,可以在superset的“数据集”中进行添加选择,按照提示进行相关操作就行。
对于初次创建的数据库,里面是空的,没有任何的数据。此时可以通过上传csv文件进行添加,这样既在superset中添加了数据集,也在底层PostgreSQL数据库中添加了数据。
开启上传csv功能需要首先在数据库中进行设置,在superset的某个数据库的Extra/扩展选项卡中勾选“Allow Data Upload”/“允许数据上传”。
然后再在“数据”菜单中选择“上传CSV文件”。
额外福利:如果手头没有可玩的数据,可以通过下面三个链接获取一些示例数据(第三个时superset教程中的示例数据):
https://github.com/plotly/datasets
https://github.com/fivethirtyeight/data
https://github.com/apache-superset/examples-data
导入数据集后,可以对数据集的属性进行配置,比如哪一列是时间条件、是否可被过滤等。
需要注意的是superset对数据集加了一个语义层semantic layer,它存储了两种类型的计算数据:
(1)虚拟指标:对应Metrics这一标签页,可以编写不同列之间的聚合SQL查询,然后使得结果作为“列”来使用。这里可以使用并且鼓励使用SQL的聚合函数,如COUNT、SUM等;
(2)虚拟计算列:对应Calculated Columns这一标签页,可以对某一特定的列编写SQL语句来定制它的行为。在这里不能使用SQL的聚合函数。
可视化数据
Superset有两种探索数据的方式:
(1)Explore:零代码可视化编辑器,只需选择数据集,选定相应图表,配置一些外观属性,然后就可以创建可视化图表;只需点击相应的数据集,就可以进入Explore模式;Save Chart时可以选择添加到新看板或者某一个已存在的看板。
(2)SQL Lab:SQL工具箱,可以提供强大的SQL语言编辑功能,用于清洗、联合和准备数据,可以用于下一步的Explore流程。
superset的官方教程中给出了一个详细地Explore模式的使用教程,其使用的示例数据来自以下链接:
flights
强烈建议根据官方教程一步步走一遍,教程在这里。
这里列举一下自己跑教程时踩的一些坑:
(1)上传CSV文件时,一定要在“Parse Dates”解析日期那里手动填上“Travel Date”,否则如果不明确指定时间的话,在数据库里存的该项的数据类型是Text,无法进行后面的时间序列的计算。
(2)在添加“指标Metrics”时,保存的指标指的是“编辑数据集”时的“指标Metrics”那个选项卡的指标。
(3)配置“分组Group by”时,选择“Time”这一项,就会自动使用之前在Time那块定义的时间列、时间粒度等。
(4)添加“注释层annotation layer”那一块时,注意使用最新版的superset,已测试1.1版本会有bug,1.3版本已经修复该bug,见该PR。
(5)在Advanced Analystics一项中,有对时间序列数据的更强大的操作,比如求平均、时间平移、使用python函数重新采样等操作。
其他
superset开发团队基于开源的superset推出了SaaS云服务Preset,可以使得用户在无需安装任何软件的情况下直接使用superset。
Preset除了提供开箱即用的superset,其官网上的教程也比superset官网上的要详细很多,所以可以参考preset的文档来学习superset,如下:
https://docs.preset.io/