老闆一直反饋說咱們給不了他想要的, 關鍵每次他想要的都不同, 每實現一個新功能, 他就想要一堆相關的信息, 我要將這些信息都給他作成網頁, 用圖表展現出來, 各類維度搜索, 這還不得累死這幫開發小夥伴. 因此對於他這種需求, 我基本都予以回絕, 堅定不作. 不過口頭說不作, 也深知老闆不容易, 他要的信息也不過度, 其實就是要一些數據統計罷啦, 通過一些調研, 一些數據分析部門的朋友建議我用tableau, 我也玩了玩, 功能至關強大, 不過有兩個問題:mysql
單機軟件這種圖表總歸是但願能夠在線查看, 手機查看最完美
付費軟件不便宜
因此我就一直在尋找開源在線的解決方案, 最開始打算使用grafana, 後來發現他對時序支持比較好, 對於表查詢的展現好像怪怪的, 就放棄了. 終於在某天在一個偶然的機會, 發現了Superset這個開源項目. 好東西. 因而乎有了今天的分享web
曾用名Caravel, Panoramix, 是由Airbnb(知名在線房屋短租公司)開源的數據分析與可視化平臺, 該工具主要特色是可自助分析, 自定義儀表盤, 分析結果可視化(導出), 用戶/角色權限控制, 還集成了一個SQL編輯器, 能夠進行SQL編輯查詢等。sql
我使用docker進行安裝, 本覺得很簡單, 中間仍是遇到一些坑.docker
首先安裝docker
建立相關目錄數據庫
mkdir /dockerfs/superset/conf -p mkdir /dockerfs/superset/data -p
建立容器瀏覽器
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
使用配置文件bash
vi /dockerfs/superset/conf/superset_config.py
輸入內容編輯器
#--------------------------------------------------------- # 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 = ''
問題就出如今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
失敗, 發現沒有權限, ls了一下才發現當前用戶是非root用戶, 而/data目錄是root權限.通過一番查找, 發現可使用如下命令用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
init pwd.png
打開瀏覽器, 鍵入地址, 可使用起來了
login.png
dashboard.png
datasources.png
connection.png
注意 鏈接mysql的時候必定要加charset=utf8, 要否則中文會顯示亂碼.點擊Test Connection, 進行測試, 若是正常會顯示"Seems OK!"
添加要展現的表
建立slice, 而後將建立好的slice加入到dashboard我感受這部分不難, 本身摸索摸索總歸可以用起來, 我這裏就不詳細說了
多表展現這裏要特別強調一下如何顯示多表的展現, 不少文章都說superset不支持多表, 只支持單表, 我剛開始也覺得是這樣, 後來發現這個方法能夠進行基於多表的展現.首先記得數據庫配置裏先勾選"Expose in SQL Lab", 要否則在SQL Lab中是找不到數據源的
Expose in SQL lab.png
SQL lab.png
先執行一個語句, 注意查詢結果中不要有相同的列, 若是有, 後續會提示錯誤
query.png
點擊"Query History", 選擇Visualize
Visualize.png
勾中一個, 會有如下效果, 我基本都是用默認屬性, 而後點擊最下方按鈕
modify.png
他會跳到slice的編輯頁, 能夠進行編輯, 其實他這個過程是建立了一個以查詢爲結果的臨時表, 後續就是在這個臨時表中作展現. 知道這個原理, 也能夠經過直接添加表來進行操做, 只是操做流程不容許寫入sql, 能夠先添加, 而後再填入sql(我沒嘗試過, 應該行得通)
table list.png
table detail.png
最終結果以下
result.png
文章寫的有點囉嗦, 若是你有數據可視化的問題, 但願這篇文章可以給予你必定的幫助, 目前我觀察下來, 這部分作的好的軟件很少, 不少都是靠賣服務賺錢的, 好比數據觀(人家作的真好, 其實挺鼓勵使用人家的服務的, 若是沒什麼研發人員, 能夠優先考慮使用), 但願這個軟件能夠知足老闆的部分需求. 聽說這裏面的圖表還能夠嵌入到其餘系統中, 沒有仔細研究過, 不過這種不易調優的查詢, 最好仍是臨時用用就好, 別嵌入到系統中, 穩定性和性能都不能有所保障.
最後仍是附幾張人家的圖表截圖吧
spanshot1.png
spanshot2.png