借助 Dataplex Universal Catalog 自动化数据质量功能,您可以定义和衡量 BigQuery 表中数据的质量。您可以自动扫描数据,根据定义的规则验证数据,并在数据不符合质量要求时记录提醒。您可以将数据质量规则和部署作为代码进行管理,从而提高数据生产流水线的完整性。
您可以先使用 Dataplex Universal Catalog 数据分析规则建议,也可以在 Google Cloud 控制台中构建自定义规则。Dataplex Universal Catalog 提供与 Dataplex Universal Catalog 自动数据质量功能集成的监控、问题排查和 Cloud Logging 提醒。
概念模型
数据扫描是一项 Dataplex Universal Catalog 作业,用于对 BigQuery 和 Cloud Storage 中的数据进行抽样,并推断各种类型的元数据。如需使用自动数据质量功能来衡量表的质量,请创建类型为 data quality
的 DataScan
对象。扫描仅在一个 BigQuery 表上运行。扫描使用 Google 租户项目中的资源,因此您无需设置自己的基础架构。
创建和使用数据质量扫描包括以下步骤:
- 定义数据质量规则
- 配置规则执行
- 分析数据质量扫描结果
- 设置监控和提醒
- 排查数据质量失败问题
规则定义
与数据质量扫描相关联的数据质量规则定义了数据预期。您可以通过以下方式创建数据质量规则:
- 使用 Dataplex Universal Catalog 数据分析提供的建议
- 使用预定义规则
- 创建自定义 SQL 规则
预定义规则
Dataplex Universal Catalog 支持两类预定义规则:行级规则或汇总级规则。
- 行级
对于行级类别规则,系统会针对每个数据行应用预期值。每个行都会独立通过或未通过相应条件。例如
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 语句中省略末尾的分号。 SQL 语句可以使用表达式子查询添加对另一个表的引用。 |
所有列 | 必需:
|
以下是一个简单的汇总示例,用于确保 使用表达式子查询比较不同表中的值: |
如需查看规则示例,请参阅自动数据质量规则示例。
如需了解支持的 SQL 函数,请参阅 GoogleSQL 参考文档。
维度
借助维度,您可以汇总多条数据质量规则的结果,以便进行监控和提醒。您必须将每个数据质量规则与一个维度相关联。Dataplex Universal Catalog 提供以下维度:
- 时效性
- “新鲜度”指标用于衡量数据的上次更新时间。有了这些信息,您就可以判断数据是否足够新,是否有用。
- 音量
- “量”用于衡量是否包含所有预期数据。
- 完整性
- 完整性用于评估数据是否包含实现预期用途所需的所有信息。
- 有效期
- 有效性用于评估数据是否符合预定义的格式、可接受的范围或其他标准。例如,如果有效日期的格式必须为
YYYY/mm/dd
,那么 08-12-2019 就是无效数据。再举一个例子,如果某商品的有效促销价格介于 10 美元和 20 美元之间,那么 100 美元的促销价格就是无效数据。 - 一致性
- 一致性是指在多个实例(例如表和列)中,数据具有相同的值。例如,当从销售数据库或使用情况数据库读取某个产品的收入时,如果收入不同,就会出现数据不一致的情况。
- 准确率
- 准确性反映了数据的正确性。请注意,有效的数据不一定准确。例如,棕色可能是一种有效的发色,但如果某人不是棕色头发,那么这就是不准确的数据。
- 唯一性
- 唯一性用于衡量数据是否具有唯一性,即是否没有重复项。
规则中的文字输入
所有值形参都以字符串值的形式传递给 API。 Dataplex Universal Catalog 要求输入遵循 BigQuery 指定的格式。
二进制类型的参数可以作为 base64 编码的字符串传递。
类型 | 支持的格式 | 示例 |
---|---|---|
二进制 | Base64 编码的值 | YXBwbGU= |
时间戳 | YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]] [时区] 或 YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]][时区偏移量] |
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 Universal Catalog 会将该参数解读为对源表及其过滤条件的引用。前提条件过滤器的示例包括行过滤器、抽样百分比和增量过滤器。
例如,假设您有一个名为 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 Universal Catalog 将 ${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 Universal Catalog 会创建一个作业。在指定数据质量扫描时,您可以将作业的范围指定为以下任一值:
- 完整表格
- 每个作业都会验证整个表。
- 增量
- 每个作业都会验证增量数据。如需确定增量,请在表格中提供可用作标记的
Date
/Timestamp
列。通常,这是用于对表进行分区的列。
过滤数据
Dataplex Universal Catalog 可以使用行过滤条件来过滤要扫描的数据,以进行数据质量检查。创建行过滤条件后,您可以重点关注特定时间段或特定细分(例如特定区域)内的数据。使用过滤条件可以缩短执行时间并降低费用,例如,过滤掉时间戳早于特定日期的数据。
样本数据
借助 Dataplex Universal Catalog,您可以指定要抽样的数据记录百分比,以便运行数据质量扫描。与查询整个数据集相比,对较小的数据样本创建数据质量扫描可以缩短执行时间并降低费用。
数据质量扫描结果
数据质量扫描的结果可在 Dataplex Universal Catalog 中查看。您还可以使用以下方法查看和分析扫描结果:
将结果导出到 BigQuery
您可以将扫描结果导出到 BigQuery 表中,以便进一步分析。如需自定义报告,您可以将 BigQuery 表数据连接到 Looker 信息中心。您可以通过在多次扫描中使用同一结果表来生成汇总报告。
将结果发布为 Dataplex Universal Catalog 元数据
您可以将数据质量扫描结果发布为 Dataplex Universal Catalog 元数据。最新结果会保存到表示源表的 Dataplex Universal Catalog 条目中,位于
data-quality-scorecard
系统切面类型下。您可以在 Google Cloud 控制台中源表的 BigQuery 和 Dataplex Universal Catalog 页面上的数据质量标签页中查看结果。您还可以使用 API 检索结果。如需详细了解 Dataplex Universal Catalog 元数据,请参阅 Dataplex Universal Catalog 中的数据目录管理简介。
查看数据质量得分
每次扫描结果都会提供数据质量得分,以指示通过的规则所占的百分比。系统会在作业总体层面、列层面(如果规则是针对列进行评估的)和维度层面报告得分。您可以使用数据质量得分来规范化表或列之间的数据质量、跟踪趋势,并识别不符合质量要求的数据。
如需了解详情,请参阅查看数据质量扫描结果。
监控和提醒
您可以使用以下方法监控数据质量扫描并接收相关提醒:
在 Cloud Logging 中设置提醒
您可以使用 Logs Explorer 中的
data_scan
和data_quality_scan_rule_result
日志监控数据质量作业。对于每个数据质量作业,
data_scan_type
字段设置为DATA_QUALITY
的data_scan
日志包含以下信息:- 用于数据扫描的数据源。
- 作业执行详情,例如创建时间、开始时间、结束时间和作业状态。
- 数据质量作业的结果:通过或失败。
- 维度级通过或失败。
每个成功完成的作业都包含一个
data_quality_scan_rule_result
日志,其中包含有关该作业中每条规则的以下详细信息:- 配置信息,例如规则名称、规则类型、评估类型和维度。
- 结果信息,例如通过或失败、总行数、通过的行数、null 行数和评估的行数。
您可以通过 API 和Google Cloud 控制台查看日志中的信息。您可以使用这些信息来设置提醒。如需了解详情,请参阅在 Logging 中设置提醒。
发送电子邮件通知报告
您可以发送电子邮件通知报告,提醒相关人员数据质量作业的状态和结果。通知报告适用于以下场景:
- 数据质量得分低于指定的目标得分
- 作业失败
- 作业已完成
您可以在创建数据质量扫描时配置通知报告。
排查数据质量失败问题
如果规则失败,Dataplex Universal Catalog 会生成一个查询来获取失败的记录。运行此查询可查看与您的规则不匹配的记录。如需了解详情,请参阅排查数据质量失败问题。
限制
- Google Cloud 控制台不支持将数据质量扫描结果发布为 Dataplex Universal Catalog 元数据。
- gcloud CLI 不支持规则建议。
- 维度选择固定为预定义的七个维度之一。
- 每次数据质量扫描的规则数量上限为 1,000 条。
- API 中仅支持在列级报告的数据质量得分。
价格
Dataplex Universal Catalog 使用高级处理 SKU 来收取自动数据质量费用。如需了解详情,请参阅 Dataplex Universal Catalog 价格。
Dataplex Universal Catalog 高级处理(用于自动数据质量检查)按秒计费,最低计费时间为 1 分钟。
失败的数据质量扫描不会产生任何费用。
费用取决于行数、列数、扫描的数据量、数据质量规则配置、表的分区和聚类设置以及扫描频率。
您可以通过以下几种方式来降低自动数据质量扫描的费用:
如需在 Dataplex Universal Catalog 高级处理 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