本文档介绍了 Dataplex 自动数据质量功能,该功能让您能够定义和衡量数据质量。您可以自动扫描数据,根据定义的规则验证数据,并在数据不符合质量要求时记录提醒。您能够以代码的形式管理数据质量规则和部署,从而提高数据生产流水线的完整性。
您可以先使用 Dataplex 数据分析规则建议,或者在 Google Cloud 控制台中构建自定义规则。Dataplex 提供与 Dataplex 自动数据质量集成的监控、问题排查和 Cloud Logging 提醒功能。
概念模型
数据扫描属于 Dataplex 作业,它会对 BigQuery 和 Cloud Storage 中的数据进行采样并推断出各种类型的元数据。如需使用自动数据质量衡量表的质量,请创建一个类型为 data quality
的 DataScan
对象。扫描仅在一个 BigQuery 表上运行。该扫描使用 Google 租户项目中的资源,因此您无需设置自己的基础架构。
创建和使用数据质量扫描包括以下步骤:
- 规则定义
- 规则执行
- 监控和提醒
- 问题排查
规则定义
与数据质量扫描相关的数据质量规则定义了数据预期。您可以通过以下方式创建数据质量规则:
- 使用 Dataplex 数据分析中的建议
- 使用预定义规则
- 创建自定义 SQL 规则
预定义规则
Dataplex 支持两类预定义规则:行级或聚合。
- 行级
对于行级类别规则,预期将应用于每个数据行。每一行独立通过或失败该条件。例如
column_A_value < 1
。行级检查要求您指定通过阈值。当通过规则的行数百分比低于阈值时,规则失败。
- 汇总
对于汇总规则,期望值适用于在整个数据中汇总的单个值。例如:
Avg(someCol) >= 10
如需通过,检查必须计算为布尔值true
。汇总规则不会为每行提供独立的通过或失败计数。
对于这两种规则类别,您可以设置以下参数:
- 应用规则的列。
- 一组预定义维度中的维度。
下表列出了支持的行级和汇总规则类型:
规则类型 (Google Cloud 控制台中的名称) |
行级规则或汇总规则 | 说明 | 支持的列类型 | 针对特定规则的参数 |
---|---|---|---|---|
RangeExpectation (范围检查) |
行级 | 检查该值是否介于最小值和最大值之间。 | 所有数字、日期和时间戳类型列。 | 必需:
|
NonNullExpectation (Null 检查) |
行级 | 验证列值是否不是 NULL。 | 所有受支持的列类型。 | 必需:
|
SetExpectation (设置检查) |
行级 | 检查列中的值是否为集内的指定值之一。 | 除 Record 和 Struct 之外的所有列类型。 |
必需:
|
RegexExpectation (正则表达式检查) |
行级 | 根据指定的正则表达式检查值。 | 字符串 | 必需:
|
Uniqueness (唯一性检查) |
汇总 | 检查某个列中的所有值是否具有唯一性。 | 除 Record 和 Struct 之外的所有列类型。 |
必需:
|
StatisticRangeExpectation (统计信息检查) |
汇总 | 检查给定的统计度量是否符合预期范围。 | 所有支持的数字列类型。 | 必需:
|
支持的自定义 SQL 规则类型
SQL 规则可让您灵活地使用自定义逻辑扩展验证。这些规则包括以下类型:
规则类型 | 行级规则或汇总规则 | 说明 | 支持的列类型 | 针对特定规则的参数 | 示例 |
---|---|---|---|---|---|
行条件 | 行级 | 通过在 表达式可以包含对另一个表的引用,例如,用于创建参照完整性检查。 |
所有列 | 必需:
|
grossWeight <= netWeight |
聚合 SQL 表达式 | 汇总 | 系统将为每个表执行一次这些规则。提供一个计算结果为布尔值 |
所有列 | 必需:
|
简单的汇总示例: 使用表达式子查询比较不同表中的值: |
SQL 断言 | 汇总 | 断言规则使用数据质量查询来查找不符合查询中指定的一个或多个条件的行。提供一个 SQL 语句,该语句通过求值结果返回与无效状态匹配的行。如果查询返回任何行,则规则失败。 省略 SQL 语句中的尾随分号。 |
所有列 | 必需:
|
确保 使用表达式子查询比较不同表中的值: |
如需查看规则示例,请参阅自动数据质量示例规则。
如需了解支持的 SQL 函数,请参阅 GoogleSQL 参考文档。
维度
通过维度,您可以汇总用于监控和提醒的多条数据质量规则的结果。您必须将每条数据质量规则与一个维度相关联。Dataplex 支持以下维度:
- 时效性
- 音量
- 完整性
- 有效性
- 一致性
- 准确率
- 唯一性
在规则中输入了内容
所有值参数都将作为字符串值传递给 API。Dataplex 要求输入遵循 BigQuery 指定格式。
二进制类型的参数可以作为 base64 编码字符串传递。
类型 | 支持的格式 | 示例 |
---|---|---|
二元 | Base64 编码值 | YXBwbGU= |
时间戳 | YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]] [时区] OR 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()}
来引用数据源表及其所有前提条件过滤条件,而无需明确提及源表及其过滤条件。前提条件过滤条件的示例包括行过滤条件、抽样百分比和增量过滤条件。${data()}
参数区分大小写。
例如,假设您有一个名为 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())
如果您使用数据引用参数,则可以简化规则:
discount_pct IN (SELECT discount_pct FROM ${data()})
此示例中的 ${data()}
参数引用了包含当前条目 my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date()
的数据源表。在此示例中,数据引用参数仅引用增量数据。
在子查询中使用别名来引用源表中的列时,请使用数据引用参数来引用源表,或者省略表引用。请勿在 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,您可以指定数据中要采样的记录百分比,以便运行数据质量扫描。针对较小的数据样本创建数据质量扫描可以减少执行时间并降低查询整个数据集的成本。
监控和提醒
您可以将扫描结果导出到 BigQuery 表以供进一步分析。如需自定义报告,您可以将 BigQuery 表数据连接到 Looker 信息中心。您可以在多次扫描中使用同一个结果表来构建汇总报告。
您可以在日志浏览器中使用 data_scan
和 data_quality_scan_rule_result
日志监控数据质量作业。
对于每个数据质量作业,data_scan_type
字段设置为 DATA_QUALITY
的 data_scan
日志包含以下信息:
- 用于数据扫描的数据源。
- 作业执行详细信息,例如创建时间、开始时间、结束时间和作业状态。
- 数据质量作业的结果:通过或失败。
- 维度级的通过或未通过。
每个成功的作业都包含一个 data_quality_scan_rule_result
日志,其中包含有关该作业中每条规则的以下详细信息:
- 配置信息,例如规则名称、规则类型、评估类型和维度。
- 结果信息,如通过或失败、总行数、通过的行数、null 行数和已评估的行数。
日志中的信息可通过 API 和 Google Cloud 控制台获取。您可以使用此信息来设置提醒。如需了解详情,请参阅在 Cloud Logging 中设置提醒。
排查故障
当规则失败时,Dataplex 会生成一个查询,该查询会返回表的所有列(而不仅仅是失败的列)。
限制
- 数据质量扫描结果不会作为标记发布到 Data Catalog。
- 只有 Google Cloud 控制台支持规则建议。
- 维度的选择固定为预定义的七个维度之一。
- 每次数据质量扫描的规则数量上限为 1,000。
价格
Dataplex 使用高级处理 SKU 对自动数据质量进行收费。如需了解详情,请参阅 Dataplex 价格。
目前尚无法将自动数据质量结果发布到目录。当该 Cloud Storage 可用时,我们将按与 Catalog 元数据存储价格相同的费率收取费用。如需了解详情,请参阅价格。
用于自动数据质量的 Dataplex 高级处理功能按秒计费,最低一分钟起算。
数据质量扫描失败不会产生任何费用。
费用取决于行数、列数、您扫描的数据量、数据质量规则配置、表上的分区和聚类设置以及 gscan 的频率。
以下几种方法可以降低自动数据质量扫描的成本:
将数据质量费用与 Dataplex 高级处理 SKU 中的其他费用分开,请使用标签
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
后续步骤
- 了解如何使用自动数据质量功能。
- 了解数据分析。
- 了解如何使用数据分析功能。