Auto 数据质量概览

本文档介绍了 Dataplex 自动数据质量功能,可让您定义和衡量数据质量。您可以自动扫描数据、根据定义的规则验证数据,以及在数据不符合质量要求时记录提醒。您可以将数据质量规则和部署视为代码进行管理,从而提高数据生产流水线的完整性。

您可以先使用 Dataplex 数据分析规则建议,或在 Google Cloud 控制台中构建自定义规则。Dataplex 提供监控、问题排查和 Cloud Logging 提醒功能,这些功能与 Dataplex 自动数据质量功能集成。

概念模型

数据质量扫描会将质量规则应用于表数据,以报告结果。

数据扫描是一种 Dataplex 作业,用于从 BigQuery 和 Cloud Storage 中抽样数据并推断出各种类型的元数据。如需使用自动数据质量衡量表格质量,您需要创建一个类型为 data qualityDataScan 对象。扫描仅在一个 BigQuery 表上运行。扫描会使用 Google 租户项目中的资源,因此您无需设置自己的基础架构。

创建和使用数据质量扫描包括以下步骤:

  1. 定义数据质量规则
  2. 配置规则执行
  3. 分析数据质量扫描结果
  4. 设置监控和提醒
  5. 排查数据质量问题

规则定义

与数据质量扫描关联的数据质量规则用于定义数据预期。您可以通过以下方式创建数据质量规则:

预定义规则

Dataplex 支持两类预定义规则:行级规则或汇总规则。

行级

对于行级类别规则,系统会对每行数据应用预期值。每行都会独立通过或失败条件。例如 column_A_value < 1

行级检查需要您指定通过阈值。如果通过规则的行所占百分比低于阈值,则该规则会失败。

汇总

对于汇总规则,预期值会应用于整个数据汇总的单个值。例如:Avg(someCol) >= 10如需通过验证,检查必须求值为布尔值 true。汇总规则不会为每行提供独立的通过或失败计数。

对于这两类规则,您可以设置以下参数:

  • 规则应用的列。
  • 一组预定义维度中的某个维度

下表列出了受支持的行级规则和汇总规则类型:

规则类型
( Google Cloud 控制台中的名称)
行级规则或汇总规则 说明 支持的列类型 规则专用参数
RangeExpectation
范围检查
行级 检查值是否介于最小值和最大值之间。 所有数字、日期和时间戳类型的列。 必填
  • 及格阈值百分比
  • minmax 值:至少指定一个值。
可选
  • 启用 strict min:启用后,规则检查会使用“>”而不是“>=”。
  • 启用 strict max:启用后,规则检查会使用“<”而不是“<=”。
  • 启用 ignore null:启用后,规则检查会忽略 null 值。
NonNullExpectation
Null 检查
行级 验证列值是否为 NULL。 所有受支持的列类型。 必填
  • 及格阈值百分比。
SetExpectation
设置核对
行级 检查某个列中的值是否为某个集合中的指定值之一。 RecordStruct 之外的所有受支持的列类型。 必填
  • 要进行对比的一组字符串值。
  • 及格阈值百分比。
可选
  • 启用 ignore null:如果启用,规则检查会忽略 null 值。
RegexExpectation
正则表达式检查
行级 检查值是否符合指定的正则表达式。 字符串 必填
  • 用于进行检查的正则表达式模式。
  • 及格阈值百分比。
  • 注意:Google 标准 SQL 通过 re2 库提供正则表达式支持;如需了解正则表达式的语法,请参阅该文档。
可选
  • 启用 ignore null:如果启用,规则检查会忽略 null 值。
Uniqueness
唯一性检查
汇总 检查列中的所有值是否都是唯一的。 RecordStruct 之外的所有受支持的列类型。 必填
  • 从受支持的参数中获取列和维度。
可选
  • 启用 ignore null:如果启用,规则检查会忽略 null 值。
StatisticRangeExpectation
统计检查
汇总 检查给定的统计量是否符合预期的范围。 所有受支持的数值列类型。 必填
  • meanminmax 值:请至少指定一个值。
可选
  • 启用 strict min:启用后,规则检查会使用“>”而不是“>=”。
  • 启用 strict max:启用后,规则检查会使用“<”而不是“<=”。

支持的自定义 SQL 规则类型

SQL 规则可让您灵活地使用自定义逻辑扩展验证。这些规则分为以下几类。

规则类型 行级规则或汇总规则 说明 支持的列类型 规则专用参数 示例
行条件 行级

WHERE 子句中定义 SQL 表达式,为每行指定预期值。每个行的 SQL 表达式应计算结果为 true(通过)或 false(失败)。 Dataplex 会计算符合此预期的行所占的百分比,并将此值与通过阈值百分比进行比较,以确定规则是成功还是失败。

该表达式可以包含对另一个表的引用,例如,用于创建参照完整性检查。

所有列 必填
  • 要使用的 SQL 条件
  • 及格阈值百分比
  • 维度
可选
  • 要与此规则关联的列。
grossWeight <= netWeight
表条件
(汇总 SQL 表达式)
汇总

系统将为每个表执行一次这些规则。提供一个计算结果为布尔值 true(通过)或 false(失败)的 SQL 表达式。

SQL 表达式可以使用表达式子查询添加对另一个表的引用。

所有列 必填
  • 要使用的 SQL 条件
  • 维度
可选
  • 要与此规则关联的列

简单汇总示例:
avg(price) > 100

使用表达式子查询比较不同表中的值:
(SELECT COUNT(*) FROM `example_project.example_dataset.different-table`) < COUNT(*)

SQL 断言 汇总

断言规则使用数据质量查询来查找不满足查询中指定的一个或多个条件的行。提供要评估的 SQL 语句,以返回与无效状态匹配的行。如果查询返回了任何行,则规则会失败。

从 SQL 语句中省略尾部英文分号。

SQL 语句可以使用表达式子查询添加对另一个表的引用。

所有列 必填
  • 用于检查无效状态的 SQL 语句
  • 维度
可选
  • 要与此规则关联的列。

以下是一个简单的汇总示例,用于确保 discount_pct 不大于 100:
SELECT * FROM example_project.example_dataset.table WHERE discount_pct > 100

使用表达式子查询比较不同表中的值:
SELECT * FROM `example_project.example_dataset.different-table` WHERE gross_weight > (SELECT avg(gross_weight) FROM `example_project.example_dataset.different-table`)

如需查看规则示例,请参阅自动数据质量示例规则

如需了解支持的 SQL 函数,请参阅 GoogleSQL 参考文档

维度

借助维度,您可以汇总多个数据质量规则的结果,以便进行监控和提醒。您必须将每个数据质量规则与一个维度相关联。Dataplex 支持以下维度:

  • 时效性
  • 音量
  • 完整性
  • 有效期
  • 一致性
  • 准确率
  • 唯一性

规则中的输入

所有值形参都会作为字符串值传递给 API。Dataplex 要求输入遵循 BigQuery 指定的格式

二进制类型的参数可以作为 base64 编码字符串传递。

类型 支持的格式 示例
二进制 Base64 编码的值 YXBwbGU=
时间戳 YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]] [time_zone]
或 YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]][time_zone_offset]
2014-09-27 12:30:00.45-08
日期 YYYY-M[M]-D[D] 2014-09-27
时间 [H]H:[M]M:[S]S[.DDDDDD] 12:30:00.45
DateTime YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD]] 2014-09-27 12:30:00.45

数据引用参数

创建自定义 SQL 规则时,您可以在规则中使用数据引用参数 ${data()} 引用数据源表及其所有前提条件过滤条件,而无需明确提及源表及其过滤条件。Dataplex 会将该参数解读为对源表及其过滤条件的引用。前提条件过滤器的示例包括行过滤器、抽样百分比和增量过滤器。

例如,假设您有一个名为 my_project_id.dim_dataset.dim_currency 的数据源表。您想运行增量数据质量扫描,仅扫描新的每日数据。系统会对表格应用用于过滤出今天条目的行过滤条件 transaction_timestamp >= current_date()

用于查找今天包含 discount_pct 的行的自定义 SQL 规则如下所示:

discount_pct IN (SELECT discount_pct FROM my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date())

如果您使用数据引用参数,则可以简化规则。将表及其前提条件过滤条件的提及替换为 ${data()} 参数:

discount_pct IN (SELECT discount_pct FROM ${data()})

Dataplex 会将 ${data()} 参数解读为对包含今天条目的数据源表 my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date() 的引用。在此示例中,数据引用参数仅引用增量数据。

${data()} 参数区分大小写。

在子查询中使用别名引用来源表中的列时,请使用数据引用参数引用来源表,或者省略表引用。请勿在 WHERE 子句中使用直接表引用来引用来源表中的列。

推荐:

  • 使用数据引用参数引用来源表:

    discount_pct IN (
    SELECT discount_pct FROM
    `my_project_id.dim_dataset.dim_currency` AS temp-table
    WHERE
    temp-table.transaction_timestamp = ${data()}.timestamp
    )
    
  • 省略表引用:

    discount_pct IN (
    SELECT discount_pct FROM
    `my_project_id.dim_dataset.dim_currency` AS temp-table
    WHERE
    temp-table.transaction_timestamp = timestamp
    )
    

不推荐:

  • 请勿使用直接表引用来引用来源表中的列:

    discount_pct IN (
    SELECT discount_pct FROM
    `my_project_id.dim_dataset.dim_currency` AS temp-table
    WHERE
    temp-table.transaction_timestamp = `my_project_id.dim_dataset.dim_currency`.timestamp
    )
    

规则执行

您可以安排数据质量扫描以特定间隔时间运行,也可以按需运行扫描。如需管理数据质量扫描,您可以使用 API 或Google Cloud 控制台。

当您运行数据质量扫描时,Dataplex 会创建一个作业。在数据质量扫描规范中,您可以将作业的范围指定为以下任一选项:

完整表格
每个作业都会对整个表进行验证。
增量
每个作业都会验证增量数据。如需确定增量,请在表中提供一个可用作标记的 Date / Timestamp 列。通常,这是用于对表进行分区的列。

过滤数据

Dataplex 可以使用行过滤器过滤要扫描以检查数据质量的数据。通过创建行过滤条件,您可以着重分析特定时间段内或特定细分(例如特定区域)内的数据。使用过滤器可以缩短执行时间和降低费用,例如过滤掉时间戳早于特定日期的数据。

样本数据

借助 Dataplex,您可以指定要从数据中抽取的记录百分比,以运行数据质量扫描。与查询整个数据集相比,对较小的数据样本创建数据质量扫描可以缩短执行时间并降低费用。

数据质量扫描结果

您可以在 Dataplex 中查看数据质量扫描的结果。您还可以使用以下方法查看和分析扫描结果:

  • 将结果导出到 BigQuery

    您可以将扫描结果导出到 BigQuery 表中,以便进一步分析。如需自定义报告,您可以将 BigQuery 表数据连接到 Looker 信息中心。您可以通过在多项扫描中使用相同的结果表来构建汇总报告。

  • 在 Google Cloud 控制台中发布结果

    您可以将数据质量扫描结果发布到Google Cloud 控制台中源表的 BigQuery 和 Data Catalog 页面。您可以在源表的数据质量标签页中查看最新的扫描结果。

  • 查看数据质量得分

    每个扫描结果都会提供数据质量得分,该得分表示通过规则的百分比。系统会在整个作业级别、列级别(如果规则是针对列进行评估)和维度级别报告得分。使用数据质量得分来对表格或列中的数据质量进行标准化处理、跟踪趋势,以及找出不符合质量要求的数据。

如需了解详情,请参阅查看数据质量扫描结果

监控和提醒

您可以使用以下方法监控数据质量扫描并接收相关提醒:

  • 在 Cloud Logging 中设置提醒

    您可以使用 Logs Explorer 中的 data_scandata_quality_scan_rule_result 日志监控数据质量作业。

    对于每个数据质量作业,将 data_scan_type 字段设为 DATA_QUALITYdata_scan 日志包含以下信息:

    • 用于数据扫描的数据源。
    • 作业执行详情,例如创建时间、开始时间、结束时间和作业状态。
    • 数据质量作业的结果:通过或失败。
    • 维度级通过或失败。

    每个成功的作业都包含一个 data_quality_scan_rule_result 日志,其中包含有关该作业中每条规则的以下详细信息:

    • 配置信息,例如规则名称、规则类型、评估类型和维度。
    • 结果信息,例如通过或失败、总行数、通过行数、null 行数和已评估行数。

    您可以通过 API 和Google Cloud 控制台获取日志中的信息。您可以使用这些信息来设置提醒。如需了解详情,请参阅在 Logging 中设置提醒

  • 发送电子邮件通知报告

    您可以发送电子邮件通知报告,以便提醒用户数据质量作业的状态和结果。通知报告适用于以下场景:

    • 数据质量得分低于指定的目标得分
    • 作业失败
    • 作业已完成

    您可以在创建数据质量扫描时配置通知报告。

排查数据质量问题

当规则失败时,Dataplex 会生成一个查询来获取失败的记录。运行此查询可查看与您的规则不匹配的记录。如需了解详情,请参阅排查数据质量问题

限制

  • 数据质量扫描结果不会作为标记发布到 Data Catalog。
  • gcloud CLI 不支持规则建议。
  • 维度选择固定为预定义的七个维度之一。
  • 每次数据质量扫描的规则数量限制为 1,000 条。
  • 只有 API 支持在列级报告数据质量得分。

价格

  • Dataplex 使用高级处理 SKU 来对自动数据质量功能收费。如需了解详情,请参阅 Dataplex 价格

  • 尚不支持将自动数据质量结果发布到目录。该功能推出后,其价格将与目录元数据存储空间价格相同。如需了解详情,请参阅价格

  • 自动数据质量的 Dataplex 高级处理按秒计费,最低计费时间为 1 分钟。

  • 数据质量扫描失败不收费。

  • 费用取决于行数、列数、已扫描的数据量、数据质量规则配置、表的分区和分片设置以及扫描频率。

  • 您可以通过以下几种方式降低自动数据质量扫描的费用:

  • 如需在 Dataplex 高级处理 SKU 中将数据质量费用与其他费用分开,请在 Cloud Billing 报告中使用标签 goog-dataplex-workload-type 和值 DATA_QUALITY

  • 如需过滤汇总费用,请使用以下标签:

    • goog-dataplex-datascan-data-source-dataplex-entity
    • goog-dataplex-datascan-data-source-dataplex-lake
    • goog-dataplex-datascan-data-source-dataplex-zone
    • goog-dataplex-datascan-data-source-project
    • goog-dataplex-datascan-data-source-region
    • goog-dataplex-datascan-id
    • goog-dataplex-datascan-job-id

后续步骤