本页介绍了如何创建 Dataplex 数据质量扫描。
如需了解数据质量扫描,请参阅自动数据质量简介。
准备工作
启用 Dataplex API。
可选:如果您希望 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 服务账号授予 Dataplex Metadata Reader (
roles/dataplex.metadataReader
) 和 Dataplex Viewer (roles/dataplex.viewer
) IAM 角色。或者,您需要具备以下所有权限: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 权限 |
向用户授予以下一个或多个角色:
- 对
DataScan
资源拥有完全访问权限:Dataplex DataScan Administrator (roles/dataplex.dataScanAdmin
) - 对
DataScan
资源的写入权限:Dataplex DataScan Editor (roles/dataplex.dataScanEditor
) - 对
DataScan
资源(规则和结果除外)的读取权限: Dataplex DataScan Viewer (roles/dataplex.dataScanViewer
) - 对
DataScan
资源(包括规则和结果)的读取权限:Dataplex DataScan DataViewer (roles/dataplex.dataScanDataViewer
)
定义数据质量规则
您可以使用内置规则或自定义 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_pct AND discount_pct < 100
|
行条件 | 引用检查,用于验证 currency_id 是否为受支持的币种之一。
|
currency_id in (select id from my_project_id.dim_dataset.dim_currency)
|
表条件 | 用于检查平均 discount_pct 是否介于 30% 到 50% 之间的汇总 SQL 表达式。
|
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 predict 子句,用于识别 discount_pct 中的异常值。它会检查是否应根据 customer 、currency 和 transaction 应用折扣。该规则会检查预测值是否至少在 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 中的异常值。该函数会根据 customer 、currency 和 transaction 检查是否应应用折扣。
该规则会识别预测结果不匹配的所有情况。
假设:在使用规则之前创建了机器学习模型。使用以下命令创建 ML 模型:
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 断言(包含数据引用参数) | 检查当天所有受支持货币的 日期过滤器 数据引用参数 |
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
创建数据质量扫描
控制台
在 Google Cloud 控制台中,前往数据质量页面。
点击创建数据质量扫描。
在定义扫描窗口中,填写以下字段:
输入显示名称。
如果您未提供自己的 ID,系统会自动生成扫描 ID。请参阅资源命名惯例。
(可选)输入说明。
在表字段中,点击浏览,选择表,然后点击选择。Dataplex 仅支持标准 BigQuery 表。
对于多区域数据集内的表,请选择要创建数据扫描的区域。
如需浏览 Dataplex 数据湖中整理的表,请点击在 Dataplex 数据湖中浏览。
在范围字段中,选择增量或所有数据。
- 如果您选择增量:在时间戳列字段中,从 BigQuery 表中选择类型为
DATE
或TIMESTAMP
且可单调递增的列,该列可用于识别新记录。它可以是用于对表进行分区的列。
- 如果您选择增量:在时间戳列字段中,从 BigQuery 表中选择类型为
可选:添加标签。标签是
key:value
键值对,可让您将相关对象组合在一起,或与其他 Google Cloud 资源组合在一起。如需过滤数据,请点击过滤条件。选中过滤行复选框。行过滤条件的输入值必须是有效的 SQL 表达式,可用作 BigQuery 标准 SQL 语法中
WHERE
子句的一部分。例如col1 >= 0
。过滤条件可以是多个列条件的组合。例如col1 >= 0 AND col2 < 10
。如需对数据进行抽样,请在抽样规模列表中选择一个抽样百分比。选择一个介于 0.0% 到 100.0% 之间的百分比值,最多精确到小数点后 3 位。对于较大的数据集,请选择较低的采样百分比。例如,对于大约 1 PB 的表,如果您输入的值介于 0.1% 到 1.0% 之间,Dataplex 会抽取 1-10 TB 的数据。对于增量数据扫描,Dataplex 会对最新增量应用采样。
如需将数据质量扫描结果发布到Google Cloud 控制台中源表的 BigQuery 和 Data Catalog 页面,请点击将结果发布到 BigQuery 和 Dataplex Catalog 界面复选框。您可以在 BigQuery 和 Data Catalog 页面中源表的数据质量标签页中查看最新的扫描结果。如需让用户访问已发布的扫描结果,请参阅分享已发布的结果。在以下情况下,发布选项可能不可用:
- 您没有对该表格所需的权限。
- 另一项数据质量扫描已设置为发布结果。
如需详细了解查看已发布结果所需的权限,请参阅权限。
点击继续。
在时间表窗口中,选择以下选项之一:
重复:按计划(每天、每周、每月或自定义)运行数据质量扫描作业。指定扫描的运行频率和时间。如果您选择“自定义”,请使用 cron 格式指定时间表。
按需:按需运行数据质量扫描作业。
点击继续。
在数据质量规则窗口中,定义要为此数据质量扫描配置的规则。点击添加规则,然后选择以下选项之一。
基于分析的建议:根据现有数据分析文件扫描生成建议,然后根据这些建议构建规则。
选择列:选择要获取建议规则的列。
扫描项目:基于现有数据分析文件扫描生成的建议。默认情况下,Dataplex 会从您创建数据质量扫描的项目中选择性能分析扫描。如果您是在其他项目中创建的扫描,则必须指定要从中提取配置文件扫描的项目。
选择配置文件结果:系统会根据您选择的列和项目显示多个配置文件结果。
选择一个或多个配置文件结果,然后点击确定。这会填充可供选择的规则列表。
勾选要修改的规则对应的复选框,然后点击选择。选择后,这些规则会添加到您当前的规则列表中。然后,您可以修改规则。
内置规则类型:根据预定义规则构建规则。请参阅预定义规则列表。
选择列:选择要为哪些列选择规则。
选择规则类型:系统会根据您选择的列显示多种规则类型供您选择。
选择一个或多个规则类型,然后点击确定。系统随即会填充可供选择的规则列表。
勾选要修改的规则对应的复选框,然后点击选择。选择后,这些规则会添加到您当前的规则列表中。然后,您可以修改规则。
SQL 行检查规则:创建要应用于每行的自定义 SQL 规则(自定义 SQL 行检查规则)。
在“维度”中,选择一个维度。
在通过阈值中,选择必须通过检查的记录所占的百分比。
在列名称中,选择一个列。
在提供 SQL 表达式字段中,输入一个计算结果为布尔值
true
(通过)或false
(失败)的 SQL 表达式。如需了解详情,请参阅支持的自定义 SQL 规则类型以及本文档定义数据质量规则部分中的示例。点击添加。
SQL 聚合检查规则:创建自定义 SQL 表条件规则。
在“维度”中,选择一个维度。
在列名称中,选择一个列。
在提供 SQL 表达式字段中,输入一个计算结果为布尔值
true
(通过)或false
(失败)的 SQL 表达式。如需了解详情,请参阅支持的自定义 SQL 规则类型以及本文档定义数据质量规则部分中的示例。点击添加。
SQL 断言规则:创建自定义 SQL 断言规则,用于检查数据是否处于无效状态。
在“维度”中,选择一个维度。
可选:在列名称中,选择一个列。
在提供 SQL 语句字段中,输入用于返回与无效状态匹配的行数的 SQL 语句。如果返回了任何行,表示此规则失败。从 SQL 语句中省略尾部英文分号。如需了解详情,请参阅支持的自定义 SQL 规则类型以及本文档定义数据质量规则部分中的示例。
点击添加。
Dataplex 允许为数据质量规则指定自定义名称,以便进行监控和提醒。对于任何数据质量规则,您可以选择为其分配自定义规则名称和说明。为此,请修改规则并指定以下详细信息:
- 规则名称:输入自定义规则名称,最多 63 个字符。 规则名称可以包含字母(a-z、A-Z)、数字 (0-9) 和连字符 (-),并且必须以字母开头,以数字或字母结尾。
- 说明:输入规则说明,长度不得超过 1,024 个字符。
点击继续。
可选:将扫描结果导出到 BigQuery 标准表。在将扫描结果导出到 BigQuery 表部分,点击浏览以选择要存储数据质量扫描结果的现有 BigQuery 数据集。
如果指定的表不存在,Dataplex 会为您创建该表。如果您使用的是现有表,请确保它与导出表架构兼容。
可选:设置电子邮件通知报告,以便向用户发送数据质量扫描作业的状态和结果提醒。在通知报告部分,点击
Add email ID(添加电子邮件 ID),然后输入最多 5 个电子邮件地址。然后,选择您要为哪些场景发送报告:- 质量得分 (<=):当作业成功且数据质量得分低于指定的目标得分时,发送报告。输入一个介于 0 到 100 之间的目标质量得分。
- 作业失败:在作业本身失败时发送报告,无论数据质量结果如何。
- 作业完成(成功或失败):无论数据质量结果如何,都会在作业结束时发送报告。
点击创建。
创建扫描后,您可以随时点击立即运行来运行扫描。
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
:包含数据质量扫描数据的数据集实体。例如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 |
nullable | //dataplex.googleapis.com/projects/test-project/locations/europe-west2/datascans/test-datascan |
project_id |
string |
nullable | dataplex-back-end-dev-project |
||
location |
string |
nullable | us-central1 |
||
data_scan_id |
string |
nullable | test-datascan |
||
data_source | struct/record |
resource_name |
string |
nullable | 实体用例://dataplex.googleapis.com/projects/dataplex-back-end-dev-project/locations/europe-west2/lakes/a0-datascan-test-lake/zones/a0-datascan-test-zone/entities/table1 表用例: //bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table
|
dataplex_entity_project_id |
string |
nullable | dataplex-back-end-dev-project |
||
dataplex_entity_project_number |
integer |
nullable | 123456789 |
||
dataplex_lake_id |
string |
nullable | (仅当来源为实体时有效)test-lake
|
||
dataplex_zone_id |
string |
nullable | (仅当来源为实体时有效)test-zone |
||
dataplex_entity_id |
string |
nullable | (仅当来源为实体时有效)test-entity |
||
table_project_id |
string |
nullable | test-project |
||
table_project_number |
integer |
nullable | 987654321 |
||
dataset_id |
string |
nullable | (仅当来源为表时有效)test-dataset |
||
table_id |
string |
nullable | (仅当来源为表时有效)test-table |
||
data_quality_job_id | string |
nullable | caeba234-cfde-4fca-9e5b-fe02a9812e38 |
||
data_quality_job_configuration | json |
trigger |
string |
nullable | ondemand /schedule |
incremental |
boolean |
nullable | true /false |
||
sampling_percent |
float |
nullable | (0-100)20.0 (表示 20%) |
||
row_filter |
string |
nullable | col1 >= 0 AND col2 < 10 |
||
job_labels | json |
nullable | {"key1":value1} |
||
job_start_time | timestamp |
nullable | 2023-01-01 00:00:00 UTC |
||
job_end_time | timestamp |
nullable | 2023-01-01 00:00:00 UTC |
||
job_rows_scanned | integer |
nullable | 7500 |
||
rule_name | string |
nullable | test-rule |
||
rule_type | string |
nullable | Range Check |
||
rule_evaluation_type | string |
nullable | Per row |
||
rule_column | string |
nullable | Rule only attached to a certain column |
||
rule_dimension | string |
nullable | UNIQUENESS |
||
job_quality_result | struct/record |
passed |
boolean |
nullable | true /false |
score |
float |
nullable | 90.8 |
||
job_dimension_result | json |
nullable | {"ACCURACY":{"passed":true,"score":100},"CONSISTENCY":{"passed":false,"score":60}}
|
||
rule_threshold_percent | float |
nullable | (0.0-100.0)Rule-threshold-pct in API * 100 |
||
rule_parameters | json |
nullable | {min: 24, max:5345} |
||
rule_pass | boolean |
nullable | True |
||
rule_rows_evaluated | integer |
nullable | 7400 |
||
rule_rows_passed | integer |
nullable | 3 |
||
rule_rows_null | integer |
nullable | 4 |
||
rule_failed_records_query | string |
nullable | "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 边界中。
- 如果在扫描执行阶段修改了表,则当前正在运行的作业会导出到上一个结果表,并且表更改将从下一个扫描作业开始生效。
- 请勿修改表架构。如果您需要自定义列,请在表格上创建视图。
- 如需降低费用,请根据您的用例为分区设置到期时间。如需了解详情,请参阅如何设置分区过期时间。
运行数据质量扫描
控制台
在 Google Cloud 控制台中,前往数据质量页面。
点击要运行的数据质量扫描。
点击立即运行。
gcloud
如需运行数据质量扫描,请使用 gcloud dataplex datascans run
命令:
gcloud dataplex datascans run DATASCAN \ --location=LOCATION \
执行以下变量替换操作:
LOCATION
:创建数据质量扫描的 Google Cloud 区域。DATASCAN
:数据质量扫描的名称。
REST
使用 API Explorer 运行数据质量扫描。
查看数据质量扫描结果
控制台
在 Google Cloud 控制台中,前往数据质量页面。
如需查看扫描的详细结果,请点击相应扫描的名称。
概览部分会显示过去七个作业的信息,包括运行扫描的时间、每个作业中扫描的记录数量、所有数据质量检查是否都通过、是否存在失败情况、失败的数据质量检查数量,以及哪些维度失败。
数据质量扫描配置部分会显示有关扫描的详细信息。
如需查看数据质量得分(表示通过规则的百分比),请点击作业记录标签页。然后,点击作业 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 个作业或过去一年内的数据质量扫描历史记录(以先到者为准)。
控制台
在 Google Cloud 控制台中,前往数据质量页面。
点击扫描的名称。
点击作业记录标签页。
作业历史记录标签页提供有关过往作业的信息。其中列出了所有作业、每个作业中扫描的记录数、作业状态、作业运行时间、每个规则是通过还是失败,以及更多信息。
如需查看作业的详细信息,请点击作业 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 页面中发布扫描结果,则最新的扫描结果将显示在这些页面中的数据质量标签页中。
您可以让贵组织中的用户访问已发布的扫描结果。如需授予对扫描结果的访问权限,请按以下步骤操作:
在 Google Cloud 控制台中,前往数据质量页面。
点击您要分享结果的数据质量扫描。
前往权限标签页。
点击授予访问权限。
在新建主账号字段中,添加要授予其访问权限的主账号。
在选择角色字段中,选择 Dataplex DataScan DataViewer。
点击保存。
如需移除主账号对已发布扫描结果的访问权限,请按以下步骤操作:
在 Google Cloud 控制台中,前往数据质量页面。
点击您要分享结果的数据质量扫描。
前往权限标签页。
选择要为其移除 Dataplex DataScan DataViewer 角色的主账号。
点击解除使用权限。
点击确认。
在 Cloud Logging 中设置提醒
如需使用 Cloud Logging 中的日志为数据质量故障设置提醒,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Logging 日志浏览器。
在查询窗口中,输入查询。请参阅示例查询。
点击 Run Query。
点击创建提醒。系统随即会打开一个侧边栏。
输入提醒政策名称,然后点击下一步。
查看查询。
点击预览日志按钮以测试查询。此操作会显示符合条件的日志。
点击下一步。
设置通知之间的时间间隔,然后点击下一步。
指定应收到提醒通知的人员,然后点击保存以创建提醒政策。
或者,您也可以在Google Cloud 控制台中依次前往监控 > 提醒,以配置和修改提醒。
gcloud
不受支持。
REST
使用 APIs 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 都会提供一个用于获取失败记录的查询。运行以下查询,查看与您的规则不匹配的记录。
控制台
在 Google Cloud 控制台中,前往数据质量页面。
点击您要排查其记录问题的扫描的名称。
点击作业记录标签页。
点击发现数据质量问题的作业的作业 ID。
在随即打开的作业结果窗口的规则部分中,找到用于获取失败记录的查询列。点击失败规则的将查询复制到剪贴板。
在 BigQuery 中运行查询,查看导致作业失败的记录。
gcloud
不受支持。
REST
使用 API Explorer 查看用于获取失败作业的失败记录的查询。
更新数据质量扫描
控制台
在 Google Cloud 控制台中,前往数据质量页面。
在要修改的扫描对应的行中,依次点击垂直三点状图标 > 修改。
修改值。
点击保存。
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 修改数据质量扫描。
删除数据质量扫描
控制台
在 Google Cloud 控制台中,前往数据质量页面。
点击要删除的扫描。
点击删除。
gcloud
如需删除数据质量扫描,请使用 gcloud dataplex datascans delete
命令:
gcloud dataplex datascans delete DATASCAN \ --location=LOCATION \ --async
执行以下变量替换操作:
DATASCAN
:要删除的数据质量扫描的名称。LOCATION
:创建数据质量扫描的 Google Cloud 区域。
REST
使用 API Explorer 删除数据质量扫描。
后续步骤
- 了解数据分析。
- 了解如何使用数据分析。
- 按照教程使用 Terraform 以代码形式管理数据质量规则。