遷移至新的 LookML 執行階段

新的 LookML 執行階段已在 Looker 22.6 推出。「執行階段」是 Looker 中用來解讀 LookML 程式碼的部分。新版執行階段速度更快,且可檢查的 LookML 錯誤比舊版執行階段更多。

Looker 強烈建議所有客戶遷移至新執行階段。新的 LookML 執行階段可找出先前忽略的錯誤,因此啟用新的執行階段可能會導致新的 LookML 錯誤。這些錯誤並非由新的執行階段造成,而是現已發現的先前錯誤。

此外,如果客戶想將執行個體改為 Looker (Google Cloud Core),必須先遷移至新的執行階段。

如何切換至新的執行階段

1. 關閉「Use Legacy LookML Runtime」舊版功能 (如適用)

部分 Looker 會透過「Use Legacy LookML Runtime」舊版功能啟用。停用「Use Legacy LookML Runtime」舊版功能,將 Looker 例項轉換為新執行階段。

如果 Looker 執行個體的「Legacy Features」管理頁面中沒有「Use Legacy LookML Runtime」舊版功能,表示執行個體已使用新執行階段。

2. 確認 LookML 專案未使用 new_lookml_runtime:no 進行設定

您可以在 LookML 專案的資訊清單檔案中新增 new_lookml_runtime:no 陳述式,藉此覆寫 Looker 執行個體的全球性 Use Legacy LookML Runtime 設定。

請確認 LookML 專案資訊清單檔案沒有 new_lookml_runtime 參數,或是在所有 LookML 專案中將 new_lookml_runtime 設為 yes

新執行階段可能會發現的 LookML 問題

改用新執行階段後,您可能會發現 LookML 中出現新的錯誤。新的錯誤並非由新執行階段造成,而是先前存在的問題。

視 LookML 開發人員設定而定,您可能需要先修正這些錯誤,才能繼續提交 LookML 變更。以下各節將說明新 LookML 執行階段可能在專案中發現的部分問題,以及如何解決這些問題:

部分永久衍生資料表可能會重建

永久衍生資料表 (PDT) 索引鍵會根據 LookML 執行階段產生的 SQL 建立。在某些情況下,新的執行階段可能會為 PDT 產生不同的 (但等同) SQL,導致產生不同的 PDT 鍵。變更 PDT 鍵會導致 PDT 重新建構。

Liquid 運算式中的 HTML 文字會轉換為 Unicode

新的執行階段可能會將 Liquid 運算式中的 HTML 標記轉換為對應的萬國碼。舉例來說,<strong> 標記可能會轉換為 &lt;strong&gt;。在舊版執行階段中,HTML 標記可以直接比較,如下例所示:

html:
  {{ value |replace(""), "[" |replace(""), "]" }} ;;

在新執行階段中,比較作業必須以 Unicode 為準:

html:
  {{ value |replace("&lt;strong&gt;"), "[" |replace("&lt;/strong&gt;"), "]" }} ;;

sql_distinct_key 中的參照無效,導致「不明檢視畫面」

在新的執行階段中,如果 sql_distinct_key 參照不明的欄位或檢視畫面,就會擲回例外狀況。例如:

measure: total_shipping {
  type: sum_distinct
  sql: ${order_shipping} ;;
  sql_distinct_key: ${some_incorrect_field_name} ;;
}

沒有主鍵的「Distinct」類型評量會產生不同的 SQL

沒有 primary-keysql_distinct_key 參數的獨立類型評估 (average_distinctcount_distinctmedian_distinctpercentile_distinctsum_distinct) 可能會在新執行階段產生不同的 SQL。

建立不同類型指標時,請務必指定 primary-keysql_distinct_key

使用裸欄位參照在 Liquid 中存取 _filters[],會將參照的欄位新增為所選欄

在 Looker 中,「純欄位參照」是指未以大括號括住的欄位參照,例如 users.created_date 而非 ${users.created_date}

舊版執行階段在與 _filters Liquid 變數搭配使用時,會忽略裸露欄位參照。新的執行階段會將欄位新增至 SQL 查詢。

例如,在這個維度中,users.created_date 是裸參照:

dimension: name {
  html:
    {% if _filters[users.created_date] != NULL %}
      {{rendered_value}} (created: {{_filters[users.created_date]}})
    {% else %}
      {{rendered_value}}
    {% endif %}
    ;;
}

在舊版執行階段中,_filters[users.created_date] 一律會遭到忽略,只有在 {% if %} 符合條件時才會執行第二個條件。在新執行階段中,users.created_date 會新增至 SQL 查詢的 SELECT 子句,以便評估條件。

自動在 Looker 查詢中新增意外欄位可能會讓使用者感到困惑,因此最佳做法是使用純欄位參照,而是使用 ${field_name} 語法。