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

- 打開(kāi)瀏覽器, 鍵入地址, 可以使用起來(lái)了


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


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


先執(zhí)行一個(gè)語(yǔ)句, 注意查詢結(jié)果中不要有相同的列, 如果有, 后續(xù)會(huì)提示錯(cuò)誤

點(diǎn)擊"Query History", 選擇Visualize

勾中一個(gè), 會(huì)有以下效果, 我基本都是用默認(rèn)屬性, 然后點(diǎn)擊最下方按鈕

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


最終結(jié)果如下

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


