測試資料品質

本文說明如何使用 Dataform Core 建立 Dataform 資料表斷言,並測試工作流程程式碼。

關於斷言

斷言是資料品質測試查詢,可找出違反查詢中一或多項條件的資料列。如果查詢傳回任何資料列,斷言就會失敗。Dataform 每次更新工作流程時都會執行斷言,並在任何斷言失敗時發出快訊。

Dataform 會自動在 BigQuery 中建立檢視區塊,其中包含已編譯的斷言查詢結果。如工作流程設定檔中所設定,Dataform 會在斷言結構定義中建立這些檢視區塊,方便您檢查斷言結果。

舉例來說,如果是預設的 dataform_assertions 結構定義,Dataform 會在 BigQuery 中建立檢視區塊,格式如下:dataform_assertions.assertion_name

您可以為所有 Dataform 資料表類型建立判斷結果:資料表、遞增資料表、檢視區塊和具體化檢視區塊。

您可以透過下列方式建立斷言:

事前準備

  1. 前往 Google Cloud 控制台的「Dataform」頁面。

    前往「Dataform」頁面

  2. 選取或建立存放區

  3. 選取或建立開發工作區

  4. 建立資料表

必要的角色

如要取得建立判斷所需的權限,請要求管理員授予您工作區的 Dataform 編輯者 (roles/dataform.editor) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

建立內建斷言

您可以將內建的 Dataform 斷言新增至表格的 config 區塊。Dataform 會在建立資料表後執行這些斷言。Dataform 建立資料表後,您可以在工作區的「工作流程執行記錄」分頁中,查看是否通過斷言。

您可以在表格的 config 區塊中建立下列判斷式:

  • nonNull

    這項條件會斷言指定資料欄在所有資料表列中都不是空值。這個條件適用於絕不會是 Null 值的資料欄。

    下列程式碼範例顯示表格 config 區塊中的 nonNull 判斷:

config {
  type: "table",
  assertions: {
    nonNull: ["user_id", "customer_id", "email"]
  }
}
SELECT ...
  • rowConditions

    這項條件會斷言所有資料表列都遵循您定義的自訂邏輯。每個資料列條件都是自訂 SQL 運算式,且每個資料表資料列都會根據每個資料列條件進行評估。如果任何資料表列導致 false,就會導致判斷結果為失敗。

    下列程式碼範例顯示遞增資料表 config 區塊中的自訂 rowConditions 判斷:

config {
  type: "incremental",
  assertions: {
    rowConditions: [
      'signup_date is null or signup_date > "2022-08-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...
  • uniqueKey

    這項條件會確認指定資料欄中,沒有任何資料表資料列具有相同值。

    下列程式碼範例顯示檢視區塊 config 區塊中的 uniqueKey 判斷:

config {
  type: "view",
  assertions: {
    uniqueKey: ["user_id"]
  }
}
SELECT ...
  • uniqueKeys

    這項條件會確認指定資料欄中,沒有任何資料表列具有相同的值。如果資料表中有多個資料列在所有指定資料欄中的值都相同,就會導致判斷結果為失敗。

    下列程式碼範例顯示表格 config 區塊中的 uniqueKeys 判斷:

config {
  type: "table",
  assertions: {
    uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
  }
}
SELECT ...

config 區塊中新增斷言

如要將斷言新增至資料表的設定區塊,請按照下列步驟操作:

  1. 在開發工作區的「Files」(檔案) 窗格中,選取資料表定義 SQLX 檔案。
  2. 在資料表檔案的 config 區塊中,輸入 assertions: {}
  3. assertions: {} 中新增斷言。
  4. 選用:按一下「格式」

下列程式碼範例顯示在 config 區塊中新增的條件:

config {
  type: "table",
  assertions: {
    uniqueKey: ["user_id"],
    nonNull: ["user_id", "customer_id"],
    rowConditions: [
      'signup_date is null or signup_date > "2019-01-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...

使用 SQLX 建立手動斷言

手動聲明是您在專用 SQLX 檔案中撰寫的 SQL 查詢。手動斷言 SQL 查詢必須傳回零個資料列。如果查詢在執行時傳回資料列,斷言就會失敗。

如要在新的 SQLX 檔案中新增手動斷言,請按照下列步驟操作:

  1. 在「Files」(檔案) 窗格中,點按 definitions/ 旁的 「更多」選單。
  2. 點選「建立檔案」
  3. 在「Add a file path」(新增檔案路徑) 欄位中,輸入檔案名稱,然後輸入 .sqlx。例如:definitions/custom_assertion.sqlx

    檔名只能包含數字、字母、連字號和底線。

  4. 點選「建立檔案」

  5. 在「檔案」窗格中,按一下新檔案。

  6. 在檔案中輸入:

    config {
      type: "assertion"
    }
    
  7. config 區塊下方,撰寫 SQL 查詢或多個查詢。

  8. 選用:按一下「格式」

以下程式碼範例顯示 SQLX 檔案中的手動判斷提示,可判斷 sometable 中的欄位 ABc 絕不會是 NULL

config { type: "assertion" }

SELECT
  *
FROM
  ${ref("sometable")}
WHERE
  a IS NULL
  OR b IS NULL
  OR c IS NULL

後續步驟