從探索式資料分析到現代 BI 儀表盤:Superset 2.0

碼農談IT發表於2023-01-29

導讀:本次分享的嘉賓是趙勇傑老師,他是 Superset 的 PMC member,同時也是 Preset 全職的工程師,在全職維護 Superset 的社群,也是 Superset 的核心開發者;本次分享題目為——從探索式資料分析到現代 BI 儀表盤:Superset 2.0。

今天的分享會圍繞以下幾點展開:

  • Apache Superset 歷史

  • Apache Superset 功能

  • 資料探索

  • 資料探索 Demo 演示

  • Dashboards

  • Dashboards Demo 演示

  • Tips

分享嘉賓|趙勇傑 Preset inc. Senior Data Engineer

編輯整理|王超 aasgz

出品社群|DataFun



01

Apache Superset 歷史

Apache Superset 最初源於 Airbnb 內部的一個 hackathon 專案,最早的 commit 應該是來自於2015年,時間很遠了,離現在有七八年的時間,經過多年的孵化,Superset 於今年也就是 2022 年初畢業,成為 Apache 的頂級專案。

同時 Superset 也是 GitHub 上在 BI 和視覺化化領域裡面 Star、Fork 和 Maintainer 最多的專案之一。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

Superset 不僅僅被被 Airbnb 和 Preset 所維護,維護 Superset 的公司有很多,比如像 Apple、Dropbox  都會有一些全職的工程師來維護 Superset 的專案。所以 Superset 專案變得越來越大,功能也是越來越多。

我今天只是著重的介紹一些資料聯通性和資料探索式分析裡面的一部分,這些東西是 Superset 最核心的功能,但這些功能也僅僅是 Superset 的冰山一角。

02

Apache Superset 功能

從探索式資料分析到現代 BI 儀表盤:Superset 2.0
1. Superset 是 Python 的專案,可以利用 Superset 的 DBAPI2 介面來支援所有的關係型資料庫的連線

對於 Python 的 DBAPI2 介面,你只需要很簡單的實現 Connection 和 Cursor 的 interface 便可以非常快速的開發出來新的新的 DB dialect,這讓所有新出現的關係型資料庫都可以非常容易的接入 Superset。

2. Superset也有一個功能非常全面也非常強大的 SQLLab IDE

如果您用過 Hue,SQLLab和 Hue非常像,但是它的一些功能會比 Hue 要稍微強大一些,而 SQLLab 也僅僅是 Superset 裡面的一個模組。SQLLab 產生出來的 visual dataset 也可以提供結果集給 Charts 和 Dashboards 去使用。

3. Superset 支援非常多的視覺化圖表

50多種視覺化圖表是 Superset 所內建的,還可以透過Superset的前端視覺化的外掛非常方便的定製個性化的圖表,而定製化出來的圖表完全可以使用 Superset charts 資料探索所有的工具。

4. Charts 可以放在 Dashboards 上,還可以做很多種的資料篩選

在 Dashboards 上可以對上面的 Charts 做各種各樣定製化的修改。

5. 外掛系統(Plugins)

Superset的外掛系統也非常強大,可以自己定製新的圖表和過濾器。

6. 定時報告(Reports)

其次是定時報告功能,可以去設定一些定時的任務,讓Superset定時的發Charts或者Dashboards。

7. CSS 定製模版(CSS Template)

Superset的前端是可以高度自定義的,可以非常方便的透過自定義的CSS Template來定製整個Superset的樣式,比如說字型、背景顏色以及配色的方案。

8. 資料行級別許可權, 根據登陸使用者對映查詢條件

最後是一些企業使用者非常感興趣的內容,可以透過一些配置非常方便的來對映不同登入使用者,可以看到不同的使用者行級的許可權。

舉個例子,比如說您可以定義username到where子句的對映,這樣不同使用者登入進系統就會看到不同樣子的資料。

03

資料探索

資料探索是一種資料分析的方法,分析師可以用視覺化手段分析資料。這也是Superset 有別於其他的可制化工具非常大差異的產品特性。我剛才看有朋友在社群裡面問它和 Grafana 有什麼樣的區別,資料探索就是和 Grafana 有非常大差異的特性。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

1.拖拽式 UI 設計

您可以去用拖拽式的使用者體驗來拖拽您的指標和維度。

2.平滑切換不同視覺化圖形(new feature)

比如說您做了一個線圖,可以非常方便的把它切換成條形圖,或者是把它切換成普通的table或者散點圖。目的是為了讓您可以很方便的來分析資料,比如說線圖可以很方便的來看資料的趨勢,而三點圖可以很方便來看資料的分佈。

3. 維度和指標均可以 customized SQL snippet

這個看起來是很常用的功能,它可以帶來什麼樣的價值呢?我在開發Superset的過程當中以及和客戶聊需求當中感覺到這個功能看起來是很平常的功能,但是對很多使用者非常有用,因為不同的使用者下游的 DB 或者是data warehouse用的是不同的產品。比如說有些人會去用ClickHouse,有些人去用Presto,有些人去用BigQuery,不同的data warehouse會有不同的Fuction以及它自定義的一些表示式,程式設計沒有辦法特別快的去響應不同的data warehouse的一些新的UDF或者是它自定義的一些Function。如果一個BI產品可以讓您很方便的去寫一些自定義的SQL片段,那麼您就可以百分之百地去利用下游data warehouse或 DB 的一些能力。

4. SQL 預覽/結果集/資料取樣

這也是分析師常用的一種分析場景,當您看到了視覺化的圖形,您也同時想看是哪些SQL產生的這些圖形,以及哪些資料集生成的這些視覺化圖形。資料取樣也不用多說了,每個分析師都希望在分析之前先看看資料集裡面到底有哪些資料、哪些資料型別。

5. 高階時間分析: 時間平移/取樣/滾動計算

具體的業務場景比如說當您做year to date或者是year over year都可以使用,中文叫做同比、環比或者是計算從當前到今年初的一些指標。

6. 高階時間分析: 預測分析

您可以自己載入很多的預測分析的庫,在Superset裡面的時間分析圖裡面很方便的使用一些預測的分析。

7. 註解層

註解層我覺得應該是很多BI工具都會有的,您可以非常方便的在視覺化圖形裡面載入某指標的一些閾值,當超過一些閾值,可以給您傳送一些報告。

8. 定時傳送報告

Superset 的 charts 和 dashboard 都支援定時傳送報告,您可以去使用一些Celery 的任務,或者是某些指標觸發的規則,就可以給您定時的傳送一些報告到郵箱或者slack裡面。

9. 各種分享URL/email/embedded codes

同時Superset的探索介面以及dashboard的介面都支援各種各樣的分享,比如說URL分享、以Email分享,或者是您想把dashboard或者explore頁面透過iframe的方式嵌入到您已有的企業 Portal 裡面。

04

資料探索 Demo 演示

由於Superset是視覺化的專案,我這麼講不像其他老師那麼方便,我接下來要做一個live demo,我昨天錄了一個兩分鐘的影片給您演示一下資料探索介面。demo裡面主要想給您演示指標維度的拖拽,在時間分析或指標分析裡面,x軸可以自動的適應您時間軸,或者是分類的軸,時間過濾器、時間移動分析、資料預覽和取樣的功能。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

我現在使用superstore這個資料集來演示一下explore介面,首先我進入到Superset 2.0的explore介面,最左側是可以篩選指標和維度的 Side Bar。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

中間是可以被選上的一些control,最右側是視覺化畫介面和資料預覽的介面。

我現在要拖拽一個指標和維度到control panel,我選擇了一個指標是Sales,然後選擇了聚合方式是SUM,然後我還會去選擇時間的粒度,時間的粒度是Ship Date。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

我們現在來做一個軸線圖,您可以看到這個折線圖是一個以天為單位的折線圖,我們可以很方便的修改時間的粒度,成天改為到月,我們也可以很方便地把它改成周。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

現在我們接下來是是要拖拽一個非連續的維度到軸裡面,我拖了一個Region到軸裡面,它會自動的把Line圖不再使用連續的維度值,而會使用離散的維度值繪製圖形。而離散的值不太適合用線圖表示,所以我們把它切換到Bar Chart。

這也是Superset 2.0新出的一個feature,Superset內建的50多種visualization都是可以非常輕鬆的、自由的、不會丟失任何control資訊的切換。而這些查詢都是實時發到您的db或者data warehouse,不是把這些資料load到BI層。

我們再把它切換成線性圖,我們依然去用Order Date作為它的x軸

這時候我們加一些時間過濾器,時間分析在視覺化分析裡面是最複雜的一種分析方式,因為它的時間選擇會非常多,我們可以去寫一些時間的表示式很方便的選一些時間的範圍。我這裡面只寫了很簡單的一個時間表示式,應該可以寫一些很複雜的,它會根據不同的db,去翻譯成所有db所適應的時間的Function。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

這是Superset比較有特點的特性,可以去做一些時間的平移,是說您想要看當前的指標和您選擇時間平移之間指標的一些差異,比如我們選一年前的指標,我想要看一年前這些指標的值是很容易得到的。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

同時我也可以手動輸入一些表示式來看一年之後的指標是什麼樣子,如果一年之後有資料的話,其實計算方式還有很多。

資料預覽也是直接往資料庫發一些查詢,可以看到您當前的資料集裡所有列和所有資料。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

同時你也可以很方便的預覽視覺化是由哪些SQL組成的,這些東西都可以非常方便的複製到您的剪下板,可以非常方便再去用其他的資料分析工具來分析

05

Dashboards

當您把所有的Charts放入Dashboards之後,就會生成一個儀表盤,我們們中文經常管它叫做大屏或者是一些什麼樣的產品。當些Charts放入儀表盤之後,就可以在Dashboards裡面做更豐富的一些操作。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

1. Native Filter

Superset 2.0有一個新的功能叫做Native Filter,它已經和原來的Filter Box的Charts已經不一樣了,它是獨立於所有Charts的篩選器,您可以在截圖的最左側看到一個side bar,您可以去設定非常非常多種的過濾器,去對所有的Charts,或者是您指定了一些Charts進行過濾操作。

2. 多標籤

Superset的Dashboards支援很豐富的標籤操作,您一個Dashboards裡面有很多tab,不同tab可以有不同的上下文來描述您的故事

3. 每個 tab 裡面有行和列的佈局

4. Markdown

除了支援些基本的Charts,在Dashboards上你還可以很方便的插入link、圖片或者是Markdown,您可以寫一段描述

5. Cross Filter

下面一些就是現在開發當中比較酷炫的一些功能,比如Cross Filter,Cross Filter就是可以透過點選一些圖上的維度讓整個儀表盤去進行篩選操作 我一會也會做演示。

6. Drill Through(下鑽到明細)

接下來是Drill Through的功能,我剛剛看到也有人在群裡面問是不是有Drill Down的功能,其實去年我做了一個POC for Drill Down,但是公司希望要做到更好,今年先實現了Drill Through,Drill Through在Superset裡面叫做Drill to Detail,您可以透過在圖上點選維度,把維度最詳細級別展示出來,這個功能現在已經開發完畢,並且可以使用,一會兒我也會去做演示。

7. 對 Charts 最大化, Charts 資料獲取

在儀表盤上不僅可以做這些東西,還可以做一些比如您有很多Charts在儀表盤上,您可以對Charts最大化,還可以檢視Charts後面到底有哪些SQL,Charts裡面到底有哪些資料都可以透過很簡單的Click來獲得。

8. 自動重新整理

還同時支援自動重新整理,自動重新整理更像是一些監控工具所有的,大家應該都會用過Grafana或其他的工具,您可以去定義秒級的或者分鐘級別的去重新整理。

06

Dashboards Demo 演示

接下來是Dashboards的demo,比較簡單,因為Dashboards的功能太多了,我就找一些我個人感覺到最重要也應該是能夠給大家在生產環境裡面用到的一些功能做一些演示。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

這是Superset自帶的一個Example的Dashboards,這個就是一個Native filter,現在我設定了叫做user filter的過濾器,它可以透過使用者的名字過濾所有的Charts 。  

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

很貼心的是,這些所有的過濾器上在圖上都會有一些的【?】,去告訴您它是否過濾了,是否沒有過濾,這個過濾器是否對我沒有影響。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

這是一個時間過濾器,時間過濾器同時也可以應用在Dashboards上,由於我的資料僅僅是樣歷資料,它不是真實生產環境,比如說我要過濾last week是無法過濾出來的,我這裡只是給大家演示一下,並沒有真正的把query傳送下去。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

接下來給大家Native Filter的介面,這也是Superst 2.0非常重大的更新。是完全獨立於Charts的過濾器,您可以在裡面設定非常非常多種的過濾方式。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

而且還可以設定這個過濾器可以apply的範圍,比如說整個Panel,或者我可以讓過濾器僅僅應用於某些Charts,而不是整個Panel。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

Drill to Detail特性已經支援了大多數的圖形,比如Tree Map,可以透過點選channel name就可以看到詳細資料有哪些。這在生產環境當中是非常常用的。值得一提的是這個頁面上明細資料查詢,它會用分析的方式向底層的資料庫或者是data warehouse去下發查詢。

接下來演示的功能是Cross Filter ,您可以透過點選圖裡面特定的dimension去篩選其他圖,我透過點選general同時把filter傳送到其他圖裡面,你可以看到它的Members per Channel就是general。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

我選另外一個dimension的值,它會傳送其他的值。

接下來這個功能您在所有頁面可以去用到的關於查的功能,在Dashboards裡面都可以去用到。我相信這個功能很多競品的BI可能都沒有做到,您可以預覽SQL。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

就可以看看比如慢查詢到底是發了哪些查詢,這樣子我可以用一些第三方的工具去來explain我這個查詢。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

這裡我可以去看看我的視覺化到底是用哪些資料繪製出來的。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

最後大家可以看到,其實這上面都可以複製,非常方便的讓您透過用Superset把這些你想要得到動件的資料去它複製到剪下板或者其他工具裡面。我想這也是現代BI工具必不可少的特性,它不會阻止您對資料的任何操作。

07

Tips

接下來我給您介紹兩個除去剛才一些非常常見的一些功能介紹,我就兩個Superset使用或者說是開發上可以幫助大家在生產環境裡面用起來Superset的兩個tips。

1. Feature Flag

首先一個tips叫做Feature Flag,Superset裡面有非常非常多的一些實驗性的功能,叫做Feature Flag,這些些Feature Flag在開發當中預設是關閉的。當開發完畢才會把一些feature預設設定為True,您如果直接下載了Superset的package或者是映象,某些特性是用不了的,所以您必須在config裡面開啟才可以使用。

想要開啟的方法也非常簡單,您去Superset目錄下的config.py,檢視您想要修改的Feature Flag,看看是哪一個,舉個例子,比如說是CLIENT_CACHE,

您想要開啟CLIENT_CACHE功能,你就把key-value的值寫到Feature Flag字典裡面,然後功能就開啟了。您就可以去享用一些還在開發當中或者是一些實驗性的功能。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

我舉個例子,比如說現在這個DRILL_TO_DETAIL,現在它的預設是False,您就把DRILL_TO_DETAIL改為True,那麼您在 Dashboard 上就可以看到的Drill to Detail功能了。

2. 製作自定義視覺化外掛

第二個tips是關於自定義視覺化外掛。大家都知道視覺化專案最大的需求是,每個公司或者每個組織對視覺化的需求是千差萬別的,那有些公司會去有需要一些非常有定製化的視覺化。這樣子一些開源的視覺化庫沒有提供怎麼辦呢,那麼您一定就得從頭自己寫一個。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

Superset提供了視覺化外掛的一個功能,我覺得也是Superset的非常有競爭力、非常好的功能。您不需要寫太多程式碼,您只需要用前端工具可以自動的生成一個外掛的模板,您稍微的修改修改就可以把您做好的外掛完全適應Superset生態裡面的Dashboards、explore等等一些東西。我把教程的連結放到這裡:https://preset.io/blog/building-custom-viz-plugins-in-superset-v2,您可以去點選看,非常快,只需要幾步,您只要有一點點前端的知識就可以去生成自定義化的前端外掛。比如說現在我生成了Hello World的外掛,它的作用是把我query的內容透過json的方式它展示出來。

我今天的talk就講完了,最後我貼一些專案的地址。

從探索式資料分析到現代 BI 儀表盤:Superset 2.0

非常歡迎各位去Superset的github社群()裡面去提Issue、PR或者是去Discussions發言。

其次Superset也有一個非常活躍的slack頻道,您可以去裡面去提問題,裡面有非常多的人,每天都會有非常非常多的人去討論。

再次是Apache Mailing list,但是Mailing list用的人比較少,和其他的專案不太一樣。

最後是Preset的Blog(https://preset.io/blog/),Preset Blog會有很多高質量的教程或者是release notes,大家可以去去看,可以看到Superset最新的一些資訊。

08

問答環節

Q1:Superset在探索後固定下來的資料API可以提供給外部API管理器,讓其他應用來使用資料嗎?

A1:Superset和Tableau、Power BI有非常大的差別是它沒有資料提取的過程,它所有的查詢都是直接下發到下層的db和data warehouse,它沒有辦法抽取資料到它內部的儲存。但是Superset有資料查詢的API,可以供您使用,您可以去看Superset API的Document。

Q2:自助拖拉拽很多情況下是建立在資料集上的,那麼基於該資料生成的BI看板或報表介面中的filter條件為什麼不能透傳到資料集內部,現在大部分是基於資料集外新增過濾器,不是很影響查詢效能嗎?

A2:Superset很有特點的一點是下發查詢直接到db或data warehouse,並不存這些資料。Superset的效能瓶頸不是在於Superset本身,而是在於下游的db或者data warehouse, 也是現在資料棧的特點,每一層做好自己的事就得了。

Q3:基於資料集下拉篩選條件目前都是基於資料distinct得操作,可以去繫結偽表嗎?

A3:我理解您的意思,一些高基維的維度表如果是直接下發count distinct,就很難查詢回來,如果您直接下發到另外的維度表的話,下拉篩選的效能會好很多,Superset是可以去做這種修改的,但是現在開源版本沒有做這方面的修改,不過應該可以透過比較簡單的一些 hack 去實現。這也是開源專案有意思並且讓很多大公司、一些知名的網際網路公司去Fork、去使用的原因。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2933153/,如需轉載,請註明出處,否則將追究法律責任。