持續整合 SQL Validator

連續整合 (CI) SQL 驗證工具會驗證資料探索中的維度是否能正確對資料庫執行。為此,SQL Validator 會針對 LookML 專案中的探索執行一系列查詢。

根據預設,SQL 驗證工具會執行下列工作:

  1. 針對專案中的每個探索,SQL Validator 會執行探索查詢,其中包含探索中的每個維度。
  2. 如果 Looker 針對探索查詢傳回錯誤,SQL 驗證工具就會針對探索中的每個維度,執行個別的探索查詢。

如果您不希望 SQL Validator 測試每個探索中的每個維度,可以選擇執行下列一或多項操作:

如要進一步瞭解建立或編輯 CI 套件時可設定的選項,請參閱本頁的「SQL 驗證器選項」一節。如要瞭解如何執行 SQL 驗證工具,請參閱「執行持續整合套件」說明文件頁面。

執行結果頁面中,SQL 驗證工具會依維度和「探索」分類顯示每個 SQL 錯誤,並提供連結至有問題的 LookML,以及從這裡探索連結,方便您進行偵錯:

持續整合結果頁面,顯示 SQL Validator 的檢測結果

資源用量

SQL 驗證工具旨在減少 Looker 和資料倉儲的資源使用量。所有 SQL Validator 查詢都包含 LIMIT 0WHERE 1=2 子句。這些子句可有效指示資料倉儲中的查詢規劃器不要處理資料,而是檢查 SQL 的有效性。

舉例來說,在 BigQuery 中,這類查詢類似於在 BigQuery 中執行模擬測試查詢。在 BigQuery 中,LIMIT 0 查詢不會掃描資料,因此 SQL 驗證工具執行的查詢不會產生費用。

從 SQL 驗證中排除維度

您可能會想從 SQL 驗證中排除特定維度,例如依賴參數的維度,因為參數的值在驗證期間會為空值,並一律會導致 SQL 錯誤。

您也可以排除沒有 sql 參數的維度,例如 type: distancetype: locationtype: duration 的維度。

如要從 SQL 驗證中排除維度,您可以透過下列兩種方式修改維度的 LookML:

  • 您可以在維度的 LookML 定義的 tags 參數中新增 ci: ignore 陳述式,如以下範例所示:

    dimension: addresses {
      sql: ${TABLE}.addresses ;;
      tags: ["ci: ignore"]
    }
    
  • 您可以將註解 -- ci: ignore 新增至維度 LookML 的 sql 欄位,如以下範例所示:

    dimension: addresses {
      sql:
        -- ci: ignore
        ${TABLE}.addresses ;;
    }
    

SQL Validator 選項

您可以建立或編輯持續整合套件時指定幾個選項,以便設定 SQL 驗證工具的執行方式。本頁的下列章節會說明這些選項:

要查詢的探索

根據預設,SQL Validator 會對 LookML 專案中的所有模型和探索執行 SQL 驗證。

您可以使用「要查詢的探索」欄位,指定要納入 SQL 驗證程序的探索和模型。

您可以使用下列格式指定 Explore:model_name/explore_name

注意事項:

  • 針對 model_name,請使用模型檔案名稱,但不含 .model.lkml 副檔名。舉例來說,如要指定 thelook.model.lkml 中定義的模型,請輸入 thelook
  • 針對 explore_name,請使用 explore LookML 參數中的 explore_name。舉例來說,如要在 LookML 專案中指定定義為 explore: users 的 Explore,請輸入 users
  • 您可以建立以逗號分隔的清單,指定多個探索。
  • 您可以在 model_nameexplore_name 中使用 * 萬用字元。

例如:

  • 如要只指定在 thelook.model.lkml 檔案中使用 explore: users 定義的「使用者」探索,請輸入以下內容:

    thelook/users
    
  • 如要在 thelook.model.lkml 檔案中指定名為 usersorders 的探索,請輸入以下內容:

    thelook/users, thelook/orders
    
  • 如要指定 thelook.model.lkml 中的所有 Explore,請輸入以下內容:

    thelook/*
    
  • 如要在專案中的所有模型中指定每個名為 users 的 Explore,請輸入以下內容:

    */users
    

要排除的探索

根據預設,SQL Validator 會對 LookML 專案中的所有模型和探索執行 SQL 驗證。

您可以使用「要排除的探索」欄位,指定要從 SQL 驗證中排除的探索和模型。

您可以使用下列格式指定 Explore:model_name/explore_name

如要進一步瞭解如何為 SQL 驗證工具指定 Explore,請參閱「要查詢的 Explore」一節。

盡快承認錯誤

根據預設,SQL 驗證工具會為每個探索執行一項查詢,並在查詢中使用所有維度。如果探索查詢失敗,SQL 驗證工具會針對探索中的每個維度個別執行探索查詢。

如要加快驗證速度,您可以啟用「快速失敗」選項,讓 SQL 驗證工具只執行探索的初始查詢,也就是一次包含所有維度的查詢。如果該查詢傳回錯誤,SQL 驗證工具會在 CI 執行結果中顯示該錯誤,並繼續驗證下一個 Explore。

啟用Fail fast 後,驗證作業通常會更快完成。不過,即使有多個維度可能有錯誤,SQL 驗證工具的結果只會顯示每個探索的第一個錯誤。也就是說,修正第一個錯誤後,下次執行 SQL 驗證工具時,可能會顯示其他錯誤。

忽略隱藏項目

如果您希望 SQL 驗證工具忽略 Looker 開發人員使用 hidden: yes 定義的 LookML 維度,請啟用「Ignore hidden」欄位。SQL Validator 會在驗證期間,將這些維度排除在探索查詢之外。

查詢並行數量

在預設情況下,SQL 驗證工具一次最多會執行 10 個查詢,以免過度負荷 Looker 執行個體。您可以使用「查詢並行數」欄位,指定 SQL Validator 可同時執行的查詢數量上限。

「查詢並行性」欄位的最大值受限於資料庫連線的「這個連線的並行查詢數量上限」設定。

如果您發現在執行 SQL 驗證時,Looker 執行個體的速度變慢,可以降低這個值。

漸進式驗證

您可以透過「漸進式驗證」這個方法,找出專屬於特定開發分支版本、不存在於正式環境的錯誤。開發人員可以透過漸進式驗證,找出並修正自己負責的錯誤,不必分心處理專案中現有的錯誤,而且驗證速度也會更快,特別是針對包含多個探索的 LookML 專案。

針對增量驗證,SQL Validator 只會執行開發版本 (基準參照資料) 和正式版 (目標參照資料) 之間變更的探索查詢。即使正式版本身有錯誤,SQL Validator 只會傳回開發版本專屬的錯誤。

在驗證器結果中,SQL 驗證器會指出每個略過的探索,因為在驗證的分支或修訂版本中,這些探索的編譯 SQL 並未變更。如需逐步驗證結果的範例,請參閱「查看逐步驗證結果」一文。

建立或編輯持續整合套件時,您可以勾選「SQL Validator」部分中的「Only incremental errors」核取方塊,為 SQL Validator 啟用逐步驗證功能。

請注意下列增量驗證事項:

  • 當 SQL Validator 驗證正式環境分支版本本身時 (例如在正式環境分支版本中手動執行),漸進式驗證設定不適用。驗證正式環境分支版本時,SQL Validator 會執行完整的驗證。
  • 快速失敗模式不支援漸進式驗證執行作業,因為個別維度查詢需要揭露專屬於專案開發分支的漸進式錯誤。