剖析及驗證資料品質
本快速入門指南說明如何使用 Knowledge Catalog (舊稱 Dataplex Universal Catalog) 剖析 BigQuery 資料表、根據剖析洞察資料定義資料品質規則,以及執行資料品質掃描。
請完成下列步驟:
- 建立 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 編輯者 (
roles/dataplex.dataScanEditor) -
建立、填入及刪除範例資料表:
BigQuery 資料擁有者 (
roles/bigquery.dataOwner) -
在 BigQuery 中執行 SQL 查詢:
BigQuery 工作使用者 (
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 工作使用者」(
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 資料檢視者」(
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」頁面。
在「Explorer」窗格中,點選專案 ID 旁邊的「查看動作」圖示 ,然後按一下「建立資料集」。
在「Dataset 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;"
建立及執行資料剖析掃描
資料剖析掃描會檢查資料表列,計算統計洞察資料,包括不重複值數量、空值比率和資料分布範圍。
控制台
在 Google Cloud 控制台中,前往「資料剖析與品質」頁面。
按一下「建立資料剖析掃描」。
在「選擇類型」下方,保留選取的「資料剖析掃描」。
在「General」(一般) 下方的「Display name」(顯示名稱) 欄位中,輸入
bikeshare-trips-profile。在「Table to scan」(要掃描的資料表) 下方的「Table」(資料表) 欄位中,按一下「Browse」(瀏覽), 選取專案中的
quickstart_data_profile.bikeshare_trips資料表, 然後按一下「Select」(選取)。在「模式」中選取「標準」。
在「範圍」部分,選取「整個資料」。
對「時間表」選取「按需求」。
其餘設定則保留預設狀態。
點按「Run scan」(執行掃描作業)。
掃描工作會開始執行。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_id空值百分比 約 5% 的空值:空值百分比大於 0%,表示部分記錄缺少車站結帳識別碼 (例如無樁或無資訊亭的行程)。 使用「完整度 (非空值)」規則,找出並標記缺少電台 ID 的記錄。 subscriber_type最高值 非預期類別:常見值清單中出現非標準類別 (例如 INVALID_TIER) 和有效會員等級,表示使用者輸入內容或擷取的資料未經過驗證。使用「有效性 (設定)」規則,強制所有傳入值都屬於允許的會員類型清單。 trip_id不重複計數和百分比 偵測到重複的 ID:不重複性低於 100% (約 98%),表示有重複的 ID 記錄。主鍵和行程 ID 應完全不重複。 使用「唯一性」規則設定目標,標記並防止重複的行程記錄。
這些剖析結果可做為實證基礎,協助您建立有針對性的資料品質規則。
建立及執行資料品質掃描作業
現在您已瞭解資料的樣貌,請設定自動資料品質規則,以便偵測異常狀況。在這個步驟中,您會根據設定檔的結果,設定四種常見的規則類型。
控制台
在 Google Cloud 控制台中,前往「資料剖析與品質」頁面。
按一下「建立資料品質掃描作業」。
在「General」(一般) 下方的「Display name」(顯示名稱) 欄位中,輸入
bikeshare-trips-quality。在「Table to scan」(要掃描的資料表) 下方的「Table」(資料表) 欄位中,按一下「Browse」(瀏覽),選取
quickstart_data_profile.bikeshare_trips資料表,然後按一下「Select」(選取)。在「範圍」部分,選取「整個資料」。
對「時間表」選取「按需求」。
其他設定保留預設值,然後點選「繼續」。
在「資料品質規則」部分,按一下「新增規則」,然後選取「內建規則類型」。
在「新增規則」面板中,選取資料欄和規則類型:
- 在「Choose columns」(選擇欄) 欄位中,按一下「Browse」(瀏覽),然後選取
duration_minutes、start_station_id、subscriber_type和trip_id。 - 按一下「選取」。
- 在「選擇規則類型」清單中,選取「範圍檢查」、「NULL 檢查」、「值集檢查」和「唯一性檢查」,然後按一下「確定」。
在產生的規則清單中,選取下列各項規則的核取方塊:
duration_minutes:範圍檢查start_station_id:NULL 檢查subscriber_type:值集檢查trip_id:獨特性檢查
按一下「選取」。
- 在「Choose columns」(選擇欄) 欄位中,按一下「Browse」(瀏覽),然後選取
在「資料品質規則」表格中,為需要值的規則設定參數:
- 如要進行
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 控制台中,前往「資料剖析與品質」頁面。
在「Scans」(掃描) 表格中,按一下「bikeshare-trips-quality」掃描。
在「總覽」部分中,按一下「查看結果」即可開啟工作詳細資料。
在「工作詳細資料」面板中,查看評估結果:
資料品質狀態:如預期,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 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。
控制台
在 Google Cloud 控制台中,前往「資料剖析與品質」頁面。
在「掃描」資料表中,選取「bikeshare-trips-quality」和「bikeshare-trips-profile」。
按一下「Delete」(刪除) 加以確認。
前往「BigQuery」頁面
在「Explorer」窗格中,按一下「Datasets」。
選取「
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。