1. 程式人生 > 實用技巧 >輕量級BI工具Superset的搭建與使用

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

系統環境: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
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。