superset教程


本站和网页 http://blog.timd.cn/superset/ 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

superset教程
前言
为了刺激自己学习和使用superset的欲望,可以点击这里,先看下github上的效果图,同时,个人感觉SQL Lab也是一个特别赞的功能。
关于superset
官网:
http://airbnb.io/projects/superset/
文档:
http://airbnb.io/superset/
主要功能:
快速创建可交互的、直观形象的数据集合
有丰富的可视化方法来分析数据,且具有灵活的扩展能力
具有可扩展的、高粒度的安全模型,可以用复杂规则来控制访问权限。目前支持主要的认证提供商:DB、OpenID、LDAP、OAuth、和Flask AppBuiler的REMOTE_USER
使用简单的语法,就可以控制数据在UI中的展现方式
与Druid深度结合,可快速的分析大数据
配置缓存来快速加载仪表盘
下面从安装开始介绍superset。
安装Python
需要注意的是:superset是在Python2.7和Python3.4下测试的,Airbnb生产环境使用的Python版本是2.7.x,并且Airbnb不打算支持Python2.6。
Python的安装步骤,在这里就不做说明了,因为Centos7自带的Python已经是2.7.x版本了,所以无需额外安装。可以通过python -V查看Python的版本。
本文是在以下环境下测试的:
操作系统:CentOS Linux release 7.3.1611 (Core)
Python:2.7.5
numpy:1.7.0
pandas:1.19.2
superset:0.18.2
安装setuptools
curl https://bootstrap.pypa.io/ez_setup.py | sudo python -
安装完成之后,验证一下:
[vagrant@hadoop-slave-1 ~]$ easy_install --version
setuptools 33.1.1 from /usr/lib/python2.7/site-packages/setuptools-33.1.1-py2.7.egg (Python 2.7)
安装依赖的软件包
sudo yum install -y gcc-c++ python-devel libffi libffi-devel openssl openssl-devel cyrus-sasl-lib cyrus-sasl-devel cyrus-sasl gettext
安装flask
sudo easy_install flask
安装numpy 1.7.0
下载:
curl -o numpy-1.7.0.tar.gz https://pypi.python.org/packages/e7/b8/0eec6203c783047760db02f86791814c860397a7c79c444ddabc8a2f1c69/numpy-1.7.0.tar.gz#md5=4fa54e40b6a243416f0248123b6ec332
解压:
tar zxf numpy-1.7.0.tar.gz
安装:
cd numpy-1.7.0/
sudo python setup.py install
安装pandas 0.19.2
下载:
curl -o pandas-0.19.2.tar.gz https://pypi.python.org/packages/08/9d/31ec596099f14528fc6ad39428248ac5360f0bb5205a3ee79a5d1cf260fb/pandas-0.19.2.tar.gz#md5=26df3ef7cd5686fa284321f4f48b38cd
解压:
tar zxf pandas-0.19.2.tar.gz
安装:
cd pandas-0.19.2/
sudo python setup.py install
安装superset 0.18.2
下载
curl -o superset-0.18.2.tar.gz https://pypi.python.org/packages/56/53/83d8e2d6cd2c36d0318f82b7f611a07e534e7fb0afe3dd5424a57f114082/superset-0.18.2.tar.gz#md5=27ea370cc453a1937e9209778fc15ab0
解压:
tar zxf superset-0.18.2.tar.gz
安装:
cd superset-0.18.2/
sudo python setup.py install
至此,superset就安装完毕了,下面开始superset的入门教程。
superset入门教程
1,创建管理员账户
fabmanager create-admin --app superset
在输入用户名,姓名,邮箱,密码之后,fabmanager会在用户的主目录下创建.superset隐藏目录,并在该目录下创建一个sqlite3数据库。执行下面的命令可以看到上一步创建的用户被保存到了ab_user表中:
2,初始化数据库
superset db upgrade
3,加载一些测试数据
superset load_examples
4,创建默认的角色和权限
superset init
5,启动web服务器
superset runserver
web服务器的默认端口是8088,可以通过-p选项绑定其他的端口;也可以通过-d选项启动一个用于开发的服务器。
需要注意的是:
superset默认的应用服务器是gunicorn,但是gunicorn是无法在windows上工作的,所以在windows上只能使用用于开发的服务器。
启动web服务器之后,就可以使用浏览器访问superset了。
配置superset
可以通过创建一个叫做superset_config.py的模块,并将它放到PYTHONPATH下的方式,配置superset。下面是一个示例:
#---------------------------------------------------------
# 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:////path/to/superset.db'
# Flask-WTF flag for CSRF
CSRF_ENABLED = True
# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
在这个配置模块中,也可以定义被Flask App Builder(superset所使用的web框架)使用的参数,关于这部分配置,请查看这里。
其中有两个需要改变的参数:
SQLALCHEMY_DATABASE_URI
它的默认值是~/.superset/superset.db,该参数用来指定 保存superset元数据(比如slices、connections、tables、dashboards等)的数据库 的Sqlalchemy连接字符串(要搜索的数据源的连接信息是由web UI直接管理的)
SECRET_KEY
它是一个很长的随机字符串
数据库依赖
默认情况下,superset是把元数据保存到sqlite中的,所以除了sqlite之外,superset不依赖任何数据库。如果想要把superset元数据保存到其它的数据中,那么需要安装相应的驱动以及给SQLALCHEMY_DATABASE_URI参数指定一个正确的值。下面是一些推荐使用的数据库、数据库驱动以及对应的SQLAlchemy URI前缀:
缓存
superset使用Flask-Cache来缓存数据。在superset_config.py中,可以通过CACHE_CONFIG参数配置缓存所使用的后端。
Flask-Cache支持多种缓存后端,比如Redis、Memcached、SimpleCache(in-memory)、local filesystem。以redis为例,首先应该安装Python的redis驱动:
sudo easy_install redis
然后在superset_config.py中增加如下的配置:
CACHE_CONFIG = {
"CACHE_TYPE": "redis",
"CACHE_REDIS_URL": "redis://[redis:]@:/",
"CACHE_KEY_PREFIX": "A CACHE_KEY_PREFIX"
与SQLAlchemy的深度集成
在superset中可以通过SQLAchemy暴漏的参数调整数据库连接信息,在Database编辑页面,可以看到一个Extra域(值是一个Json串):
在这个Json串中可以包含额外的配置选项。其中engine_params所指定的参数会传递给sqlalchemy.create_engine调用;metadata_params所指定的参数会传递给sqlalchemy.MetaData调用。更多详细信息,可以阅读SQLAlchemy的文档。
中间件
superset允许自定义中间件,方法是:
编写自己的WSGI中间件
在superset_config.py中增加ADDITIONAL_MIDDLEWARE参数,该参数的值是一个 中间件类 的列表
比如:
# superset_config.py
# other configuration...
class TestMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
print("test middleware")
return self.app(environ, start_response)
ADDITIONAL_MIDDLEWARE = [TestMiddleware]
升级superset
sudo easy_install --upgrade superset
superset db upgrade
superset init
SQL Lab
SQL Lab是一个非常强大的SQL IDE,它可以和所有与SQLAlchemy兼容的数据库一起使用。默认情况下,查询是在web请求的作用域中执行的,因此当web请求超时的时候,查询也会超时。
为了支持运行时间超过web请求的超时时间的查询,superset支持异步查询,配置异步查询的方式如下:
在创建数据源的时候,勾选Allow Run Async域
在superset_config.py模块中,通过CELERY_CONFIG配置celery的broker和result backend,注意:worker和web服务进程应该使用相同的配置
通过superset worker命令,启动一个或多个superset worker(本质上就是celery worker)
为了设置result backend,应该在superset_config.py配置模块中给RESULTS_BACKEND键指定为werkzeug.contrib.cache.BaseCache的一个派生类实例。可以使用自带的Redis、Memcache、S3、内存、文件系统cache实现,也可以自己编写cache实现
# superset_config.py
# other configurations ...
class CeleryConfig(object):
BROKER_URL = 'redis://localhost:6379/0'
CELERY_IMPORTS = ('superset.sql_lab', )
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_CONFIG = CeleryConfig
from werkzeug.contrib.cache import RedisCache
RESULTS_BACKEND = RedisCache(
host='192.168.30.2', port=6379, db=3,
key_prefix="superset_results:")
```
SQL Lab在查询的时候,也支持Jinja模版,可以通过superset配置文件中的`JINJA_CONTEXT_ADDONS`参数配置默认的Jinja上下文。比如:
```
JINJA_CONTEXT_ADDONS = {
'my_crazy_macro': lambda x: x*2,
连接到新的数据库
登陆之后点击:
然后点击“+”,进入到Database view页面:
在database view页面,填写数据库的名字以及SQLAlchemy连接字符串,想要了解更多关于SQLAlchemy连接字符串,请点击这个链接:
然后点击“Test Connection”,如果运行superset服务的实例能够连接到数据库,会弹出类似下面的提示信息:
同时要注意以下几项:
执行“Test Connection”之后,在页面的底部会列出该数据库中都有哪些表
如果想要在SQL Lab中显示这个数据库,那么应该勾选:Expose In SQL Lab
保存之后,在SQL Lab中就可以看到这个数据库了:
如果允许用户异步地执行SQL查询,那么应该勾选“Allow Run Async”
最后点击“Save”按钮,这个数据库就建立完成了。
添加一个新的表
首先,在上一步添加的数据库中,创建一张新表:
CREATE TABLE `grade_test` (
`course_id` int(10) unsigned NOT NULL,
`student_id` int(10) unsigned NOT NULL,
`grade` int(10) unsigned NOT NULL DEFAULT '0',
`last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`course_name` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
然后,插入一些测试数据:
insert into grade_test(course_id, student_id, grade, course_name) values(1,1,80,"english"),(1,2,85,"english"),(2,1,90,"math"),(2,2,70,"math"),(1,3,99,"english"),(2,3,88,"math");
接下来开始添加新的表:
保存之后,重定向到的页面顶部会有一条提示信息:
然后进入到“Table Model View”页面,点击新添加的表的表名前面的“Edit record”:
在结果页面上,点击“List Table Column”标签:
接下来,就可以定义对表中指定的列的使用方式了:
如果想要使用某个列进行分组,那么将该列标记为Groupable
如果想要使用某个列进行过滤,那么将该列标记为Filterable
如果想要在某列上进行count distinct,那么将该列标记为Count Distinct
如果想要对某列进行求和,或者进行简单的统计,那么将该列标记为Sum、Min、Max
任何时间或日期类型的列,都应该被标记为temporal
搜索数据
首先,进入到“Table Model View”:
然后点击表名:
默认情况下,展现的是Table View,并且默认的查询是获取表中的所有的记录数:
接下来看“Time”区:
Time Column:用来指定一个temporal类型的列
Time Grain:用来指定时间的粒度
Since过滤器:用来指定时间的下限(含)
Util过滤器:用来指定时间的上限(含)
“Time”区的下面是“Group By”区:
Group By:用来指定按照那些列进行分组
Metrics:用来指定对哪些列进行何种统计(比如对某列求平均值)
比如,想要求每个学生的平均成绩和成绩总和:
然后点击,左上角的Query,就可以在右侧看到结果了:
下面看一些其它有趣的功能:
Filters:
点击页面右上角的Query按钮:
Filters其实是以AND的方式加到where语句的条件中了
Options:
Row Limit:为SQL的limit子句指定一个值
Page Length:指定每页多少条记录
Superset支持很多表格类型,具体可以看官网提供的“画廊”。
创建slice和dashboard
一个被保存的查询叫做slice。点解Query按钮右侧的Save as按钮就可以创建一个slice:
点击Save as,在Save as窗口填写slice的名字,同时也可以将slice添加到一个新创建的dashboard中,或已经已经存在的dashboard中,当然也可以不添加到任何dashboard中(所以说,一个dashboard可以一起展示0个或多个slice):
接下来,我们就可以在slice和dashboard中分别看到刚才新建的slice和dashboard:
进入到刚才新建的dashboard,可以通过拖拽表格的右下角,放大和缩小表格:
还可以通过右上角的 Move Chart来移动表格:
修改dashboard之后,需要点击保存按钮进行保存:
画出更漂亮的表格
在 superset入门教程 小节中,已经介绍过,可以通过superset load_examples命令导入一些测试数据,其中包含若干slice和dashboard,因此可以通过研究这些slice,来学习画出比Table View更“漂亮”的表格。
遇到的问题
superset 0.18.2依赖pandas 0.19.2,pandas依赖numpy,但是当numpy版本高于1.7.0的时候,运行superset会报错,所以本文是先安装numpy 1.7.0,然后安装的pandas 0.19.2 和 superset 0.18.2,这点可能和其他的教程有所不同。
待解决的事项
用户的权限控制
与Apache kylin集成