背景
老板一直反饋說我們給不了他想要的, 關鍵每次他想要的都不一樣, 每實現(xiàn)一個新功能, 他就想要一堆相關的信息, 我要將這些信息都給他做成網(wǎng)頁, 用圖表展示出來, 各種維度搜索, 這還不得累死這幫開發(fā)小伙伴. 所以對于他這種需求, 我基本都予以回絕, 堅決不做. 不過口頭說不做, 也深知老板不容易, 他要的信息也不過分, 其實就是要一些數(shù)據(jù)統(tǒng)計罷啦, 經(jīng)過一些調(diào)研, 一些數(shù)據(jù)分析部門的朋友建議我用tableau, 我也玩了玩, 功能相當強大, 不過有兩個問題:
- 單機軟件
這種圖表總歸是希望可以在線查看, 手機查看最完美 - 付費軟件
不便宜
所以我就一直在尋找開源在線的解決方案, 最開始打算使用grafana, 后來發(fā)現(xiàn)他對時序支持比較好, 對于表查詢的展示好像怪怪的, 就放棄了. 終于在某天在一個偶然的機會, 發(fā)現(xiàn)了Superset這個開源項目. 好東西. 于是乎有了今天的分享
簡介
曾用名Caravel, Panoramix, 是由Airbnb(知名在線房屋短租公司)開源的數(shù)據(jù)分析與可視化平臺, 該工具主要特點是可自助分析, 自定義儀表盤, 分析結果可視化(導出), 用戶/角色權限控制, 還集成了一個SQL編輯器, 可以進行SQL編輯查詢等。
安裝
我使用docker進行安裝, 本以為很簡單, 中間還是遇到一些坑.
- 首先安裝docker
- 創(chuàng)建相關目錄
mkdir /dockerfs/superset/conf -p
mkdir /dockerfs/superset/data -p
- 創(chuàng)建容器
docker run -p 8088:8088 -v /dockerfs/superset/conf:/etc/superset -v mkdir /dockerfs/superset/data:/data --name superset -d amancevice/superset:0.18.5
- 使用配置文件
vi /dockerfs/superset/conf/superset_config.py
輸入內(nèi)容
#---------------------------------------------------------
# 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:////data/superset.db'
# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
問題就出現(xiàn)在sqlite的路徑上, sqlite默認存儲在sqlite:////home/superset/.superset/superset.db, 我這里為了以后升級, 所以切換了存儲路徑, 這里有兩種做法
- 直接將/home/superset/.superset/路徑映射出來
- 將/home/superset/.superset/superset.db文件拷貝到/data目錄
我這里選擇的是第二種, 坑也在這, 使用
docker exec -it superset /bin/bash
cp /home/superset/.superset/superset.db /data
失敗, 發(fā)現(xiàn)沒有權限, ls了一下才發(fā)現(xiàn)當前用戶是非root用戶, 而/data目錄是root權限.
經(jīng)過一番查找, 發(fā)現(xiàn)可以使用以下命令用root賬號登陸容器
docker exec -u 0 -it superset /bin/bash
0號用戶就是root用戶, 剩下來的就簡單了
mv /home/superset/.superset/superset.db /data
- 退出容器, 重啟容器, 然后進行用戶初始化
docker restart superset
docker exec -it superset superset-init

- 打開瀏覽器, 鍵入地址, 可以使用起來了


使用
- 配置數(shù)據(jù)源


注意 連接mysql的時候一定要加charset=utf8, 要不然中文會顯示亂碼.
點擊Test Connection, 進行測試, 如果正常會顯示"Seems OK!"
- 添加要展示的表
- 創(chuàng)建slice, 然后將創(chuàng)建好的slice加入到dashboard
我感覺這部分不難, 自己摸索摸索總歸能夠用起來, 我這里就不詳細說了 - 多表展示
這里要特別強調(diào)一下如何顯示多表的展示, 很多文章都說superset不支持多表, 只支持單表, 我剛開始也以為是這樣, 后來發(fā)現(xiàn)這個方法可以進行基于多表的展示.
首先記得數(shù)據(jù)庫配置里先勾選"Expose in SQL Lab", 要不然在SQL Lab中是找不到數(shù)據(jù)源的


先執(zhí)行一個語句, 注意查詢結果中不要有相同的列, 如果有, 后續(xù)會提示錯誤

點擊"Query History", 選擇Visualize

勾中一個, 會有以下效果, 我基本都是用默認屬性, 然后點擊最下方按鈕

他會跳到slice的編輯頁, 可以進行編輯, 其實他這個過程是創(chuàng)建了一個以查詢?yōu)榻Y果的臨時表, 后續(xù)就是在這個臨時表中做展示. 知道這個原理, 也可以通過直接添加表來進行操作, 只是操作流程不允許寫入sql, 可以先添加, 然后再填入sql(我沒嘗試過, 應該行得通)


最終結果如下

結語
文章寫的有點啰嗦, 如果你有數(shù)據(jù)可視化的問題, 希望這篇文章能夠給予你一定的幫助, 目前我觀察下來, 這部分做的好的軟件不多, 很多都是靠賣服務賺錢的, 比如數(shù)據(jù)觀(人家做的真好, 其實挺鼓勵使用人家的服務的, 如果沒什么研發(fā)人員, 可以優(yōu)先考慮使用), 希望這個軟件可以滿足老板的部分需求. 據(jù)說這里面的圖表還可以嵌入到其他系統(tǒng)中, 沒有仔細研究過, 不過這種不易調(diào)優(yōu)的查詢, 最好還是臨時用用就好, 別嵌入到系統(tǒng)中, 穩(wěn)定性和性能都不能有所保障.
最后還是附幾張人家的圖表截圖吧


