superset使用一

1、使用的python3.6,然後配置mysql數據庫,報錯

No module named ‘MySQLdb'

MySQLdb只支持Python2.*,還不支持3.*
可以用PyMySQL代替。安裝方法:pip3 install PyMySQL

需要在下面的
 cd /usr/local/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/
然後把 __init__.py中添加兩行:
import pymysql
pymysql.install_as_MySQLdb()
就可以用 import MySQLdb了。其他的方法與MySQLdb一樣。

然後重啓後就可以連接mysql了

 

示例使用教程,根據下面示例跑一邊,基本可以操作可以完成。

轉自

前言

爲了刺激自己學習和使用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表中:

superset-db.jpg

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-meta-database.jpg


緩存

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串):

superset-sqlalchemy.png

在這個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

allow-run-async.jpg

  • 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,
}

sqllab-result-page.png


連接到新的數據庫

登陸之後點擊:

superset-example-1.jpg

然後點擊“+”,進入到Database view頁面:

superset-example-2.jpg

在database view頁面,填寫數據庫的名字以及SQLAlchemy連接字符串,想要了解更多關於SQLAlchemy連接字符串,請點擊這個鏈接

superset-example-3.jpg

然後點擊“Test Connection”,如果運行superset服務的實例能夠連接到數據庫,會彈出類似下面的提示信息:

superset-example-4.jpg

同時要注意以下幾項:

  • 執行“Test Connection”之後,在頁面的底部會列出該數據庫中都有哪些表

superset-example-5.jpg

  • 如果想要在SQL Lab中顯示這個數據庫,那麼應該勾選:Expose In SQL Lab

superset-example-6.jpg

保存之後,在SQL Lab中就可以看到這個數據庫了:

superset-example-7.jpg

  • 如果允許用戶異步地執行SQL查詢,那麼應該勾選“Allow Run Async”

superset-example-8.jpg

最後點擊“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");

接下來開始添加新的表:

superset-example-9.jpg superset-example-10.jpgsuperset-example-11.jpg

保存之後,重定向到的頁面頂部會有一條提示信息:

superset-example-12.jpg

然後進入到“Table Model View”頁面,點擊新添加的表的表名前面的“Edit record”:

superset-example-13.jpg

在結果頁面上,點擊“List Table Column”標籤:

superset-example-14.jpg

接下來,就可以定義對錶中指定的列的使用方式了:

  • 如果想要使用某個列進行分組,那麼將該列標記爲Groupable
  • 如果想要使用某個列進行過濾,那麼將該列標記爲Filterable
  • 如果想要在某列上進行count distinct,那麼將該列標記爲Count Distinct
  • 如果想要對某列進行求和,或者進行簡單的統計,那麼將該列標記爲SumMinMax
  • 任何時間或日期類型的列,都應該被標記爲temporal

搜索數據

首先,進入到“Table Model View”:

superset-example-15.jpg

然後點擊表名:

superset-example-16.jpg

默認情況下,展現的是Table View,並且默認的查詢是獲取表中的所有的記錄數:

superset-example-17.jpg

接下來看“Time”區:

superset-example-18.jpg

  • Time Column:用來指定一個temporal類型的列
  • Time Grain:用來指定時間的粒度
  • Since過濾器:用來指定時間的下限(含)
  • Util過濾器:用來指定時間的上限(含)

“Time”區的下面是“Group By”區:

superset-example-19.jpg

  • Group By:用來指定按照那些列進行分組
  • Metrics:用來指定對哪些列進行何種統計(比如對某列求平均值)

比如,想要求每個學生的平均成績和成績總和:

superset-example-20.jpg

然後點擊,左上角的Query,就可以在右側看到結果了:

superset-example-21.jpgsuperset-example-22.jpg

下面看一些其它有趣的功能:

  • Filters:

superset-example-23.jpg

點擊頁面右上角的Query按鈕:

superset-example-24.jpg

Filters其實是以AND的方式加到where語句的條件中了

  • Options:

superset-example-25.jpg

  • Row Limit:爲SQL的limit子句指定一個值
  • Page Length:指定每頁多少條記錄

Superset支持很多表格類型,具體可以看官網提供的“畫廊”


創建slice和dashboard

一個被保存的查詢叫做slice。點解Query按鈕右側的Save as按鈕就可以創建一個slice:

superset-example-27.jpg

點擊Save as,在Save as窗口填寫slice的名字,同時也可以將slice添加到一個新創建的dashboard中,或已經已經存在的dashboard中,當然也可以不添加到任何dashboard中(所以說,一個dashboard可以一起展示0個或多個slice):

superset-example-28.jpg

接下來,我們就可以在slice和dashboard中分別看到剛纔新建的slice和dashboard:

superset-example-29.jpg

進入到剛纔新建的dashboard,可以通過拖拽表格的右下角,放大和縮小表格:

superset-example-30.jpg

還可以通過右上角的 Move Chart來移動表格:

superset-example-31.jpg

修改dashboard之後,需要點擊保存按鈕進行保存:

superset-example-32.jpg


畫出更漂亮的表格

在 superset入門教程 小節中,已經介紹過,可以通過superset load_examples命令導入一些測試數據,其中包含若干slice和dashboard,因此可以通過研究這些slice,來學習畫出比Table View更“漂亮”的表格。


遇到的問題

  1. 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集成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章