使用“自动数据质量”功能

本页面介绍了如何创建 Dataplex 数据质量扫描。

如需了解数据质量扫描,请参阅自动数据质量简介

准备工作

  1. 启用 Dataplex API。

    启用该 API

  2. 可选:如果您希望 Dataplex 根据数据分析扫描的结果生成数据质量规则建议,请创建并运行数据分析扫描

权限

  • 如需对 BigQuery 表运行数据质量扫描,您需要拥有 BigQuery 表的读取权限,以及在用于扫描表的项目中创建 BigQuery 作业的权限。

  • 如果 BigQuery 表和数据质量扫描位于不同的项目中,则需要向 Dataplex 服务帐号授予具有相应 BigQuery 表的数据质量扫描读取权限的项目。

  • 如果数据质量规则引用了其他表,则扫描项目的服务帐号必须对这些表具有读取权限。

  • 如需获取将扫描结果导出到 BigQuery 表所需的权限,请让管理员向 Dataplex 服务帐号授予对结果数据集和表的 BigQuery Data Editor (roles/bigquery.dataEditor) IAM 角色。此角色会授予以下权限:

    • bigquery.datasets.get
    • bigquery.tables.create
    • bigquery.tables.get
    • bigquery.tables.getData
    • bigquery.tables.update
    • bigquery.tables.updateData
  • 如果 BigQuery 数据组织在 Dataplex 湖中,请向 Dataplex 服务帐号授予 roles/dataplex.metadataReaderroles/dataplex.viewer 角色。或者,您需要以下所有权限:

    • dataplex.lakes.list
    • dataplex.lakes.get
    • dataplex.zones.list
    • dataplex.zones.get
    • dataplex.entities.list
    • dataplex.entities.get
    • dataplex.operations.get
  • 如果您要从 Cloud Storage 扫描 BigQuery 外部表,请向 Dataplex 服务帐号授予该存储桶的 Cloud Storage roles/storage.objectViewer 角色。或者,为 Dataplex 服务帐号分配以下权限:

    • storage.buckets.get
    • storage.objects.get
  • 如果要在 Google Cloud 控制台的 BigQuery 和 Data Catalog 页面中针对源表发布数据质量扫描结果,您必须具有 BigQuery Data Editor (roles/bigquery.dataEditor) IAM 角色或该表的 bigquery.tables.update 权限。

  • 如果您需要访问受 BigQuery 列级访问权限政策保护的列,请为这些列分配 Dataplex 服务帐号权限。创建或更新数据扫描的用户还需要拥有这些列的权限。

  • 如果表启用了 BigQuery 行级访问权限政策,那么您只能扫描对 Dataplex 服务帐号可见的行。请注意,系统不会针对行级政策评估单个用户的访问权限。

数据扫描权限和角色

如需使用自动数据质量检查,您需要具备运行数据扫描的权限,或者具有运行数据扫描的预定义权限的角色。

下表列出了 DataScan 权限:

权限名称 授予执行以下操作的权限:
dataplex.datascans.create 创建 DataScan
dataplex.datascans.delete 删除 DataScan
dataplex.datascans.get 查看 ID 或时间表等操作元数据,但不包括结果和规则
dataplex.datascans.getData 查看 DataScan 详情,包括规则和结果
dataplex.datascans.list 列出 DataScan
dataplex.datascans.run 执行 DataScan
dataplex.datascans.update 更新 DataScan 的说明
dataplex.datascans.getIamPolicy 查看扫描的当前 IAM 权限
dataplex.datascans.setIamPolicy 设置针对扫描的 IAM 权限

向用户授予以下一个或多个角色:

  • roles/dataplex.dataScanAdmin:对 DataScan 资源的完整访问权限。
  • roles/dataplex.dataScanEditor:对 DataScan 资源拥有写入权限。
  • roles/dataplex.dataScanViewer:拥有对 DataScan 资源(不包括规则和结果)的读取权限。
  • roles/dataplex.dataScanDataViewer:对 DataScan 资源(包括规则和结果)的读取权限。

定义数据质量规则

您可以使用内置规则自定义 SQL 检查来定义数据质量规则。如果您使用的是 Google Cloud CLI,则可以在 JSON 或 YAML 文件中定义这些规则。

以下部分中的示例展示了如何定义各种数据质量规则。这些规则可验证包含客户交易相关数据的示例表。假设该表具有以下架构:

列名称 列类型 列说明
transaction_timestamp 时间戳 交易的时间戳。系统根据此字段对表进行分区。
customer_id 字符串 客户 ID,格式为 8 个字母后跟 16 位数字。
transaction_id 字符串 交易 ID 在整个表中必须是唯一的。
currency_id 字符串 一种支持的货币。货币类型必须与维度表“dim_currency”中的某个可用货币匹配。
amount 浮点数 交易金额。
discount_pct 浮点数 折扣百分比。该值必须介于 0 到 100 之间。

使用内置规则类型定义数据质量规则

以下示例规则基于内置规则类型。您可以使用 Google Cloud 控制台或 API 根据内置规则类型创建规则。Dataplex 可能会建议遵循其中的一些规则。

列名称 规则类型 建议的维度 规则参数
transaction_id 唯一性检查 唯一性 阈值:Not Applicable
amount Null 检查 完整性 阈值:100%
customer_id 正则表达式检查 有效期 正则表达式:^[0-9]{8}[a-zA-Z]{16}$
阈值:100%
currency_id 值设置检查 有效期 一组:USD,JPY,INR,GBP,CAN
阈值:100%

使用自定义 SQL 规则定义数据质量规则

如需构建自定义 SQL 规则,请使用以下框架:

  • 创建一次评估一行的规则时,请创建一个在 Dataplex 评估查询 SELECT COUNTIF(CUSTOM_SQL_EXPRESSION) FROM TABLE 时生成成功行数的表达式。Dataplex 会根据阈值检查成功的行数。

  • 当您创建跨行求值或使用表条件的规则时,请创建一个在 Dataplex 对查询 SELECT IF(CUSTOM_SQL_EXPRESSION) FROM TABLE 求值时返回成功或失败的表达式。

  • 创建用于评估数据集的无效状态的规则时,请提供返回无效行的语句。如果返回了任何行,则规则失败。在 SQL 语句中省略结尾的分号。

  • 您可以在规则中使用数据引用参数 ${data()} 来引用数据源表及其所有前提条件过滤条件,而无需明确提及源表及其过滤条件。前提条件过滤条件的示例包括行过滤条件、采样百分比和增量过滤条件。${data()} 参数区分大小写。

以下示例规则基于自定义 SQL 规则。

规则类型 规则说明 SQL 表达式
行条件 检查 discount_pct 的值是否在 0 到 100 之间。 0 < discount_pctdiscount_pct < 100
行条件 用于验证 currency_id 是否属于受支持的货币的参考检查。 currency_id in (select id from my_project_id.dim_dataset.dim_currency)
表条件 聚合 SQL 表达式,用于检查平均 discount_pct 是否介于 30% 到 50% 之间。 30<avg(discount) AND avg(discount) <50
行条件 检查某个日期是否不是将来的日期。 TIMESTAMP(transaction_timestamp) < CURRENT_TIMESTAMP()
表条件 一个 BigQuery 用户定义的函数 (UDF),用于检查平均交易金额是否小于每个国家/地区的预定义值。运行以下命令,创建 (JavaScript) UDF:
        CREATE OR REPLACE FUNCTION
        myProject.myDataset.average_by_country (
          country STRING, average FLOAT64)
        RETURNS BOOL LANGUAGE js AS R"""
        if (country = "CAN" && average < 5000){
          return 1
        } else if (country = "IND" && average < 1000){
          return 1
        } else { return 0 }
        """;
       
查看 country=CAN 平均交易金额的示例规则。
        myProject.myDataset.average_by_country(
        "CAN",
        (SELECT avg(amount) FROM
          myProject.myDataset.transactions_table
            WHERE currency_id = 'CAN'
        ))
      
表条件 一个 BigQuery ML 预测子句,用于标识 discount_pct 中的异常值。它会根据 customercurrencytransaction 检查是否应应用折扣。该规则至少在 99% 的情况下检查预测结果是否与实际值一致。假设:机器学习模型是在使用规则之前创建的。使用以下命令创建机器学习模型:
  CREATE MODEL
  model-project-id.dataset-id.model-name
        OPTIONS(model_type='logistic_reg') AS
  SELECT
  IF(discount_pct IS NULL, 0, 1) AS label,
  IFNULL(customer_id, "") AS customer,
  IFNULL(currency_id, "") AS currency,
  IFNULL(amount, 0.0) AS amount
  FROM
  `data-project-id.dataset-id.table-names`
  WHERE transaction_timestamp < '2022-01-01';
  
以下规则检查预测准确率是否大于 99%。
      SELECT
        accuracy > 0.99
      FROM
       ML.EVALUATE
        (MODEL model-project-id.dataset-id.model-name,
         (
          SELECT
            customer_id,
            currency_id,
            amount,
            discount_pct
          FROM
            data-project-id.dataset-id.table-names
          WHERE transaction_timestamp > '2022-01-01';
         )
        )
    
行条件 一个 BigQuery ML 预测函数,可识别 discount_pct 中的异常情况。该函数会根据 customercurrencytransaction 检查是否应应用折扣。该规则会识别所有与预测结果不匹配的情况。假设:机器学习模型是在使用规则之前创建的。使用以下命令创建机器学习模型:
  CREATE MODEL
  model-project-id.dataset-id.model-name
        OPTIONS(model_type='logistic_reg') AS
  SELECT
  IF(discount_pct IS NULL, 0, 1) AS label,
  IFNULL(customer_id, "") AS customer,
  IFNULL(currency_id, "") AS currency,
  IFNULL(amount, 0.0) AS amount
  FROM
  `data-project-id.dataset-id.table-names`
  WHERE transaction_timestamp < '2022-01-01';
  
以下规则可检查折扣预测结果是否与每行的实际值一致。
       IF(discount_pct > 0, 1, 0)
          =(SELECT predicted_label FROM
           ML.PREDICT(
            MODEL model-project-id.dataset-id.model-name,
              (
                SELECT
                  customer_id,
                  currency_id,
                  amount,
                  discount_pct
                FROM
                  data-project-id.dataset-id.table-names AS t
                    WHERE t.transaction_timestamp =
                     transaction_timestamp
                   LIMIT 1
              )
            )
         )
    
SQL 断言 通过检查是否存在任何折扣百分比小于或等于 30 的行,验证今天的 discount_pct 是否大于 30%。 SELECT * FROM my_project_id.dim_dataset.dim_currency WHERE discount_pct <= 30 AND transaction_timestamp >= current_date()
SQL 断言(使用数据引用参数

检查目前所有支持的货币的 discount_pct 是否大于 30%。

日期过滤条件 transaction_timestamp >= current_date() 作为行过滤条件应用于数据源表。

数据引用参数 ${data()} 充当 my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date() 的占位符并应用行过滤条件。

SELECT * FROM ${data()} WHERE discount_pct > 30

使用 gcloud CLI 定义数据质量规则

以下示例 YAML 文件使用的一些规则与使用内置类型的示例规则自定义 SQL 规则示例相同。您可以使用此 YAML 文件作为 gcloud CLI 命令的输入。

rules:
- uniquenessExpectation: {}
  column: transaction_id
  dimension: UNIQUENESS
- nonNullExpectation: {}
  column: amount
  dimension: COMPLETENESS
  threshold: 1
- regexExpectation:
    regex: '^[0-9]{8}[a-zA-Z]{16}$'
  column : customer_id
  ignoreNull : true
  dimension : VALIDITY
  threshold : 1
- setExpectation :
    values :
    - 'USD'
    - 'JPY'
    - 'INR'
    - 'GBP'
    - 'CAN'
  column : currency_id
  ignoreNull : true
  dimension : VALIDITY
  threshold : 1
- rangeExpectation:
    minValue : '0'
    maxValue : '100'
  column : discount_pct
  ignoreNull : true
  dimension : VALIDITY
  threshold : 1
- rowConditionExpectation:
    sqlExpression : 0 < `discount_pct` AND `discount_pct` < 100
  column: discount_pct
  dimension: VALIDITY
  threshold: 1
- rowConditionExpectation:
    sqlExpression : currency_id in (select id from `my_project_id.dim_dataset.dim_currency`)
  column: currency_id
  dimension: VALIDITY
  threshold: 1
- tableConditionExpectation:
    sqlExpression : 30 < avg(discount_pct) AND avg(discount_pct) < 50
  dimension: VALIDITY
- rowConditionExpectation:
    sqlExpression : TIMESTAMP(transaction_timestamp) < CURRENT_TIMESTAMP()
  column: transaction_timestamp
  dimension: VALIDITY
  threshold: 1
- sqlAssertion:
    sqlStatement : SELECT * FROM `my_project_id.dim_dataset.dim_currency` WHERE discount_pct > 100
  dimension: VALIDITY

创建数据质量扫描

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击创建数据质量扫描

  3. 定义扫描窗口中,填写以下字段:

    1. 输入显示名称

    2. 如果您未提供自己的 ID,系统会自动生成扫描 ID。 请参阅资源命名惯例

    3. (可选)输入说明

    4. 字段中,点击浏览,选择表,然后点击选择。Dataplex 仅支持标准 BigQuery 表。

      对于多区域数据集内的表,请选择要在其中创建数据扫描的区域。

      如需浏览在 Dataplex 数据湖中整理的表,请点击在 Dataplex 数据湖中浏览

    5. 范围字段中,选择增量数据整个数据

      • 如果选择增量:在时间戳列字段中,从 BigQuery 表中选择类型为 DATETIMESTAMP 且单调递增的列,该列可用于识别新记录。它可以是用于对表进行分区的列。
    6. 可选:添加标签。标签是 key:value 对,可让您将相关对象组合在一起或者与其他 Google Cloud 资源组合在一起。

    7. 要过滤数据,请点击过滤器。选中过滤行复选框。行过滤条件的输入值必须是有效的 SQL 表达式,该表达式可用作 BigQuery 标准 SQL 语法中 WHERE 子句的一部分。例如 col1 >= 0。过滤条件可以是多个列条件的组合。例如 col1 >= 0 AND col2 < 10

    8. 要对数据进行抽样,请在抽样规模列表中选择抽样百分比。选择 0.0% 到 100.0% 之间的百分比值,最多包含 3 位小数。对于较大的数据集,请选择较低的抽样百分比。例如,对于约为 1 PB 的表,如果您输入的值介于 0.1% 到 1.0% 之间,则 Dataplex 会采样 1-10 TB 的数据。对于增量数据扫描,Dataplex 会对最新的增量应用采样。

    9. 如需在 Google Cloud 控制台的 BigQuery 和 Data Catalog 页面中针对源表发布数据质量扫描结果,请点击将结果发布到 BigQuery 和 Dataplex Catalog 界面复选框。您可以在源表的 BigQuery 和 Data Catalog 页面的数据质量标签页中查看最新的扫描结果。如需让用户能够访问已发布的扫描结果,请参阅共享已发布的结果。在以下情况下,您可能无法使用发布方式:

      • 您没有访问表所需的权限。
      • 另一项数据质量扫描已设为发布结果。

      如需详细了解查看已发布的结果所需的权限,请参阅权限

    10. 点击继续

  4. 时间安排窗口中,选择以下选项之一:

    • 重复:按时间表运行数据质量扫描作业:每天、每周、每月或自定义。指定扫描的运行频率和时间。如果您选择自定义,请使用 cron 格式指定时间安排。

    • 按需:按需运行数据质量扫描作业。

    点击继续

  5. 数据质量规则窗口中,定义要为此数据质量扫描配置的规则。点击添加规则,然后选择以下选项之一。

    • 基于分析的建议:根据现有的数据分析扫描,根据建议构建规则。

      1. 选择列:选择要获取推荐规则的列。

      2. 扫描项目:根据现有数据分析扫描提供的建议。默认情况下,Dataplex 会从要创建数据质量扫描的同一项目中选择分析扫描。如果您在其他项目中创建了扫描,则必须指定要从哪个项目拉取分析扫描。

      3. 选择分析结果:根据您选择的列和项目,系统会显示多个分析结果。

      4. 选择一个或多个分析结果,然后点击确定。这会填充可供选择的规则列表。

      5. 勾选要修改的规则对应的复选框,然后点击选择。选定后,规则就会添加到当前规则列表中。然后,您可以修改这些规则。

    • 内置规则类型:根据预定义规则构建规则。请参阅预定义规则列表。

      1. 选择列:选择要为哪些列选择规则。

      2. 选择规则类型:根据您选择的列,系统会显示多种规则类型供您选择。

      3. 选择一种或多种规则类型,然后点击确定。这会填充可供选择的规则列表。

      4. 选中要修改的规则对应的复选框,然后点击选择。选定之后,这些规则就会添加到当前规则列表中。然后,您可以修改规则。

    • SQL 行检查规则:创建要应用于每一行的自定义 SQL 规则(自定义 SQL 行检查规则)。

      1. 在“维度”中,选择一个维度。

      2. 通过阈值中,选择必须通过检查的记录的百分比。

      3. 列名称中,选择一个列。

      4. 提供 SQL 表达式字段中,输入一个计算结果为布尔值 true(通过)或 false(失败)的 SQL 表达式。如需了解详情,请参阅支持的自定义 SQL 规则类型以及本文档定义数据质量规则部分中的示例。

      5. 点击添加

    • SQL 聚合检查规则:创建自定义 SQL 表条件规则。

      1. 在“维度”中,选择一个维度。

      2. 列名称中,选择一个列。

      3. 提供 SQL 表达式字段中,输入一个计算结果为布尔值 true(通过)或 false(失败)的 SQL 表达式。如需了解详情,请参阅支持的自定义 SQL 规则类型以及本文档定义数据质量规则部分中的示例。

      4. 点击添加

    • SQL 断言规则:创建自定义 SQL 断言规则以检查数据是否无效。

      1. 在“维度”中,选择一个维度。

      2. 可选:在列名称中,选择一个列。

      3. 提供 SQL 语句字段中,输入返回与无效状态匹配的行的 SQL 语句。如果返回任何行,则此规则失败。在 SQL 语句中省略结尾的分号。如需了解详情,请参阅支持的自定义 SQL 规则类型以及本文档定义数据质量规则部分中的示例。

      4. 点击添加

    Dataplex 允许为监控和提醒的数据质量规则使用自定义名称。对于任何数据质量规则,您可以选择指定自定义规则名称和说明。为此,请修改规则并指定以下详细信息:

    • 规则名称:输入自定义规则名称,最多包含 63 个字符。 规则名称可以包含字母(a-z、A-Z)、数字 (0-9) 和连字符 (-),必须以字母开头并以数字或字母结尾。
    • 说明:输入最长 1024 个字符的规则说明。

    点击继续

  6. 可选:将扫描结果导出到 BigQuery 标准表。点击浏览,选择用于存储数据质量扫描结果的现有 BigQuery 数据集。

    如果指定的表不存在,Dataplex 会为您创建。如果您使用的是现有表,请确保该表与导出表架构兼容。

  7. 点击创建

    创建扫描后,您可以随时点击立即运行来运行扫描。

gcloud

如需创建数据质量扫描,请使用 gcloud dataplex datascans create data-quality 命令

如果源数据是在 Dataplex 数据湖中整理的,请添加 --data-source-entity 标志:

gcloud dataplex datascans create data-quality DATASCAN \
    --location=LOCATION \
    --data-quality-spec-file=DATA_QUALITY_SPEC_FILE \
    --data-source-entity=DATA_SOURCE_ENTITY

如果源数据不是在 Dataplex 数据湖中整理的,请添加 --data-source-resource 标志:

gcloud dataplex datascans create data-quality DATASCAN \
    --location=LOCATION \
    --data-quality-spec-file=DATA_QUALITY_SPEC_FILE \
    --data-source-resource=DATA_SOURCE_RESOURCE

执行以下变量替换操作:

  • DATASCAN:数据质量扫描的名称。
  • LOCATION:要在其中创建数据质量扫描的 Google Cloud 区域。
  • DATA_QUALITY_SPEC_FILE:包含数据质量扫描规范的 JSON 或 YAML 文件的路径。该文件可以是本地文件,也可以是前缀为 gs:// 的 Cloud Storage 路径。使用此文件指定扫描的数据质量规则。您还可以在此文件中指定其他详细信息,例如过滤条件、采样百分比以及扫描后操作(例如导出到 BigQuery 或发送电子邮件通知)。请参阅 JSON 表示法文档
  • DATA_SOURCE_ENTITY:包含数据质量扫描数据的 Dataplex 实体。例如 projects/test-project/locations/test-location/lakes/test-lake/zones/test-zone/entities/test-entity
  • DATA_SOURCE_RESOURCE:包含数据质量扫描的数据的资源的名称。例如 //bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table

REST

使用 API Explorer 创建数据质量扫描

如果要使用基于数据分析扫描结果的规则建议来构建数据质量扫描规则,请对数据分析扫描调用 dataScans.jobs.generateDataQualityRules 方法来获取这些建议。

导出表架构

如需将数据质量扫描结果导出到现有 BigQuery 表,请确保它与以下表架构兼容:

列名 列数据类型 子字段名称
(如果适用)
子字段数据类型 模式 示例
data_quality_scan struct/record resource_name string 可为 null //dataplex.googleapis.com/projects/test-project/locations/europe-west2/datascans/test-datascan
project_id string 可为 null dataplex-back-end-dev-project
location string 可为 null us-central1
data_scan_id string 可为 null test-datascan
data_source struct/record resource_name string 可为 null 实体 case:
//dataplex.googleapis.com/projects/dataplex-back-end-dev-project/locations/europe-west2/lakes/a0-datascan-test-lake/zones/a0-datascan-test-zone/entities/table1

表 case://bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table
dataplex_entity_project_id string 可为 null dataplex-back-end-dev-project
dataplex_entity_project_number integer 可为 null 123456789
dataplex_lake_id string 可为 null (仅当来源为实体时才有效)
test-lake
dataplex_zone_id string 可为 null (仅当来源为实体时才有效)
test-zone
dataplex_entity_id string 可为 null (仅当来源为实体时才有效)
test-entity
table_project_id string 可为 null test-project
table_project_number integer 可为 null 987654321
dataset_id string 可为 null (仅当源为表时才有效)
test-dataset
table_id string 可为 null (仅当源为表时才有效)
test-table
data_quality_job_id string 可为 null caeba234-cfde-4fca-9e5b-fe02a9812e38
data_quality_job_configuration json trigger string 可为 null ondemand/schedule
incremental boolean 可为 null true/false
sampling_percent float 可为 null (0-100)
20.0(表示 20%)
row_filter string 可为 null col1 >= 0 AND col2 < 10
job_labels json 可为 null {"key1":value1}
job_start_time timestamp 可为 null 2023-01-01 00:00:00 UTC
job_end_time timestamp 可为 null 2023-01-01 00:00:00 UTC
job_rows_scanned integer 可为 null 7500
rule_name string 可为 null test-rule
rule_type string 可为 null Range Check
rule_evaluation_type string 可为 null Per row
rule_column string 可为 null Rule only attached to a certain column
rule_dimension string 可为 null UNIQUENESS
job_quality_result struct/record passed boolean 可为 null true/false
score float 可为 null 90.8
job_dimension_result json 可为 null {"ACCURACY":{"passed":true,"score":100},"CONSISTENCY":{"passed":false,"score":60}}
rule_threshold_percent float 可为 null (0.0-100.0)
Rule-threshold-pct in API * 100
rule_parameters json 可为 null {min: 24, max:5345}
rule_pass boolean 可为 null True
rule_rows_evaluated integer 可为 null 7400
rule_rows_passed integer 可为 null 3
rule_rows_null integer 可为 null 4
rule_failed_records_query string 可为 null "SELECT * FROM `test-project.test-dataset.test-table` WHERE (NOT((`cTime` >= '15:31:38.776361' and `cTime` <= '19:23:53.754823') IS TRUE));"

为数据质量扫描作业配置 BigQueryExport 时,请遵循以下准则:

  • 对于字段 resultsTable,请使用以下格式://bigquery.googleapis.com/projects/{project-id}/datasets/{dataset-id}/tables/{table-id}
  • 使用 BigQuery 标准表。
  • 如果创建或更新扫描时该表不存在,Dataplex 会为您创建该表。
  • 默认情况下,该表每天按 job_start_time 列进行分区。
  • 如果您希望该表使用其他配置进行分区,或者您不需要该分区,请使用所需的架构和配置重新创建该表,然后将预先创建的表作为结果表提供。
  • 确保结果表与源表位于同一位置。
  • 如果项目上配置了 VPC-SC,则结果表必须与源表位于同一 VPC-SC 边界内。
  • 如果该表在扫描执行阶段被修改,则当前正在运行的作业将导出到上一个结果表,并且表更改会从下一个扫描作业开始生效。
  • 请勿修改表架构。如果您需要自定义列,请在表上创建一个视图。
  • 为了降低费用,请根据您的使用场景设置分区的到期时间。如需了解详情,请参阅如何设置分区过期时间

运行数据质量扫描

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击要运行的数据质量扫描。

  3. 点击立即运行

gcloud

如需运行数据质量扫描,请使用 gcloud dataplex datascans run 命令

gcloud dataplex datascans run DATASCAN \
--location=LOCATION \

执行以下变量替换操作:

  • LOCATION:创建数据质量扫描的 Google Cloud 区域。
  • DATASCAN:数据质量扫描的名称。

REST

使用 API Explorer 运行数据质量扫描

查看数据质量扫描结果

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 如需查看扫描的详细结果,请点击扫描的名称。

    • 概览部分显示有关最近七个作业的信息,包括扫描的运行时间、每个作业中扫描的记录数、是否通过了所有数据质量检查、是否失败、失败的数据质量检查数量以及失败的维度。

    • 数据质量扫描配置部分会显示有关扫描的详细信息。

  3. 如需查看表示已通过规则百分比的数据质量得分,请点击作业历史记录标签页。然后,点击作业 ID。

gcloud

如需查看数据质量扫描作业的结果,请使用 gcloud dataplex datascans jobs describe 命令

gcloud dataplex datascans jobs describe JOB \
--location=LOCATION \
--datascan=DATASCAN \
--view=FULL

执行以下变量替换操作:

  • JOB:数据质量扫描作业的作业 ID。
  • LOCATION:创建数据质量扫描的 Google Cloud 区域。
  • DATASCAN:作业所属的数据质量扫描的名称。
  • --view=FULL:如需查看扫描作业结果,请指定 FULL

REST

使用 API Explorer 查看数据质量扫描的结果

查看历史扫描结果

Dataplex 会保存最近 300 个作业或过去一年(以先发生者为准)的数据质量扫描历史记录。

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击扫描的名称。

  3. 点击作业记录标签页。

    作业记录标签页提供有关过往作业的信息。该目录会列出所有作业、每个作业中扫描的记录数、作业状态、作业运行时间、每条规则通过还是失败等。

  4. 如需查看作业的详细信息,请点击作业 ID 列中的任意作业。

gcloud

如需查看数据质量扫描的所有作业,请使用 gcloud dataplex datascans jobs list 命令

gcloud dataplex datascans jobs list \
--location=LOCATION \
--datascan=DATASCAN \

执行以下变量替换操作:

  • LOCATION:创建数据质量扫描的 Google Cloud 区域。
  • DATASCAN:要查看其所有作业的数据质量扫描的名称。

REST

使用 API Explorer 查看所有扫描作业

分享已发布的结果

创建数据质量扫描时,如果您选择在 Google Cloud 控制台的 BigQuery 和 Data Catalog 页面中发布扫描结果,则这些页面的数据质量标签页中将显示最新的扫描结果。

您可以允许组织中的用户访问已发布的扫描结果。如需授予对扫描结果的访问权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击您要分享结果的数据质量扫描。

  3. 转到权限标签页。

  4. 点击授予访问权限

  5. 新的主帐号字段中,添加您要向其授予访问权限的主帐号。

  6. 选择角色字段中,选择 Dataplex DataScan DataViewer

  7. 点击保存

如需移除对主账号已发布的扫描结果的访问权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击您要分享结果的数据质量扫描。

  3. 转到权限标签页。

  4. 选择您要移除其 Dataplex DataScan DataViewer 角色的主账号。

  5. 点击解除使用权限

  6. 点击确认

在 Cloud Logging 中设置提醒

如需使用 Cloud Logging 中的日志设置数据质量失败的提醒,请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Logging 日志浏览器

    转到日志浏览器

  2. Query 窗口中,输入您的查询。请参阅示例查询

  3. 点击 Run Query

  4. 点击创建提醒。系统随即会打开一个侧边栏。

  5. 输入您的提醒政策名称,然后点击下一步

  6. 查看查询。

    1. 点击预览日志按钮以测试查询。这会显示具有匹配条件的日志。

    2. 点击下一步

  7. 设置通知的间隔时间,然后点击下一步

  8. 指定应向谁发送提醒,然后点击保存以创建提醒政策。

或者,您可以在 Google Cloud 控制台中导航到 Monitoring > Alerting,以配置和修改提醒。

gcloud

不支持。

REST

使用 API Explorer 在 Cloud Logging 中设置提醒。

用于设置作业级或维度级提醒的示例查询

  • 以下示例查询用于针对数据质量扫描设置整体数据质量失败的提醒:

    resource.type="dataplex.googleapis.com/DataScan"
    AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
    AND resource.labels.resource_container="projects/112233445566"
    AND resource.labels.datascan_id="a0-test-dec6-dq-3"
    AND NOT jsonPayload.dataQuality.passed=true
    
  • 以下示例查询用于针对指定数据质量扫描的某个维度(例如唯一性)设置数据质量失败提醒:

    resource.type="dataplex.googleapis.com/DataScan"
    AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
    AND resource.labels.resource_container="projects/112233445566"
    AND resource.labels.datascan_id="a0-test-dec6-dq-3"
    AND jsonPayload.dataQuality.dimensionPassed.UNIQUENESS=false
    
  • 此示例查询,用于针对表的数据质量失败设置提醒。

    • 为未在 Dataplex 数据湖中整理的 BigQuery 表设置数据质量失败提醒:

      resource.type="dataplex.googleapis.com/DataScan"
      AND jsonPayload.dataSource="//bigquery.googleapis.com/projects/test-project/datasets/testdataset/table/chicago_taxi_trips"
      AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
      AND resource.labels.resource_container="projects/112233445566"
      AND NOT jsonPayload.dataQuality.passed=true
      
    • 为在 Dataplex 数据湖中整理的 BigQuery 表设置数据质量失败提醒:

      resource.type="dataplex.googleapis.com/DataScan"
      AND jsonPayload.dataSource="projects/test-project/datasets/testdataset/table/chicago_taxi_trips"
      AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
      AND resource.labels.resource_container="projects/112233445566"
      AND NOT jsonPayload.dataQuality.passed=true
      

要设置每条规则提醒的示例查询

  • 以下示例查询使用指定自定义规则名称为数据质量扫描针对所有失败的数据质量规则设置提醒:

    resource.type="dataplex.googleapis.com/DataScan"
    AND jsonPayload.ruleName="custom-name"
    AND jsonPayload.result="FAILED"
    
  • 一个示例查询,用于针对数据质量扫描的特定评估类型的所有失败数据质量规则设置提醒:

    resource.type="dataplex.googleapis.com/DataScan"
    AND jsonPayload.evalutionType="PER_ROW"
    AND jsonPayload.result="FAILED"
    
  • 下面的示例查询用于针对用于数据质量扫描的表中某列的所有失败数据质量规则设置提醒:

    resource.type="dataplex.googleapis.com/DataScan"
    AND jsonPayload.column="CInteger"
    AND jsonPayload.result="FAILED"
    

排查数据质量故障问题

对于每个行级规则失败的作业,Dataplex 都会提供一个查询来获取失败的记录。运行此查询可查看与您的规则不匹配的记录。

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击您要排查其记录问题的扫描的名称。

  3. 点击作业记录标签页。

  4. 点击发现数据质量失败的作业的作业 ID。

  5. 在打开的作业结果窗口的规则部分中,找到查询以获取失败的记录列。对于失败的规则,请点击将查询复制到剪贴板

  6. 在 BigQuery 中运行查询,以查看导致作业失败的记录。

gcloud

不支持。

REST

使用 API Explorer 查看获取失败作业的失败记录的查询。

更新数据质量扫描

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 在要修改的扫描所在的行中,依次点击纵向三点状图标 > 修改

  3. 修改值。

  4. 点击保存

gcloud

如需更新数据质量扫描的说明,请使用 gcloud dataplex datascans update data-quality 命令

gcloud dataplex datascans update data-quality DATASCAN \
--location=LOCATION \
--description=DESCRIPTION

请替换以下内容:

  • DATASCAN:要更新的数据质量扫描的名称。
  • LOCATION:创建数据质量扫描的 Google Cloud 区域。
  • DESCRIPTION:数据质量扫描的新说明。

REST

使用 API Explorer 修改数据质量扫描

删除数据质量扫描

控制台

  1. 在 Google Cloud 控制台中,前往数据质量页面。

    前往“数据质量”

  2. 点击要删除的扫描。

  3. 点击删除

gcloud

如需删除数据质量扫描,请使用 gcloud dataplex datascans delete 命令

gcloud dataplex datascans delete DATASCAN \
--location=LOCATION \
--async

执行以下变量替换操作:

  • DATASCAN:要删除的数据质量扫描的名称。
  • LOCATION:创建数据质量扫描的 Google Cloud 区域。

REST

使用 API Explorer 删除数据质量扫描

后续步骤