測試

用量

test: historic_revenue_is_accurate {
  explore_source:  orders {
    column:  total_revenue {
      field:  orders.total_revenue 
    }
    filters: [orders.created_date:  "2017"]
  }
  assert:  revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}
階層
test

- 或 -

test

- 或 -

test
預設值

接受
資料測試的 ID,以及定義測試斷言和查詢的子參數。

定義

Looker 具有 LookML 驗證工具,可驗證 LookML 程式碼的語法是否有效,以及內容驗證工具,可驗證內容和模型之間的物件參照。

除了這些驗證器之外,您也可以使用 test 參數驗證模型的邏輯。針對每項資料測試,您都要建立查詢和yesno判斷陳述式。資料測試會執行測試查詢,並驗證測試查詢的每個資料列是否為 true。如果斷言陳述式針對測試查詢的每個資料列傳回 yes,資料測試就會通過。

如果專案設定為必須通過資料測試才能部署至正式環境,且專案有一個或多個 test 參數,在您將變更提交至專案後,IDE 會顯示「執行測試」按鈕。LookML 開發人員必須先執行資料測試,才能將變更部署至正式環境。

無論專案是否需要先通過資料測試才能部署至正式環境,開發模式中的 LookML 開發人員隨時可以執行資料測試,驗證模型的邏輯。

您可以在模型檔案檢視檔案或專用的資料測試檔案中建立資料測試。使用專用檔案存放資料測試時,請記得在要執行資料測試的任何模型檔案或檢視檔案中,include 資料測試檔案。

資料測試的名稱和 explore_source 不得與同一專案中的其他資料測試相同。如果專案中的多項資料測試使用相同的 explore_source,請務必確保資料測試的名稱不重複。

test 參數包含下列子參數:

  • explore_source:定義要在資料測試中使用的查詢。
  • assert:定義要對測試查詢的每個資料列執行的 Looker 運算式,以驗證資料。

定義測試的 LookML 後,您可以執行資料測試,確認測試正常運作,並查看模型的邏輯是否通過測試 (您必須處於開發模式才能執行資料測試)。

您可以透過下列幾種方式,為專案啟動資料測試:

  1. 如果專案設定為必須先通過資料測試,才能將檔案部署至正式環境,在您提交專案變更後,IDE 會顯示「執行測試」按鈕。這會執行專案的所有測試,無論測試是由哪個檔案定義。您必須先通過資料測試,才能將變更部署至正式環境。
  2. 在「專案健康狀態」面板中,選取「執行資料測試」按鈕。無論哪個檔案定義測試,這都會執行專案中的所有資料測試。
  3. 從檔案選單中選取「Run LookML Tests」選項。這麼做只會執行目前檔案中定義的測試。

執行資料測試後,「專案健康狀態」面板會顯示進度和結果。

您可以選取各項測試結果的「Explore Query」連結,開啟以資料測試中定義的查詢為準的「探索」。

explore_source

資料測試中的 explore_source 參數與衍生資料表的 explore_source 參數使用相同的語法和邏輯。兩者唯一的差異在於,資料測試的 explore_source 不支援 derived_columnbind_filtersbind_all_filters 子參數。

實用提示:如要輕鬆取得 explore_source LookML,請使用現有的「探索」建立查詢。在「探索」中,從「探索」的齒輪選單選取「取得 LookML」,然後選取「衍生資料表」分頁標籤,即可取得查詢的 LookML。詳情請參閱建立原生衍生資料表的說明文件。

請注意下列資料測試的 explore_source

  • 資料測試的 explore_source 查詢是標準的 Looker 查詢,因此測試的 explore_source 查詢最多只能有 5,000 個資料列。請確保查詢結果不超過 5,000 列,以便取得完整的結果集進行測試。您可以在 explore_source 中加入篩選條件或排序方式,減少查詢中的資料列數量,或將相關資料列移至查詢頂端。

  • explore 無法做為extension: requiredexplore_source,用於資料測試LookML 驗證工具會產生找不到 explore_source 的錯誤。

assert

assert 子參數定義了 explore_source 查詢結果是否有效的條件。expression 子參數接受會產生 yesno (布林值) 的 Looker 運算式。執行 explore_source 查詢後,系統會針對查詢結果集的每個資料列評估判斷提示的運算式。如果查詢的任何資料列有 no 回應,資料測試就會失敗。如果查詢本身有錯誤,測試也會失敗。

一個測試可以有多個 assert 宣告。如要通過測試,explore_source 查詢的每個資料列都必須符合各項斷言。

實用提示:您可以使用「資料表計算」對話方塊,測試要在測試的 expression 參數中使用的 Looker 運算式語法。

如要在資料測試中使用,Looker 運算式中的欄位必須完整指定範圍,也就是使用 view_name.field_name 格式指定。舉例來說,下列運算式會將欄位宣告為 aircraft_engine_types.aircraft_engine_type_id

assert: engine_type_id_not_null {
  expression: NOT is_null(${aircraft_engine_types.aircraft_engine_type_id}) ;;
}

範例

確保主鍵不重複

下列資料測試會從 orders 探索建立查詢,並定義 expression,以測試結果集中的訂單 ID 是否為專屬 ID。explore_source 查詢會建立與資料庫中每個 ID 相關聯的資料列計數。如果 ID 不重複,資料庫中每個 ID 應該只有一列。此外,這項查詢會依計數排序,並將結果集限制為一列,因此查詢回應會是計數最高的 ID。如果任何 ID 的計數大於 1,我們就知道該 ID 有多個資料列,因此不是不重複的 ID。如果是這樣,這項資料測試就會失敗。

test: order_id_is_unique {
  explore_source: orders {
    column: id {}
    column: count {}
    sorts: [orders.count: desc]
    limit: 1
  }
  assert: order_id_is_unique {
    expression: ${orders.count} = 1 ;;
  }

驗證已知值

這項資料測試會檢查 2017 年的收益值是否一律為 $626,000 美元。在這個資料集中,這是已知值,不應變更。

test: historic_revenue_is_accurate {
  explore_source: orders {
    column: total_revenue {
      field: orders.total_revenue
    }
    filters: [orders.created_date: "2017"]
  }
  assert: revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}

確認沒有空值

這項資料測試會檢查資料中是否沒有空值。這個 explore_source 使用 sort,確保任何空值都會在查詢頂端傳回。空值的排序方式可能因方言而異。以下測試以 desc: yes 為例。


test: status_is_not_null {
  explore_source: orders {
    column: status {}
    sorts: [orders.status: desc]
    limit: 1
  }
  assert: status_is_not_null {
    expression: NOT is_null(${orders.status}) ;;
  }
}