SQL 片段:重複使用與分享 SQL 程式碼

了解您需要知道的所有關於在 SQL 程式碼中使用片段的資訊。

SQL 片段讓您可以將 SQL 程式碼儲存為片段,然後您或其他 SQL 作者可以在不同的 SQL 查詢中參考該片段。如果您需要更新該程式碼,您可以編輯片段,而這些變更將會傳播到所有使用該片段的問題。任何擁有至少一個資料庫的 SQL 編輯器權限的人都可以使用、建立和編輯片段。

Highlight SQL code and save it as a snippet.

片段是一個簡單但功能強大的功能,所以讓我們來拆解它們。我們也將介紹 Metabase 中 Pro 和 Enterprise 方案獨有的功能:片段資料夾。這些資料夾及其權限可協助您整理片段,例如依資料庫或片段類型,並讓您授與或拒絕存取特定資料夾或子資料夾。

首先,一個簡單的 SQL 片段範例

採用這個簡短的聯結陳述式

orders AS o
LEFT JOIN products AS p
ON o.product_id = p.id

您可以醒目提示該程式碼,將片段命名為「Orders and products」,新增有用的描述,並在任何 SQL 查詢中使用 snippet: 標籤來呼叫該片段,如下所示

SELECT
    *
FROM
    {{snippet: Orders and products}}

您也可以將片段用於常見指標,例如考量到資料庫特性的平均訂單總額。舉一個簡單的例子,假設我們知道 ID = 1 的帳戶是測試帳戶,而且我們不希望該資料扭曲我們的平均值。我們可以將該例外情況封裝在一個名為「average order total」的片段中。

(SELECT
    AVG(total)
    FROM
    orders
    WHERE
    id > 1)

然後我們可以在不同的查詢中使用該片段,在其中尋找總額低於平均訂單總額的訂單中的產品

SELECT
    product_id
FROM
    orders
WHERE
    total < {{snippet: average order total}}

建立和使用片段就是這麼簡單。現在讓我們深入探討它們為何如此有用。

為何要使用 SQL 片段?

SQL 片段有三個主要使用案例

  • 標準化:您的組織如何定義熱門產品?是依據銷售單位數量?還是平均評分大於 4 的評論?您可以定義熱門產品的這些條件,並將它們編碼到 SQL 片段 {{snippet: popular products}} 中,並讓該程式碼在每個使用該片段的問題中填入。如果稍後需要變更此定義,只需更新片段的 SQL,變更就會傳播到所有使用該片段的問題。如同區隔 (具名篩選器或一組篩選器) 和指標 (具名計算) 可以標準化您組織中的分析一樣,SQL 片段提供了另一種確保跨團隊正確性和一致性的方法。
  • 效率:您是否發現自己經常複製和貼上 SQL 程式碼?不想費心記住哪些外鍵對應到哪些表格?撰寫一次複雜的聯結,將其儲存為片段,並在需要時呼叫片段。
  • 教育:片段可以提升 SQL 新手 (甚至是經驗豐富的分析師) 的水平,方法是讓他們接觸您組織的「標準 SQL」,或更有效率或更複雜的查詢。閱讀、複製和以高品質程式碼為基礎進行建構是培養技能的最佳方法之一。它也可以為您的組織節省時間:人們可以複製片段的程式碼,修改它以獲得不同的結果,並將該程式碼儲存為新的片段供其他人使用。

使用 SQL 片段

SQL 片段側邊欄

Metabase 的 SQL 編輯器 有一個片段側邊欄,用於檢視、建立和編輯片段,您可以透過將滑鼠游標移到編輯器的右側並點擊片段圖示 (三條不均勻的水平線) 來存取它。

Access the Snippets sidebar by clicking on the snippet icon to the right of the SQL editor.

一旦您建立片段,您就可以使用片段標籤 {{snippet: Orders and products}} 將它們插入編輯器中,或從片段側邊欄中選取它們

Previewing and inserting a snippet from the Snippets sidebar.

片段側邊欄中點擊片段的名稱,會將其插入查詢中游標的目前位置。

編輯 SQL 片段

更新片段的 SQL 程式碼將會更新每個使用該片段的查詢,因此請務必在儲存程式碼之前測試您的程式碼,以避免破壞其他人的問題。當然,如果您犯了錯誤並造成混亂,您可以簡單地更正程式碼,再次儲存片段,並恢復宇宙的秩序。

SQL 片段和別名

請注意,如果您在片段使用別名 (例如 orders AS o),則需要在片段使用這些別名,才能在查詢中參考該資料。我們建議您的團隊制定別名政策:要嘛每個人都在其程式碼中使用表格別名,要嘛每個人都使用完整的表格名稱。如有疑問,請只使用完整的表格名稱。

封存 SQL 片段

You can archive a snippet via the Snippet Edit modal.

片段是無法毀壞的:您無法刪除它們,但可以封存 (和取消封存) 它們。封存片段會保持您的片段側邊欄整潔,因為封存的片段不會填入側邊欄。它也會防止封存的片段出現在 SQL 編輯器 中的自動完成結果中,也就是說,當您輸入 {{snippet: 時,封存的片段不會顯示為自動完成選項。封存片段不會影響使用該片段的問題,因此您可以安全地封存片段,而不會破壞任何人的問題。

SQL 片段資料夾

SQL 片段控制項僅在 ProEnterprise 方案 (包括自架和 Metabase Cloud) 上提供。

Metabase 中的 Pro 和 Enterprise 方案 包含片段資料夾和權限,以協助整理大量的片段。管理員可以將片段新增至資料夾,並在資料夾內放置資料夾。所有片段都會出現在片段側邊欄中,包括其他資料庫的片段 (因為您可能會片段化可用於多個資料庫的字串)。您可以將每個資料庫的實用片段收集到各自的資料夾中,並額外建立資料夾來儲存與不同團隊或專案相關的片段。

Saving a snippet to a folder.

此外,管理員可以將權限新增至這些資料夾,以控制誰可以檢視或編輯位於其中的片段

Changing a folder

權限會授與給 群組,具有三個權限層級

  • 編輯存取權:檢視、編輯、封存/取消封存片段。
  • 檢視存取權:檢視和執行片段。
  • 無存取權:無法在側邊欄和自動完成選單中檢視片段。但是,沒有存取權的使用者仍然可以執行包含這些片段的查詢。

封存和取消封存片段不會影響權限,但您需要對資料夾具有編輯存取權才能封存和取消封存其片段。

使用資料夾來保持片段在團隊之間和跨團隊之間的組織性和標準化,以及讓敏感片段僅對適當的群組可見。

何時使用片段 vs 已儲存問題

片段可以有多大?一般而言,如果片段可以獨立執行 (也就是說,您可以將其作為查詢單獨執行),請考慮將該 SQL 查詢儲存為已儲存問題。將片段保留用於相依程式碼片段。片段也適用於儲存查詢中常用的字串。如需更多關於何時使用片段的資訊,請查看 SQL 片段 vs. 已儲存問題 vs. 檢視

更多關於使用 SQL 片段的資訊

若要深入了解 SQL 片段,請查看我們的詳細文件

下一步:SQL 片段 vs. 已儲存問題 vs. 檢視

了解您可以使用哪些 Metabase 功能來保持 SQL 程式碼井然有序。

下一篇文章