剖析及驗證資料品質

Knowledge Catalog (舊稱 Dataplex Universal Catalog) 可讓您剖析 BigQuery 資料表,計算資料欄層級統計資料,例如空值百分比、不重複值計數和值分布。接著,您可以使用這些洞察資訊定義資料品質規則,並驗證記錄是否有異常狀況。

在本快速入門導覽課程中,您將在範例 BigQuery 資料表中填入刻意加入的異常資料、執行資料剖析掃描,並透過資料品質掃描評估結果。詳情請參閱「關於資料剖析」和「關於自動分析資料品質」。

事前準備

設定專案:

  1. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  2. 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

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

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

  5. Enable the Knowledge Catalog and BigQuery APIs, if any are not already enabled.

    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

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

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

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

  9. Enable the Knowledge Catalog and BigQuery APIs, if any are not already enabled.

    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.iam.gserviceaccount.com
    

    記下輸出內容中的 PROJECT_NUMBER,以便進行後續步驟。

  3. 授予 BigQuery 工作使用者 (roles/bigquery.jobUser) 角色,讓 Knowledge Catalog 可以在專案中執行查詢工作:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com" \
       --role="roles/bigquery.jobUser"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • PROJECT_NUMBER:您的 Google Cloud 專案編號。
  4. 授予 BigQuery 資料檢視者 (roles/bigquery.dataViewer) 角色,讓服務代理可以讀取資料表資料和結構定義:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com" \
       --role="roles/bigquery.dataViewer"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • PROJECT_NUMBER:您的 Google Cloud 專案編號。

建立範例資料集和資料表

如要安全地試用剖析和資料品質掃描功能,而不影響正式環境資料,請設定專屬的 BigQuery 資料集,並建立包含範例單車共享資料的資料表,其中包含重複和空值等刻意加入的異常值。

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中,按一下專案 ID 旁的 「View actions」(查看動作),然後點選「Create dataset」(建立資料集)。

  3. 在「Dataset ID」(資料集 ID) 欄位中,輸入 quickstart_data_profile。

  4. 在「Data location」(資料位置) 清單中,選取「us-central1 (Iowa)」(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;"
    

建立及執行資料剖析掃描

資料剖析掃描會查看資料表資料列,計算統計洞察資料,包括不重複值計數、空值比率和資料分布範圍。

控制台

  1. 在 Google Cloud 控制台,前往「Data profiling & quality」(資料剖析與品質) 頁面。

    前往「Data profiling & quality」(資料剖析與品質) 頁面

  2. 點按「建立資料剖析掃描」。

  3. 在「Choose type」(選擇類型) 下方,選取「Data profile scan」(資料剖析掃描)。

  4. 在「General」(一般) 下方的「Display name」(顯示名稱) 欄位中,輸入 bikeshare-trips-profile。

  5. 在「Table to scan」(要掃描的資料表) 下方的「Table」(資料表) 欄位中,按一下「Browse」(瀏覽),選取專案中的 quickstart_data_profile.bikeshare_trips 資料表,然後按一下「Select」(選取)。

  6. 在「Mode」(模式) 部分,選取「Standard」(標準)。

  7. 在「Scope」(範圍) 部分,選取「Entire data」(整個資料)。

  8. 在「Schedule」(排程) 部分,選取「On-demand」(隨選)。

  9. 其餘設定均保留預設值。

  10. 點按「Run scan」(執行掃描作業)。

    掃描工作隨即啟動。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 控制台,前往「Data profiling & quality」(資料剖析與品質) 頁面。

    前往「Data profiling & quality」(資料剖析與品質) 頁面

  2. 在掃描清單中,按一下「bikeshare-trips-profile」。

  3. 如果尚未執行掃描,請按一下「立即執行」。

  4. 在「Overview」(總覽) 部分,等待最新的掃描工作顯示「Succeeded」(成功)。

    下圖顯示「Overview」(總覽) 區段中的掃描工作,狀態為「Succeeded」(成功):

    單車共享行程剖析檔掃描作業的「Overview」部分,顯示工作狀態為「Succeeded」,以及「View results」連結。

  5. 檢查掃描結果,瞭解資料表的資料分布情形,並找出潛在的資料品質驗證目標。在「Latest job results」(最新工作結果) 分頁中,Knowledge Catalog 會顯示資料欄層級指標,包括「Null %」(空值百分比)、「Unique count and %」(不重複計數和百分比)、「Top values」(熱門值) 和「Summary statistics」(摘要統計資料)。

    下表列出各資料表資料欄應檢查的設定檔指標、結果解讀方式,以及應指定的資料品質規則:

    資料表欄 設定檔結果指標 觀察重點和解讀方式 資料品質驗證目標
    duration_minutes 統計資料摘要 偵測到負值:最小值為 -10.0 分鐘。行程經過時間不得為負值,否則表示感應器或行程記錄無效。 使用有效性 (範圍) 規則 (例如 duration_minutes ≥ 1.0) 指定目標,要求乘車時間必須為正值。
    start_station_id 空值百分比 約 5% 的空值:空值百分比大於 0%,表示部分記錄缺少車站租借 ID (例如無樁或無資訊站的行程)。 使用「完整性 (非空值)」規則,找出並標記缺少車站 ID 的記錄。
    subscriber_type 熱門值 非預期類別:常見值清單列出非標準類別 (例如 INVALID_TIER) 和有效會員等級,表示使用者輸入內容未經驗證或擷取發生問題。 使用「有效性 (設定)」規則,強制所有傳入的值都屬於允許的會員類型清單。
    trip_id 不重複計數和百分比 偵測到重複 ID:不重複性低於 100% (約 98%),表示有重複的 ID 記錄。主鍵和行程 ID 應完全不重複。 使用不重複規則,標記並防止重複的行程記錄。

這些剖析結果可做為實證基準,協助您建立有針對性的資料品質規則。

建立並執行資料品質掃描

瞭解資料樣貌後,請設定自動化資料品質規則,找出異常狀況。在這個步驟中,您將根據設定檔結果,設定四種常見的規則類型。

控制台

  1. 在 Google Cloud 控制台,前往「Data profiling & quality」(資料剖析與品質) 頁面。

    前往「Data profiling & quality」(資料剖析與品質) 頁面

  2. 點選「建立資料品質掃描作業」。

  3. 在「General」(一般) 下方的「Display name」(顯示名稱) 欄位中,輸入 bikeshare-trips-quality。

  4. 在「Table to scan」(要掃描的資料表) 下方的「Table」(資料表) 欄位中,按一下「Browse」(瀏覽),選取 quickstart_data_profile.bikeshare_trips 資料表,然後按一下「Select」(選取)。

  5. 在「Scope」(範圍) 部分,選取「Entire data」(整個資料)。

  6. 在「Schedule」(排程) 部分,選取「On-demand」(隨選)。

  7. 其他設定保留預設值,然後點選「繼續」。

  8. 在「Data quality rules」(資料品質規則) 區段中,按一下「Add Rules」(新增規則),然後選取「Built-in rule types」(內建規則類型)。

  9. 在「新增規則」面板中,選取資料欄和規則類型:

    • 在「Choose columns」(選擇資料欄) 欄位中,按一下「Browse」(瀏覽),然後選取 duration_minutes、start_station_id、subscriber_type 和 trip_id。
    • 按一下「選取」。
    • 在「Choose rule types」(選擇規則類型) 清單中,選取「Range check」(範圍檢查)、「NULL check」(NULL 檢查)、「Value-set check」(值集檢查) 和「Uniqueness check」(不重複性檢查),然後按一下「OK」(確定)。
    • 在產生的規則清單中,勾選下列各項規則的核取方塊:

      • duration_minutes:範圍檢查
      • start_station_id:NULL 檢查
      • subscriber_type:值集檢查
      • trip_id:唯一性檢查
    • 按一下「選取」。

  10. 在「Data quality rules」(資料品質規則) 表格中,為需要值的規則設定參數:

    • 在「duration_minutes」(範圍檢查) 部分,按一下 「Edit」(編輯),在「Min value」(最小值) 欄位中輸入 1.0,然後按一下「Save」(儲存)。
    • 在 subscriber_type (值集檢查) 中,按一下 「Edit」(編輯),然後點選「Add Value」(新增值),新增各個允許的值 (Local Rider、Walk Up、Student Membership 和 Weekender),再點選「Save」(儲存)。
  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 控制台,前往「Data profiling & quality」(資料剖析與品質) 頁面。

    前往「Data profiling & quality」(資料剖析與品質) 頁面

  2. 在「Scans」表格中,按一下「bikeshare-trips-quality」掃描作業。

  3. 在「Overview」(總覽) 區段中,按一下「View results」(查看結果) 開啟工作詳細資料。

  4. 在「Job details」(工作詳細資料) 面板中,查看評估結果:

    • 資料品質狀態:如預期,3 個評估維度的狀態均顯示為「失敗」。

      • 有效性:失敗。duration_minutes 欄包含負值,subscriber_type 則包含無效的成員資格值 (INVALID_TIER)。
      • 完整性:失敗。start_station_id 資料欄包含空值。
      • 不重複性:失敗。trip_id 欄含有重複記錄。
    • 規則:在「規則」表格中,所有 4 項評估規則的狀態都顯示為「失敗」。

      • duration_minutes:範圍檢查 (失敗)
      • start_station_id:空值檢查 (失敗)
      • subscriber_type:值集檢查 (失敗)
      • trip_id:唯一性檢查 (失敗)

      如有任何失敗規則,您可以複製「Query to get failed records」(查詢以取得失敗記錄) 欄中的 SQL 查詢,並在 BigQuery 中執行,以便找出並檢查無效資料列。

您已剖析 BigQuery 資料表,找出資料欄統計資料,並運用這些洞察資訊定義及驗證自動資料品質規則。

清除所用資源

為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。

控制台

  1. 在 Google Cloud 控制台,前往「Data profiling & quality」(資料剖析與品質) 頁面。

    前往「Data profiling & quality」(資料剖析與品質) 頁面

  2. 在「Scans」(掃描) 資料表中,選取「bikeshare-trips-quality」和「bikeshare-trips-profile」。

  3. 按一下「Delete」(刪除) 加以確認。

  4. 前往「BigQuery」頁面

    前往 BigQuery

  5. 在「Explorer」窗格中,點選「Datasets」(資料集)。

  6. 選取 quickstart_data_profile 資料集,然後按一下「Delete」(刪除)。

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。

後續步驟