侧边栏壁纸
博主头像
王一川博主等级

努力成为一个不会前端的全栈工程师

  • 累计撰写 70 篇文章
  • 累计创建 20 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Superset

王一川
2021-09-02 / 0 评论 / 0 点赞 / 2,869 阅读 / 4,327 字
温馨提示:
本文最后更新于 2022-06-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
Apache Superset 是一个现代的数据探索和可视化平台(BI工具)。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。

一、安装 Superset

首先,Superset 是由 Python 编写的 Web 应用,其环境要求为 Python 3.7,本次教程使用的环境为 MacOS 11.5.2,为了不影响本机已存在的 Python 环境,使用 Conda 来构建环境;Conda 是一个开源的包、环境管理器,可以用于在同一个机器上安装不同 Python 版本的 软件包及其依赖,并能够在不同的 Python 环境之间切换,Anaconda 包括 Conda、Python 以及一大堆安装好的工具包,比如:numpy、pandas 等,Miniconda 包括 Conda、Python;此处,我们不需要如此多的工具包,故选择 MiniConda。

安装 MiniConda

建议使用 brew 下载,Linux 环境地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

brew install miniconda

安装完成后会在当前 shell 环境的环境变量中添加一些配置,source 或者重新打开 session 会自动激活 Conda 默认的 base 环境,通

过下面命令禁止激活

conda config --set auto_activate_base false

来个图,不然都不知道到哪一步了

创建 Python 环境

进入 base 环境

conda activate base

退出当前环境

conda deactivate

首先配置 conda 国内镜像,要在 base 环境中执行

(base) -> conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free

(base) -> conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

创建指定版本的 Python 环境

(base) -> conda create --name superset python=3.7

安装 Superset

进入 superset 环境

conda activate superset

安装 superset

(superset) -> pip install apache-superset -i https://pypi.douban.com/simple/

初始化 Superset 数据库,默认是 sqlit 数据库

(superset) -> superset db upgrade
(superset) -> export FLASK_APP=superset
(superset) -> superset fab create-admin

这里会要求输入管理员的账号和密码,用于后续登录 Web 页面

初始化 Superset,这个命令会重置自带 Role 的权限,但不建议通过此命令来重置 Role 权限问题

(superset) -> superset init

启动 Superset

Superset 本身是一个 Web 应用,因此需要一个容器,类似 Java 中的 Tomcat,即:使用 gunicorn

安装 gunicon

(superset) -> pip install gunicorn -i https://pypi.douban.com/simple/

启动 Superset

(superset) -> gunicorn --workers 5 --timeout 120 --bind localhost:8787 "superset.app:create_app()" --daemon
  • --workers:执行进程数
  • --timeout:进程超时时间,超时会重启
  • --bind:绑定本机地址
  • --daemon:后台运行

停止 Superset

没有专门的停止命令,使用 kill 杀掉进程

ps -ef | awk '/superset/ && !/awk/{print $2}' | xargs kill -9

构建启动停止脚本

#!/bin/bash
superset_status(){
result=$(ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l)
if [ $result -eq 0 ]
then
  return 0
else
  return 1
fi
}

superset_start(){
# 加载当前 shell 的环境变量
source ~/.bash_profile
superset_status >/dev/null 2>&1
if [ $? -eq 0 ]
then
  conda activate superset;
  gunicorn --workers 5 --timeout 120 --bind localhost:8787 'superset.app:create_app()' --daemon
else
  echo "superset 正在运行"
fi
}

superset_stop(){
superset_status >/dev/null 2>&1
if [ $? -eq 0 ] 
then
  echo "superset 未在运行"
else
  ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9
fi
}
case $1 in
start )
  echo "启动 Superset"
  superset_start
;;
stop )
  echo "停止 Superset"
  superset_stop
;;
restart )
  echo "重启 Superset"
  superset_stop
  superset_start
;;
status )
superset_status >/dev/null 2>&1
if [ $? -eq 0 ]
then
  echo "superset 未在运行"
else
  echo "superset 正在运行"
fi
esac

二、创建图表

2.1 准备数据

创建数据库

create database superset;

执行 sql 文件,导入数据即可

use superset;
show tables;

# # # # # # # # # # # # #
# ads_order_by_province #
# ads_order_spu_stats   #
# ads_order_total       #
# ads_user_total        #
# # # # # # # # # # # # #

2.2 创建数据库连接

Superset 默认只提供 sqllit 连接驱动,更多驱动见官网:https://superset.apache.org/docs/databases/installing-database-drivers

安装 mysql 连接驱动

(superset) -> conda install mysqlclient

注:官网使用 pip 下载,这里建议使用 conda,可以最大可能减少版本不兼容问题

重启 Superset 服务后登录后台页面,这时候数据源连接会多一个 mysql

依次输入主机、ip、用户名、密码,注意 ADDITIONAL PARAMETERS 一定要填 charset=utf8,不然后续无法给指标中文命名,血的教训~~

2.3 创建数据集

所有的图表都是基于数据集

或者通过 SQL Lab -> SQL Editor 来根据具体需求写 SQL 并点击 SAVE AS 保存数据

2.4 创建折线图

图表必须放在仪表盘中,因此先创建一个空白的仪表盘,重命名后保存

点击 Charts -> + Chart,选择数据集和表样式即可,这里数据集选择 ads_order_total,图表选择 Line Chart 做一个每日新增用户


下面介绍 Chart 里面各个模块

Time 模块,这里选定数据集具有时间语义的字段作为横轴,TIME GRAIN为时间间隔,这里可以选择秒、分、时等等,其底层会根据选择的时间间隔,选择数据库中对应的时间处理函数来处理该字段,即:Mysql 中选择天,那么这个字段最终在 sql 中为:Day(dt),以此类内推,同时根据 Day(dt) 来对下面的指标进行分组。若没有聚合含义的图表,该模块也可以作为过滤使用,即通过 TIME RANGE 控制。

Query 模块,根据 Time 选择的字段进行分组聚合

点击 RUN 即可看到最终的报表了,点击保存绑定到实现创建好的仪表盘中,不要忘记给 Chart 也取一个好看的名字

2.5 创建柱状图

数据集选择 ads_order_spu_stats,图表选择 Bar Chart,各模块都是相似的,METRICS 指标选择待聚合数据这里选择 order_count,SERIES 作为柱状图的横轴,也是指标聚合的分组依据这里选择 tm_name,直接上图:

2.6 创建饼图

和柱状图一样,有手就行,直接上图:

2.7 创建地图

作为一个 BI 工具,不能做地图那也太 low 了,但是 Superset 的地图坐标不是基于经纬度,而是根据 ISO 3166-2 规范来定位,因此数据集必须要有该字段,对应 ads_order_by_provice.iso_code,与折线图仅 Query 模块有区别

直接看图,不需要解释什么,RUN、起名字、保存、绑定一气呵成

唯一的缺点是省份是拼音,想要改成中文需要修改 Superset 静态文件,路径给你,至于是哪个文件自己慢慢找/opt/homebrew/Caskroom/miniconda/base/envs/superset/lib/python3.7/site-packages/superset/static/assets/

三、创建仪表盘

上述的图表绑定到仪表盘后,便可以显示出来,这里主要介绍仪表盘的排版功能;主要是拖入 ROW(行)、Column(列)来事先进行一个栅格化操作,即提前划定好范围,最后将对应的图表拖入画好的区域即可,可以将鼠标移至边缘拖动可以显示栅格界面进行调整

3.1 自动刷新

作为一个大屏展示,当后台数据发生变化时,大屏要在最短时间更新数据,Superset 也可以针对此设置刷新间隔,默认不刷新,可设置 10s、30s、1min、5min、30min、1h、6h、12h、24h

个人觉得这点设计的不太好,时间间隔固定不可变无法满足复杂的业务场景

最后记得将 Draft 点成 Published 就完成了,最终效果

真丑...但是不得不说,我又糊弄出一片博客

0

评论区