輕量級(jí)BI工具Superset的搭建與使用

系統(tǒng)環(huán)境:Windows 10
Python:3.6.6
Superset:0.27.0

0 Superset 簡(jiǎn)介

??Superset 是一款由 Airbnb 開源的“現(xiàn)代化的企業(yè)級(jí) BI(商業(yè)智能) Web 應(yīng)用程序”,其通過(guò)創(chuàng)建和分享 dashboard,為數(shù)據(jù)分析提供了輕量級(jí)的數(shù)據(jù)查詢和可視化方案。
??Superset 的前端主要用到了 ReactNVD3/D3,而后端則基于 Python 的 Flask 框架和 Pandas、SQLAlchemy 等依賴庫(kù),主要提供了這幾方面的功能:

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

??Superset 的搭建與使用非常簡(jiǎn)單,只需要一些 Python 基礎(chǔ),下面先從創(chuàng)建虛擬環(huán)境開始。

1 創(chuàng)建虛擬環(huán)境

??Superset 的依賴包較多,為了避免沖突,需要先搭建虛擬環(huán)境,再進(jìn)行安裝,這里推薦使用 Anaconda 自帶的 conda 工具創(chuàng)建虛擬環(huán)境:

conda create -n superset python=3.6

??創(chuàng)建虛擬環(huán)境成功后,啟動(dòng)虛擬環(huán)境:

activate superset

2 安裝

??使用豆瓣源安裝 Superset:

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

??這里遇到了一個(gè)坑,某個(gè)依賴包沒(méi)有被正確的安裝,當(dāng)時(shí)隨手就解決了,沒(méi)有記錄下來(lái)。只大概記得報(bào)錯(cuò)信息提到 Microsoft Visual C++ 14.0 is required ,這是因?yàn)樵撘蕾嚢枰惭b C++ 進(jìn)行編譯。
??一般不用為此專門安裝 Microsoft Visual C++ 14.0,而是去下載該依賴包的 whl 格式文件(需要對(duì)應(yīng)虛擬環(huán)境的 python 版本),再進(jìn)入 whl 文件所在的路徑通過(guò) pip install 安裝即可。如果在安裝過(guò)程中遇到其他問(wèn)題,就把報(bào)錯(cuò)信息復(fù)制出來(lái),然后去問(wèn)問(wèn)神奇的 stackoverflow 吧!

3 初始化

??初始化的官方步驟如下:

# 創(chuàng)建管理員賬號(hào)
fabmanager create-admin --app superset 

# 初始化數(shù)據(jù)庫(kù)
superset db upgrade

# 載入案例數(shù)據(jù)
superset load_examples

# 初始化角色和權(quán)限
superset init

# 啟動(dòng)服務(wù),端口號(hào) 8088,使用 -p 更改端口號(hào)
superset runserver

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

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

??這里直接運(yùn)行 python superset runserver 會(huì)出錯(cuò),原因是 Superset 使用 gunicorn 作為應(yīng)用程序服務(wù)器,而 gunicorn 不支持 Windows。需要在命令行中添加 -d,使用 development web server 運(yùn)行。最終運(yùn)行命令為:

python superset runserver -d

??但是這種部署方式,官方并不建議在生產(chǎn)環(huán)境中使用。在 Superset 的 issues 922,有人提供了一種方法,使用 waitress。首先安裝 waitress:

pip install waitress

??接著找到 superset/cil.py 的 debug_run() 函數(shù):

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 問(wèn)題

    return serve(
        app,
        host='0.0.0.0',
        port=int(port))

??再次運(yùn)行 Superset:

python superset runserver -d -p 8079

??最后在瀏覽器輸入 http://localhost:8079 進(jìn)入登錄界面:

??輸入在 fabmanager create-admin --app superset 這步設(shè)置的賬號(hào)和密碼登錄,進(jìn)入 Superset 首頁(yè)(右上角國(guó)旗處可設(shè)置語(yǔ)言):

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

4 數(shù)據(jù)源

??接下來(lái),將演示如何連接數(shù)據(jù)庫(kù),以及怎樣使用表和導(dǎo)入 CSV 到數(shù)據(jù)庫(kù)。Superset 還深度支持 Druid(一個(gè)高效的海量數(shù)據(jù)查詢系統(tǒng)),但這里不做介紹。

4.1 連接到數(shù)據(jù)庫(kù)

??從頂部導(dǎo)航菜單的 Source — Databases 進(jìn)入數(shù)據(jù)庫(kù)列表頁(yè):

??點(diǎn)擊在數(shù)據(jù)庫(kù)列表右上角的綠色加號(hào)按鈕:

??點(diǎn)擊按鈕后,將進(jìn)入添加數(shù)據(jù)庫(kù)的表單頁(yè),因?yàn)檫@只是一次簡(jiǎn)單的演示,只需要填寫兩項(xiàng):Database 和 SQLAlchemy URL,分別是數(shù)據(jù)庫(kù)名稱和 SQLAlchemy 的連接 URI (參閱為目標(biāo)數(shù)據(jù)庫(kù)創(chuàng)建連接 URI 的 SQLAlchemy 文檔)。

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

??接著點(diǎn)擊 Test Connection 按鈕,測(cè)試是否能成功連接到數(shù)據(jù)庫(kù)。若成功連接,則會(huì)看到下圖的彈出框:

??當(dāng)連接測(cè)試成功后,可在頁(yè)面底部看到該數(shù)據(jù)庫(kù)下的數(shù)據(jù)表,點(diǎn)擊 Save 按鈕,完成創(chuàng)建。

4.2 創(chuàng)建表

??現(xiàn)在已經(jīng)配置了數(shù)據(jù)庫(kù),接下來(lái)需要向 Superset 添加想要查詢的特定表。從 Sources — Tables 進(jìn)入到數(shù)據(jù)表列表頁(yè):

??點(diǎn)擊列表頁(yè)右上角的綠色加號(hào)按鈕:

??點(diǎn)擊按鈕后,將進(jìn)入添加數(shù)據(jù)表的表單頁(yè),在該頁(yè)面依次填寫目標(biāo)數(shù)據(jù)庫(kù)、數(shù)據(jù)表名稱、數(shù)據(jù)庫(kù)模式(可選),再點(diǎn)擊 Save 按鈕,即可完成創(chuàng)建。

??創(chuàng)建完成后,將重定向回到列表頁(yè),此時(shí)在頁(yè)面頂部會(huì)出現(xiàn)一條消息提示指示表已創(chuàng)建:

??在列表頁(yè)還可以對(duì)已添加的數(shù)據(jù)表進(jìn)行編輯:

??點(diǎn)擊編輯圖標(biāo),可進(jìn)入表的編輯頁(yè),對(duì)表的詳細(xì)信息、字段、指標(biāo)進(jìn)行配置,這里演示對(duì)表字段的配置(設(shè)置是否可對(duì)指定字段進(jìn)行分組或過(guò)濾):

4.3 上傳 CSV

??Superset 還可以導(dǎo)入 CSV 到數(shù)據(jù)庫(kù)中,從 Sources — Upload a CSV 進(jìn)入到導(dǎo)入 CSV 的表單頁(yè):

??依次填寫表名稱、導(dǎo)入 CSV 文件、選擇要導(dǎo)入的數(shù)據(jù)庫(kù),再點(diǎn)擊 Save 按鈕完成導(dǎo)入:

??創(chuàng)導(dǎo)入完成后,將重定向回到數(shù)據(jù)表列表頁(yè),此時(shí)在頁(yè)面頂部會(huì)出現(xiàn)一條消息提示指示表已創(chuàng)建:

5 創(chuàng)建 dashboard

5.1 探索數(shù)據(jù)

??要開始探索數(shù)據(jù),只需在可用數(shù)據(jù)表列表中點(diǎn)擊剛剛創(chuàng)建的表名:

??點(diǎn)擊表名后進(jìn)入表的可視化頁(yè)面,默認(rèn)的可視化類型為表視圖:

??在 Datasouce & Chart Type 下方,依次可以進(jìn)行時(shí)間、Group By、Not Group By 以及字段過(guò)濾等設(shè)置:

??在頁(yè)面左側(cè)完成相關(guān)設(shè)置后,點(diǎn)擊 Run Query 按鈕,即可在右側(cè)的可視化視圖,查看數(shù)據(jù)的可視化展示:

5.2 創(chuàng)建圖表

??通過(guò)更改可視化類型和其他設(shè)置,可以很靈活地對(duì)數(shù)據(jù)進(jìn)行探索性分析。若在探索的過(guò)程中發(fā)現(xiàn)某個(gè)有價(jià)值的點(diǎn),可以點(diǎn)擊左上角的 Save 按鈕,在出現(xiàn)的彈出框中命名圖表并選擇是否將其添加到 dashboard,以將其保存為圖表:

??從頂部導(dǎo)航菜單的 Charts 進(jìn)入到圖表的列表頁(yè),找到剛剛創(chuàng)建的圖表:

??點(diǎn)擊圖表名稱進(jìn)入到剛才的可視化頁(yè)面,對(duì)已保存的圖表進(jìn)行再次編輯。

5.3 創(chuàng)建 dashboard

??從頂部導(dǎo)航菜單的 Dashboards 進(jìn)入到 dashboard 的列表頁(yè),點(diǎn)擊右上角的綠色加號(hào)按鈕:

??點(diǎn)擊按鈕后,將進(jìn)入添加 dashboard 的表單頁(yè),在該頁(yè)面依次填寫 dashboard 名稱和擁有者,再點(diǎn)擊 Save 按鈕,即可完成創(chuàng)建:

5.4 編輯 dashboard

??完成 dashboard 的創(chuàng)建后,將重定向到 dashboard 的列表頁(yè),找到剛創(chuàng)建的 dashboard:

??點(diǎn)擊 dashboard 的名稱,進(jìn)入 dashboard,此時(shí) dashboard 還未配置任何圖表,處于空值狀態(tài),點(diǎn)擊右上角的 Edit dashboard 按鈕進(jìn)行編輯:

??進(jìn)入編輯狀態(tài)后,可已導(dǎo)入圖表(僅限 dashboard 擁有者擁有的圖表)、標(biāo)簽頁(yè)、行、列、標(biāo)題、Markdown 和分割線等組件:

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

??Superset 還可以通過(guò)編輯 CSS 修改 dashboard 的樣式:

??在進(jìn)行編輯之后,點(diǎn)擊 Save changes 按鈕,即可完成操作。

6 SQL 查詢

??在使用 SQL 查詢前,需要進(jìn)行兩項(xiàng)設(shè)置:
??首先,從頂部導(dǎo)航菜單的 Sources — Databases 進(jìn)入數(shù)據(jù)庫(kù)的列表頁(yè),選中數(shù)據(jù)庫(kù)進(jìn)行編輯,將 Expose in SQL Lab 和 Allow Run Sync 都勾選上,其余的不要勾選。

??在勾選完上述兩項(xiàng)之后,Windows 用戶還會(huì)出現(xiàn) “module" object has no attribute 'SIGALRM' 錯(cuò)誤,這又是由于 Windows 環(huán)境下依賴包不兼容導(dǎo)致的 —— Python 的 signal 包只作用于 Linux 和 Mac ,在 Windows 下不啟作用。解決方法很簡(jiǎn)單粗暴,在 superset/utils.py 下找到相關(guān)代碼,把 signal 所在行都注釋,然后再加上一個(gè) pass這塊代碼的功能是在超時(shí)后將查詢進(jìn)程殺掉,注釋后沒(méi)大影響)。

    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 進(jìn)行 SQL 查詢操作:

??可對(duì)查詢語(yǔ)句進(jìn)行執(zhí)行、保存、分享(復(fù)制)操作,還可以對(duì)查詢結(jié)果可以進(jìn)行可視化和導(dǎo)出為 CSV 文件。

7 安全性

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

  • Admin:擁有所有可能的權(quán)限,包括從其他用戶授予或撤消權(quán)限以及更改其他人的切片和 dashboard。
  • Alpha:可以訪問(wèn)所有數(shù)據(jù)源,但不能授予或撤消其他用戶的訪問(wèn)權(quán)限。它們也僅限于改變它們擁有的對(duì)象??梢蕴砑雍透臄?shù)據(jù)源。
  • Gamma:訪問(wèn)受限,只能使用通過(guò)另一個(gè)互補(bǔ)角色獲得訪問(wèn)權(quán)限的數(shù)據(jù)源。他們只能查看由他們有權(quán)訪問(wèn)的數(shù)據(jù)源制作的切片和 dashboard。無(wú)法更改或添加數(shù)據(jù)源,但可以可以創(chuàng)建切片和 dashboard。
  • sql_lab:被授予對(duì) SQL Lab 的訪問(wèn)權(quán)限。
  • public:可以通過(guò)在 superset\config.py 設(shè)置 PUBLIC_ROLE_LIKE_GAMMA = True,授予該角色與 Gamma 角色相同的權(quán)限集。

在執(zhí)行 superset init 命令時(shí),所有這些基本角色將重新同步到初始值,因此不建議通過(guò)授予或撤消權(quán)限來(lái)更改這些基本角色。

??這里不對(duì) Superset 的安全機(jī)制做過(guò)多展開,如果想了解更多,包括如何為用戶提供對(duì)特定數(shù)據(jù)集的訪問(wèn)權(quán)限,以及如何定制自己的角色,可以參閱官方的安全文檔

8 小結(jié)

??雖然 Superset 仍有著很多不足,例如:沒(méi)有提供圖表的下鉆功能、不支持多圖表間的復(fù)雜聯(lián)動(dòng)、處理大數(shù)據(jù)集效率較低、權(quán)限管理和圖表管理的功能設(shè)計(jì)不友好等。但其作為一款輕量級(jí)的 BI 應(yīng)用,對(duì)于個(gè)人開發(fā)者和中小型團(tuán)隊(duì),其不失為一個(gè)優(yōu)雅且高效的自助式數(shù)據(jù)分析解決方案。

Superset 的不足,一方面可以看后續(xù) Airbnb 會(huì)不會(huì)優(yōu)化,另一方面可以對(duì)其進(jìn)行二次開發(fā)。實(shí)際上,Superset 應(yīng)主要提供基于最終結(jié)果表的數(shù)據(jù)查詢和報(bào)表展示,對(duì)于復(fù)雜的數(shù)據(jù)聯(lián)動(dòng),則放在 ETL 的過(guò)程中完成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 曾用名Caravel, Panoramix, 是由Airbnb(知名在線房屋短租公司)開源的數(shù)據(jù)分析與可視化...
    大師兄愛(ài)上芭蕉扇閱讀 8,454評(píng)論 1 7
  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,228評(píng)論 3 119
  • 一 、不是腦殘非主流才會(huì)整天感慨人生若只有初見(jiàn) 我生日快到了。我對(duì)著日歷一遍遍地?cái)?shù)著。 還有十三天,我對(duì)晴芷說(shuō)。 ...
    九姑娘XBei閱讀 807評(píng)論 2 4
  • 此時(shí)身后的兩個(gè)男生在打王者榮耀,真的是一個(gè)很好的社交軟件,下午房間里的倆妹子也在玩,昨天看到了旁邊妹子游戲的推送,...
    南來(lái)北往_小Anrt閱讀 477評(píng)論 0 0
  • 答:胃癌T2N0M0期屬于胃癌早中期,一般中醫(yī)藥便可治好,但為了安全起見(jiàn),最好先手術(shù)再中醫(yī)藥治療,手術(shù)切除主病灶,...
    治療肺癌晚期肝癌的名老中醫(yī)閱讀 288評(píng)論 0 0

友情鏈接更多精彩內(nèi)容