分析和验证数据质量

此快速入门指南将向您展示如何使用 Knowledge Catalog(以前称为 Dataplex Universal Catalog)分析 BigQuery 表,根据分析洞见定义数据质量规则,以及运行数据质量扫描。

您需要完成以下步骤:

  1. 创建包含故意添加的异常情况(例如重复值和 null 值)的 BigQuery 数据集和表,其中包含示例共享单车数据,用于测试扫描功能。
  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) 角色,以便知识目录可以在您的项目中运行查询作业:

    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(爱荷华)

  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 会显示列级指标,包括空值百分比唯一身份计数和百分比热门值汇总统计信息

    下表显示了每个表列应检查哪个剖析指标、如何解读结果以及应以哪个数据质量规则为目标:

    表列 个人资料搜索结果指标 需要关注的内容以及如何解读 数据质量验证目标
    duration_minutes 汇总统计信息 检测到负值最小值为 -10.0 分钟。已过行程时长不能为负值,表示传感器或骑行记录无效。 有效性(范围)规则(例如 duration_minutes ≥ 1.0)为目标,要求骑行时间为正值。
    start_station_id Null % 大约 5% 的 null 值:null 百分比大于 0%,表明部分记录缺少车站结账标识符(例如无桩或无自助服务亭行程)。 使用 Completeness (Non-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。

后续步骤