断言简介
断言是一种数据质量测试查询,用于查找违反查询中指定的一个或多个条件的行。如果查询返回任何行,则断言失败。Dataform 每次更新工作流时都会运行断言,并在任何断言失败时提醒您。
Dataform 会在 BigQuery 中自动创建包含已编译断言查询结果的视图。如工作流设置文件中所配置,Dataform 会在断言架构中创建这些视图,您可以在其中检查断言结果。
例如,对于默认的 dataform_assertions 架构,Dataform 会在 BigQuery 中创建一个视图,格式如下:dataform_assertions.assertion_name。
您可以为所有 Dataform 表类型(包括表、增量表、视图和物化视图)创建断言。
您可以通过以下方式创建断言:
- 
您可以向表的 config块添加内置断言,并指定其条件。
- 
您可以手动在单独的 SQLX 文件中编写自定义断言,以用于高级使用情形或非由 Dataform 创建的数据集。 
准备工作
所需的角色
    
      如需获得创建断言所需的权限,请让您的管理员为您授予工作区的 Dataform Editor  (roles/dataform.editor) IAM 角色。
  
  
  
  
  如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
  
  
创建内置断言
您可以向表的 config 代码块添加内置 Dataform 断言。Dataform 会在创建表后运行这些断言。Dataform 创建表后,您可以在工作区的工作流执行日志标签页中查看断言是否通过。
您可以在表的 config 块中创建以下断言:
- nonNull- 此条件断言指定列在所有表行中均不为 null。此条件适用于永远不能为 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 代码块添加断言
如需向表的配置块添加断言,请按以下步骤操作:
- 在开发工作区的文件窗格中,选择一个表定义 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 文件中添加手动断言,请按照以下步骤操作:
- 在文件窗格中,点击 definitions/旁边的 更多菜单。 更多菜单。
- 点击创建文件。
- 在添加文件路径字段中,输入文件名,后跟 - .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 创建工作流。
- 如需了解如何手动运行工作流,请参阅手动触发运行。