巧用Superset大資料分析平臺搞定各類圖表

邵磊發表於2017-07-13

前言

其實大資料圖表展示的這類平臺有很多,Superset是其中之一,最近有個需求對各類圖表展示的開發較多,索性將工作量交給這個平臺。

介紹

Superset的中文翻譯是快船,而Superset其實是一個自助式資料分析工具,它的主要目標是簡化我們的資料探索分析操作,它的強大之處在於整個過程一氣呵成,幾乎不用片刻的等待。

部署

docker方式(推薦)

docker pull amancevice/caravel
docker run --name caravel -d -p 8088:8088 amancevice/caravel
docker exec -it caravel demo
#系統會提示設定管理員複製程式碼

具體效果如下

[root@localhost ~]# docker exec -it ac94ec4d9469 demo
Username [admin]: admin
User first name [admin]: admin
User last name [user]: a
Email [admin@fab.org]: a
Password: 
Repeat for confirmation:
******此處省略幾百行複製程式碼

centos系統

yum makecache
sudo easy_install -i http://pypi.douban.com/simple/ pip
sudo easy_install pip
sudo yum install gcc libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel複製程式碼
#安裝Superset 
pip install superset 

#建立管理員使用者名稱和密碼 
fabmanager create-admin --app superset 

#初始化Superset 
superset db upgrade 

#裝載初始化樣例資料 
superset load_examples 

#建立預設角色和許可權 
superset init 

#啟動Superset 
superset runserver複製程式碼

資料庫依賴

資料庫 命令 連結方式
MySQL pip install mysqlclient mysql://
Postgres pip install psycopg2 postgresql+psycopg2://
Presto pip install pyhive presto://
Oracle pip install cx_Oracle oracle://
sqlite sqlite://
Redshift pip install sqlalchemy-redshift redshift+psycopg2://
MSSQL pip install pymssql mssql://
Impala pip install impyla impala://
SparkSQL pip install pyhive jdbc+hive://

改造(docker環境)

因為預設是有許可權控制的,即使分享出去的圖表也需要登入使用者才能看到,那如何做到不登陸使用者也能檢視圖表呢,於是改造之路就開始了。

方法一:改原始碼

剛開始沒找到方法,不得不從從原始碼入手解開許可權,
github.com/apache/incu…
/superset/views/core.py檔案922行刪掉 @has_access_api註解

@log_this
    @has_access_api
    @expose("/explore_json/<datasource_type>/<datasource_id>/")
    def explore_json(self, datasource_type, datasource_id):
        try:
            viz_obj = self.get_viz(
                datasource_type=datasource_type,複製程式碼

1006行刪掉 @has_access_api註解

 @log_this
    @has_access
    @expose("/explore/<datasource_type>/<datasource_id>/")
    def explore(self, datasource_type, datasource_id):
        form_data = self.get_form_data()複製程式碼

在1017行加入

viz_obj.datasource.("all_datasource_access")複製程式碼

增加庫的訪問許可權,可能還有些地方要改,該方法改了原始碼,侵入性強,不推薦。

方法二:改配置(推薦)

/superset/config.py第127行

# ---------------------------------------------------
# Roles config
# ---------------------------------------------------
# Grant public role the same set of permissions as for the GAMMA role.
# This is useful if one wants to enable anonymous users to view
# dashboards. Explicit grant on specific datasets is still required.
PUBLIC_ROLE_LIKE_GAMMA = False複製程式碼

PUBLIC_ROLE_LIKE_GAMMA改為True,
註釋意思
授予公共角色與GAMMA角色相同的許可權集。
如果想讓匿名使用者檢視,可以設定這裡
在儀表盤對特定資料集的授權顯示,也在這裡設定。

加入資料庫許可權這裡加入所有資料庫許可權

Public    [can explore on Superset, all database access on all_database_access, can explore json on Superset]複製程式碼

其中
can explore on Superset為匯出圖表
can explore json on Superset為匯出圖表json
all database access on all_database_access訪問所有資料庫許可權,也可以設定單個

iframe嵌入


選擇某個切片,點右上角</>,複製出iframe

<iframe
  width="600"
  height="400"
  seamless
  frameBorder="0"
  scrolling="no"
  src="http://10.10.100.18:32771/superset/explore/table/2/?form_data=%7B%22datasource%22%3A%222__table%22%2C%22viz_type%22%3A%22bubble%22%2C%22slice_id%22%3A9%2C%22granularity_sqla%22%3A%22year%22%2C%22time_grain_sqla%22%3A%22Time+Column%22%2C%22since%22%3A%222011-01-01%22%2C%22until%22%3A%222011-01-02%22%2C%22series%22%3A%22region%22%2C%22entity%22%3A%22country_name%22%2C%22size%22%3A%22sum__SP_POP_TOTL%22%2C%22limit%22%3A0%2C%22show_legend%22%3Atrue%2C%22max_bubble_size%22%3A%2250%22%2C%22x%22%3A%22sum__SP_RUR_TOTL_ZS%22%2C%22x_axis_format%22%3A%22.3s%22%2C%22x_axis_label%22%3A%22%22%2C%22x_log_scale%22%3Afalse%2C%22y%22%3A%22sum__SP_DYN_LE00_IN%22%2C%22y_axis_format%22%3A%22.3s%22%2C%22y_axis_label%22%3A%22%22%2C%22y_log_scale%22%3Afalse%2C%22where%22%3A%22%22%2C%22having%22%3A%22%22%2C%22filters%22%3A%5B%7B%22col%22%3A%22country_code%22%2C%22op%22%3A%22not+in%22%2C%22val%22%3A%5B%22TCA%22%2C%22MNP%22%2C%22DMA%22%2C%22MHL%22%2C%22MCO%22%2C%22SXM%22%2C%22CYM%22%2C%22TUV%22%2C%22IMY%22%2C%22KNA%22%2C%22ASM%22%2C%22ADO%22%2C%22AMA%22%2C%22PLW%22%5D%7D%5D%7D&standalone=true&height=400"
>
</iframe>複製程式碼

將iframe放入任意html內即可開啟。

更多樣式


總結

藉助superset可以幫助我們視覺化進行資料庫分析,支援匯出匯入sql語句,支援各種資料庫,在圖表展現方面是個不錯的框架。

相關文章