輕量級BI工具Superset的搭建與使用


講演用的ppt

系統環境:Windows 10
Python:3.6.6
Superset:0.27.0

 
 

0 Superset 簡介

  Superset 是一款由 Airbnb 開源的“現代化的企業級 BI(商業智能) Web 應用程序”,其通過創建和分享 dashboard,為數據分析提供了輕量級的數據查詢和可視化方案。
  Superset 的前端主要用到了 ReactNVD3/D3,而后端則基於 Python 的 Flask 框架和 PandasSQLAlchemy 等依賴庫,主要提供了這幾方面的功能:

  • 集成數據查詢功能,支持多種數據庫,包括 MySQL、PostgresSQL、Oracle、SQL Server、SQLite、SparkSQL 等,並深度支持 Druid
  • 通過 NVD3/D3 預定義了多種可視化圖表,滿足大部分的數據展示功能。如果還有其他需求,也可以自開發更多的圖表類型,或者嵌入其他的 JavaScript 圖表庫(如 HighCharts、ECharts)。
  • 提供細粒度安全模型,可以在功能層面和數據層面進行訪問控制。支持多種鑒權方式(如數據庫、OpenID、LDAP、OAuth、REMOTE_USER 等)。

  Superset 的搭建與使用非常簡單,只需要一些 Python 基礎,下面先從創建虛擬環境開始。

1 創建虛擬環境

  Superset 的依賴包較多,為了避免沖突,需要先搭建虛擬環境,再進行安裝,這里推薦使用 Anaconda 自帶的 conda 工具創建虛擬環境:

conda create -n superset python=3.6 

  創建虛擬環境成功后,啟動虛擬環境:

activate superset

2 安裝

  使用豆瓣源安裝 Superset:

pip install superset -i https://pypi.douban.com/simple 

  這里遇到了一個坑,某個依賴包沒有被正確的安裝,當時隨手就解決了,沒有記錄下來。只大概記得報錯信息提到 Microsoft Visual C++ 14.0 is required ,這是因為該依賴包需要安裝 C++ 進行編譯。
  一般不用為此專門安裝 Microsoft Visual C++ 14.0,而是去下載該依賴包的 whl 格式文件(需要對應虛擬環境的 python 版本),再進入 whl 文件所在的路徑通過 pip install 安裝即可。如果在安裝過程中遇到其他問題,就把報錯信息復制出來,然后去問問神奇的 stackoverflow 吧!

3 初始化

  初始化的官方步驟如下:

# 創建管理員賬號 fabmanager create-admin --app superset # 初始化數據庫 superset db upgrade # 載入案例數據 superset load_examples # 初始化角色和權限 superset init # 啟動服務,端口號 8088,使用 -p 更改端口號 superset runserver 

  但在命令行中直接運行 superset, 會提示“不是內部或外部命令”。要解決這個問題,可以直接通過 cd 命令進入 Superset 安裝目錄( ...\Anaconda3\envs\superset\Lib\site-packages\superset\bin )。然后運行如下命令:

python superset db upgrade
python superset load_examples
python superset init
python superset runserver

  這里直接運行 python superset runserver 會出錯,原因是 Superset 使用 gunicorn 作為應用程序服務器,而 gunicorn 不支持 Windows。需要在命令行中添加 -d,使用 development web server 運行。最終運行命令為:

python superset runserver -d 

  但是這種部署方式,官方並不建議在生產環境中使用。在 Superset 的 issues 922,有人提供了一種方法,使用 waitress。首先安裝 waitress:

pip install waitress

  接着找到 superset/cil.py 的 debug_run() 函數:

def debug_run(app, port, use_reloader): app.run( host='0.0.0.0', port=int(port), threaded=True, debug=True, use_reloader=use_reloader) 

  將其改寫成:

def debug_run(app, port): from waitress import serve #使用 waitress 解決 gunicorn 不支持 windows 問題 return serve( app, host='0.0.0.0', port=int(port)) 

  再次運行 Superset:

python superset runserver -d -p 8079 

  最后在瀏覽器輸入 http://localhost:8079 進入登錄界面:

 
 

  輸入在 fabmanager create-admin --app superset 這步設置的賬號和密碼登錄,進入 Superset 首頁(右上角國旗處可設置語言):

 
 

  這里 Superset 已經用之前加載的示例數據,建立了 4 個 dashboard,選擇其中一個進行查看(即本文開始的那個 dashboard):

 
 

4 數據源

  接下來,將演示如何連接數據庫,以及怎樣使用表和導入 CSV 到數據庫。Superset 還深度支持 Druid(一個高效的海量數據查詢系統),但這里不做介紹。

4.1 連接到數據庫

  從頂部導航菜單的 Source — Databases 進入數據庫列表頁:

 
 

  點擊在數據庫列表右上角的綠色加號按鈕:

 
 

  點擊按鈕后,將進入添加數據庫的表單頁,因為這只是一次簡單的演示,只需要填寫兩項:Database 和 SQLAlchemy URL,分別是數據庫名稱和 SQLAlchemy 的連接 URI (參閱為目標數據庫創建連接 URI 的 SQLAlchemy 文檔)。

 
 

這里為了方便,用的是本地的 SQLite 數據庫。也可以使用其他數據庫,如官方文檔推薦的 PostgreSQL 的一些示例數據集或官方文檔使用的示例天氣數據

  接着點擊 Test Connection 按鈕,測試是否能成功連接到數據庫。若成功連接,則會看到下圖的彈出框:

 
 

  當連接測試成功后,可在頁面底部看到該數據庫下的數據表,點擊 Save 按鈕,完成創建。

 
 

4.2 創建表

  現在已經配置了數據庫,接下來需要向 Superset 添加想要查詢的特定表。從 Sources — Tables 進入到數據表列表頁:

 
 

  點擊列表頁右上角的綠色加號按鈕:

 
 

  點擊按鈕后,將進入添加數據表的表單頁,在該頁面依次填寫目標數據庫、數據表名稱、數據庫模式(可選),再點擊 Save 按鈕,即可完成創建。

 
 

  創建完成后,將重定向回到列表頁,此時在頁面頂部會出現一條消息提示指示表已創建:

 
 

  在列表頁還可以對已添加的數據表進行編輯:

 
 

  點擊編輯圖標,可進入表的編輯頁,對表的詳細信息、字段、指標進行配置,這里演示對表字段的配置(設置是否可對指定字段進行分組或過濾):

 
 

4.3 上傳 CSV

  Superset 還可以導入 CSV 到數據庫中,從 Sources — Upload a CSV 進入到導入 CSV 的表單頁:

 
 

  依次填寫表名稱、導入 CSV 文件、選擇要導入的數據庫,再點擊 Save 按鈕完成導入:

 
 

  創導入完成后,將重定向回到數據表列表頁,此時在頁面頂部會出現一條消息提示指示表已創建:

 
 

5 創建 dashboard

5.1 探索數據

  要開始探索數據,只需在可用數據表列表中點擊剛剛創建的表名:

 
 

  點擊表名后進入表的可視化頁面,默認的可視化類型為表視圖:

 
 

  在 Datasouce & Chart Type 下方,依次可以進行時間、Group By、Not Group By 以及字段過濾等設置:

 
 

  在頁面左側完成相關設置后,點擊 Run Query 按鈕,即可在右側的可視化視圖,查看數據的可視化展示:

 
 

5.2 創建圖表

  通過更改可視化類型和其他設置,可以很靈活地對數據進行探索性分析。若在探索的過程中發現某個有價值的點,可以點擊左上角的 Save 按鈕,在出現的彈出框中命名圖表並選擇是否將其添加到 dashboard,以將其保存為圖表:

 
 

  從頂部導航菜單的 Charts 進入到圖表的列表頁,找到剛剛創建的圖表:

 
 

  點擊圖表名稱進入到剛才的可視化頁面,對已保存的圖表進行再次編輯。

5.3 創建 dashboard

  從頂部導航菜單的 Dashboards 進入到 dashboard 的列表頁,點擊右上角的綠色加號按鈕:

 
 

  點擊按鈕后,將進入添加 dashboard 的表單頁,在該頁面依次填寫 dashboard 名稱和擁有者,再點擊 Save 按鈕,即可完成創建:

 
 

5.4 編輯 dashboard

  完成 dashboard 的創建后,將重定向到 dashboard 的列表頁,找到剛創建的 dashboard:

 
 

  點擊 dashboard 的名稱,進入 dashboard,此時 dashboard 還未配置任何圖表,處於空值狀態,點擊右上角的 Edit dashboard 按鈕進行編輯:

 
 

  進入編輯狀態后,可已導入圖表(僅限 dashboard 擁有者擁有的圖表)、標簽頁、行、列、標題、Markdown 和分割線等組件:

 
 

  並可通過拖拽編輯 dashboard 的布局(在拖拽過程中,Superset 還提供了輔助線和柵格進行提示):

 
 

  Superset 還可以通過編輯 CSS 修改 dashboard 的樣式:

 
 

  在進行編輯之后,點擊 Save changes 按鈕,即可完成操作。

6 SQL 查詢

  在使用 SQL 查詢前,需要進行兩項設置:
  首先,從頂部導航菜單的 Sources — Databases 進入數據庫的列表頁,選中數據庫進行編輯,將 Expose in SQL Lab 和 Allow Run Sync 都勾選上,其余的不要勾選。

 
 

  在勾選完上述兩項之后,Windows 用戶還會出現 “module" object has no attribute 'SIGALRM' 錯誤,這又是由於 Windows 環境下依賴包不兼容導致的 —— Python 的 signal 包只作用於 Linux 和 Mac ,在 Windows 下不啟作用。解決方法很簡單粗暴,在 superset/utils.py 下找到相關代碼,把 signal 所在行都注釋,然后再加上一個 pass這塊代碼的功能是在超時后將查詢進程殺掉,注釋后沒大影響)。

    def __enter__(self): try: pass #signal.signal(signal.SIGALRM, self.handle_timeout) #signal.alarm(self.seconds) except ValueError as e: logging.warning("timeout can't be used in the current context") logging.exception(e) def __exit__(self, type, value, traceback): try: pass #signal.alarm(0) except ValueError as e: logging.warning("timeout can't be used in the current context") logging.exception(e) 

  上面兩步做完后,即可在 SQL Lab — SQL Editor 進行 SQL 查詢操作:

 
 

  可對查詢語句進行執行、保存、分享(復制)操作,還可以對查詢結果可以進行可視化和導出為 CSV 文件。

 
 

7 安全性

  Superset 中的安全性由 Flask AppBuilder(FAB)處理(一個“簡單快速的應用程序開發框架,構建在Flask之上”)。FAB 提供身份驗證、用戶管理、權限和角色,可參閱其安全文檔。角色由一組權限組成,不同的用戶角色被賦予了不同的權限,Superset 本身提供了一組基本角色:

  • Admin:擁有所有可能的權限,包括從其他用戶授予或撤消權限以及更改其他人的切片和 dashboard。
  • Alpha:可以訪問所有數據源,但不能授予或撤消其他用戶的訪問權限。它們也僅限於改變它們擁有的對象。可以添加和更改數據源。
  • Gamma:訪問受限,只能使用通過另一個互補角色獲得訪問權限的數據源。他們只能查看由他們有權訪問的數據源制作的切片和 dashboard。無法更改或添加數據源,但可以可以創建切片和 dashboard。
  • sql_lab:被授予對 SQL Lab 的訪問權限。
  • public:可以通過在 superset\config.py 設置 PUBLIC_ROLE_LIKE_GAMMA = True,授予該角色與 Gamma 角色相同的權限集。

在執行 superset init 命令時,所有這些基本角色將重新同步到初始值,因此不建議通過授予或撤消權限來更改這些基本角色。

  這里不對 Superset 的安全機制做過多展開,如果想了解更多,包括如何為用戶提供對特定數據集的訪問權限,以及如何定制自己的角色,可以參閱官方的安全文檔

8 小結

  雖然 Superset 仍有着很多不足,例如:沒有提供圖表的下鑽功能、不支持多圖表間的復雜聯動、處理大數據集效率較低、權限管理和圖表管理的功能設計不友好等。但其作為一款輕量級的 BI 應用,對於個人開發者和中小型團隊,其不失為一個優雅且高效的自助式數據分析解決方案。

Superset 的不足,一方面可以看后續 Airbnb 會不會優化,另一方面可以對其進行二次開發。實際上,Superset 應主要提供基於最終結果表的數據查詢和報表展示,對於復雜的數據聯動,則放在 ETL 的過程中完成。



作者:Gaius_Yao
鏈接:https://www.jianshu.com/p/b02fcea7eb5b
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM