יצירת פרופיל של איכות הנתונים ואימות שלהם
ב-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, if any are not already enabled.
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 בפרויקט:
-
יצירה, הפעלה ומחיקה של סריקות נתונים:
עריכת DataScan ב-Dataplex (
roles/dataplex.dataScanEditor) -
יצירה, אכלוס ומחיקה של טבלאות לדוגמה:
BigQuery Data Owner (
roles/bigquery.dataOwner) -
הרצת שאילתות SQL ב-BigQuery:
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 . -
USER_EMAIL: כתובת האימייל של חשבון המשתמש (לדוגמה,name@example.com).
מתן הרשאות לסוכן השירות של Knowledge Catalog
סוכן שירות הוא חשבון שירות בניהול Google, שמשמש את Knowledge Catalog כדי להריץ בשבילכם שאילתות סריקה ב-BigQuery.
במסוף Google Cloud , לוחצים על Activate 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 . -
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 . -
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
-
יצירת טבלה ומערך נתונים לדוגמה
כדי לנסות את הפרופילים ואת סריקות איכות הנתונים בצורה בטוחה בלי לגעת בנתוני הייצור, מגדירים מערך נתונים ייעודי ב-BigQuery ויוצרים טבלה שמכילה נתונים לדוגמה של שיתוף אופניים עם חריגות מכוונות, כמו כפילויות וערכי null.
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית Explorer, לוחצים על View actions ליד מזהה הפרויקט, ואז לוחצים על Create dataset.
בשדה Dataset ID, מזינים את הערך
quickstart_data_profile.ברשימה מיקום הנתונים, בוחרים באפשרות us-central1 (Iowa).
לוחצים על Create dataset.
בעורך השאילתות, מזינים את שאילתת ה-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 .לוחצים על הפעלה.
gcloud
ב-Cloud Shell, יוצרים את מערך הנתונים
quickstart_data_profileבאזורus-central1:bq --location=us-central1 mk --dataset PROJECT_ID:quickstart_data_profile
מחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud .יוצרים את הטבלה לדוגמה
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 , נכנסים לדף Data profiling & quality.
לוחצים על יצירת סריקת פרופיל נתונים.
בקטע Choose type, משאירים את האפשרות Data profile scan מסומנת.
בקטע General, בשדה השם המוצג, מזינים
bikeshare-trips-profile.בקטע Table to scan, בשדה Table, לוחצים על Browse, בוחרים את הטבלה
quickstart_data_profile.bikeshare_tripsבפרויקט ולוחצים על Select.בשדה Mode, בוחרים באפשרות Standard.
בשדה היקף, בוחרים באפשרות כל הנתונים.
בקטע תזמון, בוחרים באפשרות לפי דרישה.
משאירים את שאר ההגדרות בערכי ברירת המחדל שלהן.
לוחצים על הפעלת הסריקה.
משימת הסריקה מתחילה. בדרך כלל, הסריקה וחישוב הנתונים הסטטיסטיים של הטבלה ב-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 .מריצים את סריקת פרופיל הנתונים:
gcloud dataplex datascans run bikeshare-trips-profile \ --location=us-central1
משימת הסריקה מתחילה ברקע. הסריקה נמשכת בדרך כלל 3 עד 5 דקות.
בדיקת התוצאות של סריקת פרופיל הנתונים
אחרי שהסריקה מסתיימת, בודקים את הנתונים הסטטיסטיים של העמודות כדי להבין את מאפייני הנתונים.
במסוף Google Cloud , נכנסים לדף Data profiling & quality.
ברשימת הסריקות, לוחצים על bikeshare-trips-profile.
אם הסריקה עדיין לא הופעלה, לוחצים על הפעלה מיידית.
בקטע Overview, ממתינים עד שמופיע הסטטוס Succeeded במשימת הסריקה האחרונה.
בתמונה הבאה מוצגת משימת הסריקה בקטע Overview עם הסטטוס Succeeded:
בודקים את תוצאות הסריקה כדי להבין את התפלגות הנתונים בטבלה ולזהות יעדים פוטנציאליים לאימות איכות הנתונים. בכרטיסייה Latest job results, בכלי Knowledge Catalog מוצגים מדדים ברמת העמודה, כולל Null %, Unique count and %, Top values ו-Summary statistics.
בטבלה הבאה מפורטים המדדים של הפרופיל שצריך לבדוק בכל עמודה בטבלה, איך לפרש את התוצאות ואיזה כלל של איכות נתונים צריך להגדיר:
עמודה בטבלה מדד תוצאות הפרופיל מה לחפש ואיך לפרש את הנתונים יעד אימות של איכות הנתונים duration_minutesנתונים סטטיסטיים מסכמים זוהו ערכים שליליים: הערך המינימלי הוא -10.0דקות. משך הנסיעה שחלף לא יכול להיות שלילי, כי זה מצביע על הקלטות לא תקינות של החיישן או של הנסיעה.מטרגטים באמצעות כלל תוקף (טווח) (כמו duration_minutes ≥ 1.0) כדי לדרוש זמני נסיעה חיוביים שחלפו.start_station_idNull % כ-5% ערכי null: אחוז ערכי ה-null גדול מ-0%, מה שמראה שבחלק מהרשומות חסרים מזהי תחנות (כמו נסיעות ללא עגינה או ללא קיוסק). מטרגטים באמצעות הכלל שלמות (לא ריק) כדי לזהות ולסמן רשומות שחסרים בהן מזהי תחנות. subscriber_typeהערכים המובילים קטגוריות לא צפויות: ברשימת הערכים הנפוצים מופיעות קטגוריות לא סטנדרטיות (כמו INVALID_TIER) לצד רמות חברות תקינות, מה שמעיד על קלט משתמש שלא אומת או על בעיות בהטמעה.מטרגטים באמצעות הכלל תוקף (הגדרה) כדי לאכוף את הדרישה שכל הערכים הנכנסים יהיו שייכים לרשימת סוגי החברות המותרים. trip_idספירה ייחודית ו-% זוהו מזהים כפולים: הייחודיות נמוכה מ-100% (בערך 98%), מה שמצביע על רשומות מזהים חוזרות. המפתחות הראשיים ומזהי הנסיעות צריכים להיות ייחודיים ב-100%. מטרגטים באמצעות כלל ייחודיות כדי לסמן ולמנוע רשומות נסיעה כפולות.
הממצאים האלה בפרופיל מספקים לכם בסיס מבוסס-ראיות ליצירת כללים ממוקדים לאיכות הנתונים.
יצירה והפעלה של סריקה לבדיקת איכות הנתונים
עכשיו, אחרי שגיליתם איך הנתונים נראים, אתם יכולים להגדיר כללים אוטומטיים לאיכות הנתונים כדי לזהות חריגות. בשלב הזה מגדירים ארבעה סוגים נפוצים של כללים על סמך הממצאים בפרופיל.
המסוף
במסוף Google Cloud , נכנסים לדף Data profiling & quality.
לוחצים על יצירת סריקת איכות נתונים.
בקטע General, בשדה השם המוצג, מזינים
bikeshare-trips-quality.בקטע Table to scan, בשדה Table, לוחצים על Browse, בוחרים את הטבלה
quickstart_data_profile.bikeshare_tripsולוחצים על Select.בשדה היקף, בוחרים באפשרות כל הנתונים.
בקטע Schedule, בוחרים באפשרות On-demand.
משאירים את שאר ההגדרות בברירת המחדל ולוחצים על Continue.
בקטע כללי איכות הנתונים, לוחצים על הוספת כללים ובוחרים באפשרות סוגי כללים מובנים.
בחלונית הוספת כללים, בוחרים את העמודות ואת סוגי הכללים:
- בשדה Choose columns, לוחצים על Browse ובוחרים את העמודות
duration_minutes,start_station_id,subscriber_typeו-trip_id. - לוחצים על בחירה.
- ברשימה Choose rule types, בוחרים באפשרויות Range check, NULL check, Value-set check ו-Uniqueness check, ואז לוחצים על OK.
ברשימת הכללים שנוצרה, מסמנים את התיבה של כל אחד מהכללים הבאים:
-
duration_minutes: בדיקת טווח -
start_station_id: בדיקת NULL -
subscriber_type: בדיקת קבוצת הערכים trip_id: בדיקת ייחודיות
-
לוחצים על בחירה.
- בשדה Choose columns, לוחצים על Browse ובוחרים את העמודות
בטבלה כללי איכות הנתונים, מגדירים פרמטרים לכללים שדורשים ערכים:
- ב-
duration_minutes(בדיקת טווח), לוחצים על עריכה, מזינים1.0בשדה ערך מינימלי ולוחצים על שמירה. - ב-
subscriber_type(Value-set check), לוחצים על Edit, לוחצים על Add Value כדי להוסיף כל אחד מהערכים המותרים (Local Rider,Walk Up,Student Membershipו-Weekender) ולוחצים על Save.
- ב-
לוחצים על המשך ואז על הפעלת סריקה.
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 .מריצים את הסריקה של איכות הנתונים:
gcloud dataplex datascans run bikeshare-trips-quality \ --location=us-central1
בדיקת הערכות של כללי איכות נתונים
בודקים את התוצאות של איכות הנתונים כדי לראות איך הכללים העריכו את הנתונים לדוגמה וזיהו חריגות.
במסוף Google Cloud , נכנסים לדף Data profiling & quality.
בטבלה Scans, לוחצים על הסריקה bikeshare-trips-quality.
בקטע סקירה כללית, לוחצים על הצגת התוצאות כדי לפתוח את פרטי המשימה.
בחלונית Job details, בודקים את תוצאות ההערכה:
סטטוס איכות הנתונים: כמו שציפינו, כל 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 בעמודה Query to get failed records ולהריץ אותה ב-BigQuery כדי לבודד את השורות הלא תקינות ולבדוק אותן.
-
עכשיו יצרתם פרופיל של טבלה ב-BigQuery כדי לגלות נתונים סטטיסטיים של עמודות, והשתמשתם בתובנות האלה כדי להגדיר ולאמת כללים אוטומטיים לאיכות הנתונים.
הסרת המשאבים
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, מבצעים את הפעולות הבאות.
המסוף
במסוף Google Cloud , נכנסים לדף Data profiling & quality.
בטבלה Scans, בוחרים באפשרויות bikeshare-trips-quality ו-bikeshare-trips-profile.
לוחצים על מחיקה ומאשרים.
נכנסים לדף BigQuery.
בחלונית Explorer, לוחצים על Datasets.
בוחרים את מערך הנתונים
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 .
המאמרים הבאים
- איך לראות את תוצאות הסריקה של איכות הנתונים ולפתור בעיות
- מעקב אחרי מדדי Knowledge Catalog
- איך יוצרים תהליך עבודה של איכות נתונים מסוג policy-as-code באמצעות Antigravity CLI
- ניהול כללים של איכות נתונים כקוד באמצעות Terraform
- שימוש חוזר בכללים לאיכות הנתונים בטבלאות
- תרחישי שימוש נוספים ב-Knowledge Catalog