分析和验证数据质量
本快速入门介绍了如何使用 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) 角色,以便 Knowledge Catalog 可以在您的项目中运行查询作业: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 (Iowa) 。
点击创建数据集 。
在查询编辑器中,输入以下 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 会显示列级指标 ,包括 Null %、唯一计数和 %、热门值 和 摘要统计信息。
下表显示了要检查每个表列的哪个分析指标、如何解读结果以及要定位哪个数据质量规则:
表列 分析结果指标 要查找的内容以及如何解读 数据质量验证目标 duration_minutes摘要统计信息 检测到负值: 最小值 为 -10.0分钟。行程 时长不能为负值,这表示传感器或行程 记录无效。使用 有效性(范围) 规则(例如 duration_minutes ≥ 1.0)定位,以要求行程时长为正值。start_station_idNull % 大约 5% 的 null 值:null 百分比 大于 0%,这表示某些记录缺少站点结账 标识符(例如无桩或无自助服务终端的行程)。 使用完整性(非 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。