SQL 片段 vs. 已儲存問題 vs. 檢視

了解您可以使用的 Metabase 功能,以整理您的 SQL 程式碼。

本文概述 Metabase 提供的工具,以整理您的 SQL 程式碼,並針對何時選擇工具提供一些指引。

有兩種主要工具可以整理您的 SQL 程式碼:片段和已儲存問題。我們也將討論資料庫檢視,以區分其在 Metabase 中與已儲存問題的使用方式,儘管檢視特定於您的資料庫(即,它們不是 Metabase 的一部分)。

片段和已儲存問題都充當範本,您可以將其注入到其他 SQL 問題中。至於何時以及何時使用,經驗法則是:對於小型、常用的 SQL 片段,使用片段;對於您想要單獨執行的任何程式碼,請使用已儲存的 SQL 問題。

SQL 片段和資料夾

對於關鍵或經常使用的 SQL 程式碼,請使用SQL 片段。片段應該是簡短、可重複使用的 SQL 行。

Example snippet using the Sample Database included with Metabase.

正如您可以使用查詢產生器將官方彙總和篩選器定義為度量和區隔一樣,您可以使用 SQL 片段來編纂 KPI 和篩選器。例如,您可能想要儲存您確切計算收入的方式,或構成活躍使用者的條件。將該 SQL 程式碼儲存為片段,新增描述(您甚至可以包含您的聯絡資訊,以防有人有疑問),並且您團隊中的每個人現在都可以在您的片段中參考該結晶化的 SQL

SELECT *
FROM users
WHERE {{ snippet: Active Users }} AND {{ snippet: Adults }}

片段對於整合和標準化您的程式碼至關重要。如果在任何時候您精確定義了構成活躍使用者的條件,您只需要更新 活躍使用者 片段,變更就會傳播到每個使用該片段的問題。

Metabase 企業版額外允許您將 SQL 片段組織到資料夾中,就像集合組織問題和儀表板一樣。您可以設定這些資料夾的權限,以限制對敏感 SQL 的存取,或只是為了確保使用者不必瀏覽與其領域無關的資料夾。

Creating a snippet folder in Metabase Enterprise Edition.

如果您發現自己正在撰寫長片段,並且該片段傳回一組結果(即,片段不僅僅是 WHERE 子句,它本身就是一個查詢),請考慮將查詢儲存為問題,供其他人在其查詢中參考。

已儲存問題作為建構區塊

對於本身就引起較大興趣的大型 SQL 程式碼區塊,請考慮將該程式碼儲存為問題。畢竟,這就是大多數人對 Metabase 所做的事情:他們提出問題。

問題可以分組在儀表板中,但它們也可以用作較大查詢的建構區塊,就像您可以在查詢中組合多個片段一樣。

假設您撰寫了一個查詢並將其儲存為問題。您可以像這樣將其注入到另一個查詢中

SELECT *
FROM {{#123}}

其中 123 是問題的 ID。您也可以將問題用作通用表格表達式 (CTE)

WITH active_users AS {{#123}}
SELECT *
FROM Active Users

已儲存問題是一種低成本的方式來模組化您的分析。透過已儲存問題(相對於 SQL 片段)模組化查詢的最大優點是您可以獨立執行已儲存問題並查看其結果,這使得問題比片段更容易偵錯。

或者,您可以簡單地複製問題並從先前的問題建構,但這種重複是有代價的。您現在在兩個問題中都有相同的程式碼;如果您稍後在一個問題中發現錯誤,您也必須更正在另一個問題中的錯誤 - 假設您記得它們共用相同的程式碼。透過簡單地參考已儲存的問題,您只需要在一個地方更新程式碼。

例如,如果您是一家新創公司,您可能會將使用者資料分散在正規化的表格中。在 Metabase 中,您可以透過各種方式聯結這些表格,以建立一組您的使用者會感興趣的問題,這允許他們以這些結果為基礎,在其自己的查詢中參考這些問題,以特定方式切割資料。

資料庫檢視

如果您認為已儲存問題看起來很像資料庫中的檢視,那麼您是對的。問題的優點是您不需要成為管理員即可建立它們,並且您可以即時建立問題並將它們巢狀在其他問題中。缺點是問題是 Metabase 的建構,您將無法獲得資料庫原生檢視的效能最佳化(如果有的話)。此外,當在您的 SQL 程式碼中參考另一個問題時,請記住您只能存取問題的結果:您無法存取查詢本身,這表示您無法參考其中可能存在的任何變數。

如果您發現使用者經常以 Metabase 中的某個問題作為查詢的基礎,請考慮與您的資料庫管理員討論建立實體化檢視 (materialized view),使其傳回與該儲存問題相同的結果集。實體化檢視的優點在於資料庫不必每次都重新計算結果;實體化檢視的行為會很像資料庫中的實際表格。

當您沒有權限在資料庫中建立檢視,或者只是在探索資料且不想建立檢視時,在 SQL 範本中使用其他儲存的問答就非常適合。

隨著規模擴大,將商業邏輯進一步向上推移至管線前端

大部分的分析工作只是以不同的方式切分資料,以便更了解資料想傳達的故事。當您剛開始建立分析基礎時,不一定會知道哪些資料切片能幫助您為公司做出最佳決策。

隨著組織的分析設定日趨成熟,您會希望將商業邏輯進一步向上推移至管線前端,以便使用者在 Metabase 中找到的表格能將業務的邏輯單元組合在一起。策劃並建立在一組核心的儲存問題之上,是整理出哪些資料對您的組織最重要的一個簡單方法。

一般來說,讓使用者越容易分析您的資料,您的組織就會越有效率。請參閱新創公司常犯的資料模型錯誤以了解更多資訊。

接下來:在儀表板中透過 SQL 問題新增篩選條件

如何在儀表板中新增篩選器小工具,並將它們連接到 SQL 問題中的欄位篩選器變數。

下一篇文章