分析和验证数据质量
此快速入门指南将向您展示如何使用 Knowledge Catalog(以前称为 Dataplex Universal Catalog)分析 BigQuery 表,根据分析洞见定义数据质量规则,以及运行数据质量扫描。
您需要完成以下步骤:
准备工作
设置项目:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Knowledge Catalog and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
所需的角色
如需获得创建和运行数据分析和数据质量扫描以及管理 BigQuery 资源所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
创建、运行和删除数据扫描:Dataplex DataScan Editor (
roles/dataplex.dataScanEditor) -
创建、填充和删除示例表:BigQuery Data Owner (
roles/bigquery.dataOwner) -
在 BigQuery 中运行 SQL 查询:BigQuery Job User (
roles/bigquery.jobUser)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如果您拥有在项目中管理 IAM 访问权限所需的权限,则可以运行以下 gcloud 命令,向自己的用户账号授予这些角色:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:USER_EMAIL" \
--role="roles/dataplex.dataScanEditor"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:USER_EMAIL" \
--role="roles/bigquery.dataOwner"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:USER_EMAIL" \
--role="roles/bigquery.jobUser"
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。USER_EMAIL:您的用户账号电子邮件地址(例如name@example.com)。
向 Knowledge Catalog 服务代理授予权限
服务代理是 Google 管理的服务账号,Knowledge Catalog 会使用该账号代表您在 BigQuery 中运行扫描查询。
在 Google Cloud 控制台中,点击工具栏中的激活 Cloud Shell。 预配和连接到环境需要一些时间。
创建 Knowledge Catalog 服务代理:
gcloud beta services identity create --service=dataplex.googleapis.com如果服务代理尚未配置,此命令会创建该服务代理并输出其电子邮件地址。如果您的项目已具有 Knowledge Catalog 服务代理,该命令会返回现有身份,而不会进行任何更改。
输出类似于以下内容:
serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.记下输出中的
PROJECT_NUMBER,以便在后续步骤中使用。授予 BigQuery Job User (
roles/bigquery.jobUser) 角色,以便知识目录可以在您的项目中运行查询作业:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex." \ --role="roles/bigquery.jobUser"
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。PROJECT_NUMBER:您的 Google Cloud 项目编号。
授予 BigQuery Data Viewer (
roles/bigquery.dataViewer) 角色,以便服务代理可以读取您的表数据和架构:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex." \ --role="roles/bigquery.dataViewer"
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。PROJECT_NUMBER:您的 Google Cloud 项目编号。
创建示例数据集和表
如需安全地试用分析和数据质量扫描功能,而无需触及生产数据,请设置一个专用 BigQuery 数据集,并在您的项目中直接创建一个包含示例数据的表。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,点击项目 ID 旁边的 查看操作,然后点击创建数据集。
在数据集 ID 字段中,输入
quickstart_data_profile。在数据位置列表中,选择 us-central1(爱荷华)。
点击创建数据集。
在查询编辑器中,输入以下 SQL 查询,以在
bikeshare_trips表中生成示例共享单车数据:CREATE OR REPLACE TABLE `PROJECT_ID.quickstart_data_profile.bikeshare_trips` AS SELECT -- Duplicate and null IDs IF(MOD(x, 100) = 0, NULL, IF(x > 9900, 1000 + (x - 9900), 1000 + x)) AS trip_id, -- Nulls and unrecognized category values CASE WHEN MOD(x, 50) = 0 THEN 'INVALID_TIER' WHEN MOD(x, 25) = 0 THEN NULL WHEN MOD(x, 4) = 0 THEN 'Local Rider' WHEN MOD(x, 4) = 1 THEN 'Walk Up' WHEN MOD(x, 4) = 2 THEN 'Student Membership' ELSE 'Weekender' END AS subscriber_type, -- Nulls and malformed bike IDs CASE WHEN MOD(x, 60) = 0 THEN 'UNKNOWN' WHEN MOD(x, 30) = 0 THEN NULL ELSE CAST(2000 + x AS STRING) END AS bike_id, -- Null dates and future timestamps CASE WHEN MOD(x, 70) = 0 THEN NULL WHEN MOD(x, 40) = 0 THEN TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL x MINUTE) ELSE TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL x MINUTE) END AS start_time, -- Nulls and placeholder station values CASE WHEN MOD(x, 20) = 0 THEN 'STATION_UNKNOWN' WHEN MOD(x, 10) = 0 THEN NULL ELSE CAST(100 + MOD(x, 50) AS STRING) END AS start_station_id, -- Negative durations, zeros, and extreme outliers CASE WHEN MOD(x, 15) = 0 THEN -10.0 WHEN MOD(x, 35) = 0 THEN 0.0 WHEN MOD(x, 200) = 0 THEN 99999.0 ELSE CAST(MOD(x, 120) + 1.5 AS FLOAT64) END AS duration_minutes FROM UNNEST(GENERATE_ARRAY(1, 10000)) AS x;
将
PROJECT_ID替换为您的 Google Cloud 项目 ID。点击 运行。
gcloud
在 Cloud Shell 中,在
us-central1区域中创建quickstart_data_profile数据集:bq --location=us-central1 mk --dataset PROJECT_ID:quickstart_data_profile
将
PROJECT_ID替换为您的Google Cloud 项目 ID。创建并填充
bikeshare_trips示例表:bq query \ --use_legacy_sql=false \ "CREATE OR REPLACE TABLE \`PROJECT_ID.quickstart_data_profile.bikeshare_trips\` AS SELECT IF(MOD(x, 100) = 0, NULL, IF(x > 9900, 1000 + (x - 9900), 1000 + x)) AS trip_id, CASE WHEN MOD(x, 50) = 0 THEN 'INVALID_TIER' WHEN MOD(x, 25) = 0 THEN NULL WHEN MOD(x, 4) = 0 THEN 'Local Rider' WHEN MOD(x, 4) = 1 THEN 'Walk Up' WHEN MOD(x, 4) = 2 THEN 'Student Membership' ELSE 'Weekender' END AS subscriber_type, CASE WHEN MOD(x, 60) = 0 THEN 'UNKNOWN' WHEN MOD(x, 30) = 0 THEN NULL ELSE CAST(2000 + x AS STRING) END AS bike_id, CASE WHEN MOD(x, 70) = 0 THEN NULL WHEN MOD(x, 40) = 0 THEN TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL x MINUTE) ELSE TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL x MINUTE) END AS start_time, CASE WHEN MOD(x, 20) = 0 THEN 'STATION_UNKNOWN' WHEN MOD(x, 10) = 0 THEN NULL ELSE CAST(100 + MOD(x, 50) AS STRING) END AS start_station_id, CASE WHEN MOD(x, 15) = 0 THEN -10.0 WHEN MOD(x, 35) = 0 THEN 0.0 WHEN MOD(x, 200) = 0 THEN 99999.0 ELSE CAST(MOD(x, 120) + 1.5 AS FLOAT64) END AS duration_minutes FROM UNNEST(GENERATE_ARRAY(1, 10000)) AS x;"
创建并运行数据分析扫描
数据分析扫描会检查表格中的各行,以计算统计数据分析,包括唯一值计数、Null 比率和数据分布范围。
控制台
在 Google Cloud 控制台中,前往数据分析和质量评估页面。
点击创建数据分析扫描。
在选择类型下,保持数据概况扫描处于选中状态。
在常规下的显示名称字段中,输入
bikeshare-trips-profile。在要扫描的表下,点击表字段中的浏览,选择项目中的
quickstart_data_profile.bikeshare_trips表,然后点击选择。在模式字段中,选择标准。
对于范围,选择所有数据。
对于时间表,选择按需。
将其他设置保留为默认值。
点击运行扫描。
扫描作业开始。Knowledge Catalog 通常需要 3 到 5 分钟来运行扫描并计算表的统计信息。
gcloud
在 Cloud Shell 中,创建数据分析扫描:
gcloud dataplex datascans create data-profile bikeshare-trips-profile \ --location=us-central1 \ --data-source-resource="//bigquery.googleapis.com/projects/PROJECT_ID/datasets/quickstart_data_profile/tables/bikeshare_trips" \ --description="Data profile scan for sample bikeshare dataset"
将
PROJECT_ID替换为您的Google Cloud 项目 ID。运行数据分析扫描:
gcloud dataplex datascans run bikeshare-trips-profile \ --location=us-central1
扫描作业在后台启动。扫描通常需要 3 到 5 分钟才能完成。
查看数据分析扫描结果
扫描完成后,查看列统计信息,了解数据特征。
在 Google Cloud 控制台中,前往数据分析和质量评估页面。
在扫描列表中,点击 bikeshare-trips-profile。
如果扫描尚未运行,请点击立即运行。
在概览部分,等待最新的扫描作业显示成功。
下图显示了概览部分中状态为成功的扫描作业:
检查扫描结果,了解表的数据分布情况,并确定潜在的数据质量验证目标。在最新作业结果标签页中,Knowledge Catalog 会显示列级指标,包括空值百分比、唯一身份计数和百分比、热门值和汇总统计信息。
下表显示了每个表列应检查哪个剖析指标、如何解读结果以及应以哪个数据质量规则为目标:
表列 个人资料搜索结果指标 需要关注的内容以及如何解读 数据质量验证目标 duration_minutes汇总统计信息 检测到负值:最小值为 -10.0分钟。已过行程时长不能为负值,表示传感器或骑行记录无效。以有效性(范围)规则(例如 duration_minutes ≥ 1.0)为目标,要求骑行时间为正值。start_station_idNull % 大约 5% 的 null 值:null 百分比大于 0%,表明部分记录缺少车站结账标识符(例如无桩或无自助服务亭行程)。 使用 Completeness (Non-null) 规则作为目标,以捕获并标记缺少站 ID 的记录。 subscriber_type最高值 意外类别:频繁值列表在有效会员等级旁边列出了非标准类别(例如 INVALID_TIER),表明存在未经验证的用户输入或提取问题。使用有效性(设置)规则进行定位,以强制所有传入的值都属于您允许的会员类型列表。 trip_id唯一结果数和百分比 检测到重复的 ID:唯一性低于 100%(约为 98%),表明存在重复的标识符记录。 主键和行程标识符应 100% 唯一。 使用唯一性规则作为目标,标记并防止重复的行程记录。
这些分析结果可为您提供基于证据的基准,以便您创建有针对性的数据质量规则。
创建并运行数据质量扫描
现在,您已经了解了数据的外观,接下来可以设置自动数据质量规则来捕获异常情况。在此步骤中,您将根据个人资料发现结果配置四种常见规则类型。
控制台
在 Google Cloud 控制台中,前往数据分析和质量评估页面。
点击创建数据质量扫描。
在常规下的显示名称字段中,输入
bikeshare-trips-quality。在要扫描的表下,点击表字段中的浏览,选择
quickstart_data_profile.bikeshare_trips表,然后点击选择。对于范围,选择所有数据。
对于时间表,选择按需。
将其他设置保留为默认值,然后点击继续。
在数据质量规则部分,点击添加规则,然后选择内置规则类型。
在添加规则面板中,选择列和规则类型:
- 在选择列字段中,点击浏览,然后选择
duration_minutes、start_station_id、subscriber_type和trip_id。 - 点击选择。
- 在选择规则类型列表中,选择范围检查、NULL 检查、值集检查和唯一性检查,然后点击确定。
在生成的规则列表中,选中以下各项规则对应的复选框:
duration_minutes:范围检查start_station_id:NULL 检查subscriber_type:值集检查trip_id:唯一性检查
点击选择。
- 在选择列字段中,点击浏览,然后选择
在数据质量规则表格中,为需要值的规则配置参数:
- 对于
duration_minutes(范围检查),请依次点击 修改,在最小值字段中输入1.0,然后点击保存。 - 对于
subscriber_type(值集检查),请点击 修改,然后点击添加值以添加每个允许的值(Local Rider、Walk Up、Student Membership和Weekender),最后点击保存。
- 对于
点击继续,然后点击运行扫描。
gcloud
在 Cloud Shell 中,创建一个名为
dq_bikeshare.yaml的文件,其中包含针对您个人资料中发现的异常情况的规则规范:cat << 'EOF' > dq_bikeshare.yaml rules: - column: trip_id dimension: UNIQUENESS uniquenessExpectation: {} - column: start_station_id dimension: COMPLETENESS nonNullExpectation: {} - column: duration_minutes dimension: VALIDITY rangeExpectation: minValue: "1.0" - column: subscriber_type dimension: VALIDITY setExpectation: values: - "Local Rider" - "Walk Up" - "Student Membership" - "Weekender" EOF创建数据质量扫描:
gcloud dataplex datascans create data-quality bikeshare-trips-quality \ --location=us-central1 \ --data-source-resource="//bigquery.googleapis.com/projects/PROJECT_ID/datasets/quickstart_data_profile/tables/bikeshare_trips" \ --data-quality-spec-file="dq_bikeshare.yaml" \ --description="Data quality scan for sample bikeshare dataset"
将
PROJECT_ID替换为您的Google Cloud 项目 ID。运行数据质量扫描:
gcloud dataplex datascans run bikeshare-trips-quality \ --location=us-central1
查看数据质量规则评估
查看数据质量结果,了解规则如何评估样本数据并识别异常情况。
在 Google Cloud 控制台中,前往数据分析和质量评估页面。
在扫描表中,点击 bikeshare-trips-quality 扫描。
在概览部分中,点击查看结果以打开作业详情。
在作业详情面板中,查看评估结果:
数据质量状态:正如预期,所有 3 个评估维度均显示“失败”状态。
- 有效性:失败。
duration_minutes列包含负值,subscriber_type包含无效的会员值 (INVALID_TIER)。 - 完整性:失败。
start_station_id列包含 null 值。 - 唯一性:失败。
trip_id列包含重复记录。
- 有效性:失败。
规则:在规则表格中,所有 4 条已评估的规则均显示“失败”状态。
duration_minutes:范围检查(失败)start_station_id:NULL 检查(失败)subscriber_type:值集检查(失败)trip_id:唯一性检查(失败)
对于任何失败的规则,您都可以复制用于获取失败记录的查询列中的 SQL 查询,并在 BigQuery 中运行该查询,以隔离并检查无效的行。
您现在已对 BigQuery 表进行了分析,以发现列统计信息,并使用这些数据分析来定义和验证自动数据质量规则。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
控制台
在 Google Cloud 控制台中,前往数据分析和质量评估页面。
在扫描表中,选择 bikeshare-trips-quality 和 bikeshare-trips-profile。
点击删除并确认。
转到 BigQuery 页面。
在探索器窗格中,点击数据集。
选择
quickstart_data_profile数据集,然后点击删除。
gcloud
在 Cloud Shell 中,删除数据质量扫描、数据分析扫描和示例数据集:
gcloud dataplex datascans delete bikeshare-trips-quality --location=us-central1 --quiet gcloud dataplex datascans delete bikeshare-trips-profile --location=us-central1 --quiet bq rm -r -f -d PROJECT_ID:quickstart_data_profile
将 PROJECT_ID 替换为您的Google Cloud 项目 ID。