關於斷言
斷言是資料品質測試查詢,可找出違反查詢中一或多項條件的資料列。如果查詢傳回任何資料列,斷言就會失敗。Dataform 每次更新工作流程時都會執行斷言,並在任何斷言失敗時發出快訊。
Dataform 會自動在 BigQuery 中建立檢視區塊,其中包含已編譯的斷言查詢結果。如工作流程設定檔中所設定,Dataform 會在斷言結構定義中建立這些檢視區塊,方便您檢查斷言結果。
舉例來說,如果是預設的 dataform_assertions
結構定義,Dataform 會在 BigQuery 中建立檢視區塊,格式如下:dataform_assertions.assertion_name
。
您可以為所有 Dataform 資料表類型建立判斷結果:資料表、遞增資料表、檢視區塊和具體化檢視區塊。
您可以透過下列方式建立斷言:
-
您可以在表格的
config
區塊中新增內建斷言,並指定條件。 -
如要處理進階用途或非由 Dataform 建立的資料集,您可以在個別的 SQLX 檔案中手動編寫自訂斷言。
事前準備
必要的角色
如要取得建立判斷所需的權限,請要求管理員授予您工作區的 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
區塊中新增斷言
如要將斷言新增至資料表的設定區塊,請按照下列步驟操作:
- 在開發工作區的「Files」(檔案) 窗格中,選取資料表定義 SQLX 檔案。
- 在資料表檔案的
config
區塊中,輸入assertions: {}
。 - 在
assertions: {}
中新增斷言。 - 選用:按一下「格式」。
下列程式碼範例顯示在 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 檔案中新增手動斷言,請按照下列步驟操作:
- 在「Files」(檔案) 窗格中,點按
definitions/
旁的「更多」選單。
- 點選「建立檔案」。
在「Add a file path」(新增檔案路徑) 欄位中,輸入檔案名稱,然後輸入
.sqlx
。例如:definitions/custom_assertion.sqlx
。檔名只能包含數字、字母、連字號和底線。
點選「建立檔案」。
在「檔案」窗格中,按一下新檔案。
在檔案中輸入:
config { type: "assertion" }
在
config
區塊下方,撰寫 SQL 查詢或多個查詢。選用:按一下「格式」。
以下程式碼範例顯示 SQLX 檔案中的手動判斷提示,可判斷 sometable
中的欄位 A、B 和 c
絕不會是 NULL
:
config { type: "assertion" }
SELECT
*
FROM
${ref("sometable")}
WHERE
a IS NULL
OR b IS NULL
OR c IS NULL
後續步驟
- 如要進一步瞭解斷言類型,請參閱 Dataform API。
- 如要瞭解如何使用 JavaScript 定義判斷提示,請參閱「完全使用 JavaScript 建立工作流程」。
- 如要瞭解如何手動執行工作流程,請參閱「手動觸發執行作業」。