分析和验证数据质量

本快速入门介绍了如何使用 Knowledge Catalog(以前称为 Dataplex Universal Catalog)分析 BigQuery 表,根据分析洞见定义数据质量规则,以及运行数据质量扫描。

您将完成以下步骤:

  1. 创建一个 BigQuery 数据集和表,其中包含故意添加的异常情况(例如重复项和 null 值)的示例共享单车数据,以测试扫描功能。
  2. 对该表创建并运行数据分析扫描。 数据分析会计算列级统计信息,例如 null 百分比、唯一值计数和值分布。如需了解详情,请参阅 数据分析简介
  3. 查看数据分析扫描结果,以查找模式和潜在异常情况。
  4. 根据分析结果定义数据质量规则,并运行数据质量扫描。数据质量扫描会根据定义的规则验证数据,以识别异常情况。如需了解详情,请参阅 自动数据质量简介
  5. 查看评估结果,了解哪些质量规则通过或未通过。

准备工作

设置项目:

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. 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.

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Knowledge Catalog and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

所需的角色

如需获得创建和运行数据分析扫描和数据质量扫描以及管理 BigQuery 资源所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。

如果您拥有在项目中管理 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 中运行扫描查询。

  1. 在 Google Cloud 控制台中,点击工具栏中的激活 Cloud Shell。 预配和连接到环境需要一些时间。

  2. 创建 Knowledge Catalog 服务代理:

    gcloud beta services identity create --service=dataplex.googleapis.com
    

    如果服务代理尚未预配,此命令会创建并输出其电子邮件地址。如果您的项目已具有 Knowledge Catalog 服务代理,该命令会返回现有身份,而不会进行任何更改。

    输出类似于以下内容:

    serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.
    

    请注意输出中的 PROJECT_NUMBER,以便进行后续步骤。

  3. 授予 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 项目编号。
  4. 授予 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 数据集,并在您的项目中直接创建一个包含示例数据的表。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 探索器 窗格中,点击 查看操作 项目 ID 旁边的 ,然后点击 创建数据集

  3. 数据集 ID 字段中,输入 quickstart_data_profile

  4. 数据位置 列表中,选择 us-central1 (Iowa)

  5. 点击创建数据集

  6. 在查询编辑器中,输入以下 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。

  7. 点击 运行

gcloud

  1. 在 Cloud Shell 中,在 us-central1 区域中创建 quickstart_data_profile 数据集:

    bq --location=us-central1 mk --dataset PROJECT_ID:quickstart_data_profile
    

    PROJECT_ID 替换为您的 Google Cloud 项目 ID。

  2. 创建并填充 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 比率和数据分布范围。

控制台

  1. 在 Google Cloud 控制台中,前往数据分析和质量评估 页面。

    前往“数据分析和质量评估”

  2. 点击创建数据分析扫描

  3. 选择类型 下,保持选中数据分析扫描

  4. 常规 下的显示名称 字段中,输入 bikeshare-trips-profile

  5. 要扫描的表 下的 字段中,点击浏览, 在您的项目中选择 quickstart_data_profile.bikeshare_trips 表, 然后点击选择

  6. 对于模式 ,选择标准

  7. 对于范围,选择所有数据

  8. 对于时间表 ,选择按需

  9. 将其他设置保留为默认值。

  10. 点击运行扫描

    扫描作业开始运行。Knowledge Catalog 通常需要 3 到 5 分钟来运行扫描并计算表的统计信息。

gcloud

  1. 在 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。

  2. 运行数据分析扫描:

    gcloud dataplex datascans run bikeshare-trips-profile \
     --location=us-central1
    

    扫描作业在后台开始运行。扫描通常需要 3 到 5 分钟才能完成。

查看数据分析扫描结果

扫描完成后,查看列统计信息以了解数据特征。

  1. 在 Google Cloud 控制台中,前往数据分析和质量评估 页面。

    前往“数据分析和质量评估”

  2. 在扫描列表中,点击 bikeshare-trips-profile

  3. 如果扫描尚未运行,请点击立即运行

  4. 概览 部分中,等待最新的扫描作业显示成功

    下图显示了概览 部分中的扫描作业,其状态为成功

    自行车共享行程分析扫描的“概览”部分,显示作业状态为“成功”以及“查看结果”链接。

  5. 检查扫描结果,了解表的分布情况,并确定潜在的数据质量验证目标。在 最新作业 结果 标签页中,Knowledge Catalog 会显示列级指标 ,包括 Null %唯一计数和 %热门值摘要统计信息

    下表显示了要检查每个表列的哪个分析指标、如何解读结果以及要定位哪个数据质量规则:

    表列 分析结果指标 要查找的内容以及如何解读 数据质量验证目标
    duration_minutes 摘要统计信息 检测到负值最小值-10.0 分钟。行程 时长不能为负值,这表示传感器或行程 记录无效。 使用 有效性(范围) 规则(例如 duration_minutes ≥ 1.0)定位,以要求行程时长为正值。
    start_station_id Null % 大约 5% 的 null 值:null 百分比 大于 0%,这表示某些记录缺少站点结账 标识符(例如无桩或无自助服务终端的行程)。 使用完整性(非 null)规则 定位,以捕获并标记缺少站点 ID 的记录。
    subscriber_type 热门值 意外类别:频繁值列出了非标准类别(例如 INVALID_TIER)以及有效的会员等级,这表示用户输入未经验证或存在注入问题。 使用有效性(集合) 规则定位,以强制 所有传入值都属于允许的会员类型列表。
    trip_id 唯一计数和 % 检测到重复的 ID:唯一性低于 100%(大约 98%),这表示存在重复的标识符记录。 主键和行程标识符应具有 100% 的唯一性。 使用唯一性 规则定位,以标记并 防止重复的行程记录。

这些分析结果为您提供了基于证据的基准,以便创建有针对性的数据质量规则。

创建并运行数据质量扫描

现在您已经了解了数据的外观,接下来设置自动数据质量规则以捕获异常情况。在此步骤中,您将根据分析结果配置四种常见规则类型。

控制台

  1. 在 Google Cloud 控制台中,前往数据分析和质量评估 页面。

    前往“数据分析和质量评估”

  2. 点击创建数据质量扫描

  3. 常规 下的显示名称 字段中,输入 bikeshare-trips-quality

  4. 要扫描的表 下的 字段中,点击浏览, 选择 quickstart_data_profile.bikeshare_trips 表,然后点击 选择

  5. 对于范围,选择所有数据

  6. 对于时间表 ,选择按需

  7. 将其他设置保留为默认值,然后点击继续

  8. 数据质量规则 部分中,点击添加规则 ,然后选择内置规则类型

  9. 添加规则 面板中,选择列和规则类型:

    • 选择列 字段中,点击浏览,然后选择 duration_minutesstart_station_idsubscriber_typetrip_id
    • 点击选择
    • 选择规则类型 列表中,选择范围检查NULL 检查值集检查唯一性检查,然后 点击确定
    • 在生成的规则列表中,选中以下每个规则对应的复选框:

      • duration_minutes范围检查
      • start_station_idNULL 检查
      • subscriber_type值集检查
      • trip_id唯一性检查
    • 点击选择

  10. 数据质量规则 表中,为需要值的规则配置参数:

    • 对于 duration_minutes范围检查 ),点击 修改 ,在 **最小值** 字段中输入 1.0,然后点击保存
    • 对于 subscriber_type值集检查),点击 修改,点击 添加值 以添加每个允许的值(Local RiderWalk UpStudent MembershipWeekender),然后点击 保存
  11. 点击继续 ,然后点击运行扫描

gcloud

  1. 在 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
    
  2. 创建数据质量扫描:

    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。

  3. 运行数据质量扫描:

    gcloud dataplex datascans run bikeshare-trips-quality \
     --location=us-central1
    

查看数据质量规则评估

检查数据质量结果,了解规则如何评估示例数据并识别异常情况。

  1. 在 Google Cloud 控制台中,前往数据分析和质量评估页面。

    前往“数据分析和质量评估”

  2. 扫描 表中,点击 bikeshare-trips-quality 扫描。

  3. 概览 部分中,点击查看结果 以打开作业详情。

  4. 作业详情 面板中,查看评估结果:

    • 数据质量状态:正如预期,所有 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 账号产生费用,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,前往数据分析和质量评估 页面。

    前往“数据分析和质量评估”

  2. 扫描 表中,选择 bikeshare-trips-qualitybikeshare-trips-profile

  3. 点击删除 并确认。

  4. 前往 BigQuery 页面。

    转到 BigQuery

  5. 探索器 窗格中,点击数据集

  6. 选择 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。

后续步骤