במאמר הזה מוסבר איך להשתמש בסריקות של איכות הנתונים ב-Knowledge Catalog (לשעבר Dataplex Universal Catalog) כדי למדוד, לעקוב ולנהל את איכות הנתונים. סריקות של איכות הנתונים עוזרות לאמת את הנתונים באופן אוטומטי כדי לוודא שהם מלאים, תקפים ועקביים.
באמצעות סריקות של איכות הנתונים, אתם יכולים להגדיר כללים לבדיקת ערכים חסרים, לוודא שהערכים תואמים לביטוי רגולרי או שייכים לקבוצה, לוודא שהערכים ייחודיים או להשתמש ב-SQL מותאם אישית כדי לבצע אימותים מורכבים יותר, כמו זיהוי אנומליות. במאמר הזה מוסבר איך ליצור ולנהל סריקות של איכות הנתונים.
מידע נוסף על סריקות של איכות הנתונים מידע נוסף על שימוש חוזר בכללי איכות נתונים בסריקות מרובות
לפני שמתחילים
-
מפעילים את Dataplex API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים - אופציונלי: כדי ליצור המלצות לכללי איכות נתונים על סמך התוצאות של סריקת פרופיל נתונים, יוצרים ומריצים את סריקת פרופיל הנתונים.
תפקידים והרשאות נדרשים
בקטע הזה מתוארים התפקידים וההרשאות של IAM שנדרשים כדי להשתמש בסריקות של איכות הנתונים ב-Knowledge Catalog.
תפקידים והרשאות של משתמשים
כדי לקבל את ההרשאות שדרושות להרצה ולניהול של סריקות איכות נתונים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
מריצים סריקה של איכות הנתונים בטבלה ב-BigQuery:
- BigQuery Job User (
roles/bigquery.jobUser) בפרויקט כדי להריץ משימות סריקה - BigQuery Data Viewer (צפייה בנתוני BigQuery) (
roles/bigquery.dataViewer) בטבלת BigQuery שרוצים לסרוק
- BigQuery Job User (
-
פרסום תוצאות של סריקת איכות נתונים ב-Knowledge Catalog:
- BigQuery Data Editor (
roles/bigquery.dataEditor) בטבלה שנסרקה - Dataplex Catalog Editor (
roles/dataplex.catalogEditor) on the@bigqueryentry group in the same location as the table
- BigQuery Data Editor (
-
ביצוע משימות ספציפיות במשאבים של
DataScan:- Dataplex DataScan Administrator (
roles/dataplex.dataScanAdmin) on the project for full access - Dataplex DataScan Creator (
roles/dataplex.dataScanCreator) בפרויקט כדי ליצור סריקות - Dataplex DataScan Editor (
roles/dataplex.dataScanEditor) בפרויקט לגישת כתיבה - Dataplex DataScan Viewer (
roles/dataplex.dataScanViewer) בפרויקט כדי לקרוא מטא-נתונים של סריקה - Dataplex DataScan DataViewer (
roles/dataplex.dataScanDataViewer) בפרויקט כדי לקרוא נתוני סריקה, כולל כללים ותוצאות
- Dataplex DataScan Administrator (
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות להרצה ולניהול של סריקות איכות נתונים. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להריץ סריקות של איכות הנתונים ולנהל אותן, נדרשות ההרשאות הבאות:
-
מריצים סריקה של איכות הנתונים בטבלת BigQuery:
-
bigquery.jobs.createבפרויקט כדי להריץ משימות סריקה -
bigquery.tables.getבטבלה ב-BigQuery שרוצים לסרוק -
bigquery.tables.getDataבטבלה ב-BigQuery שרוצים לסרוק
-
-
פרסום תוצאות של סריקת איכות נתונים ב-Knowledge Catalog:
-
bigquery.tables.updateבטבלה שנסרקה -
dataplex.entryGroups.useDataQualityScorecardAspectבכרטיסייה@bigqueryשל קבוצת הערכים באותו מיקום כמו הטבלה
-
-
יצירת
DataScan:dataplex.datascans.createבפרויקט -
מחיקת
DataScan:dataplex.datascans.deleteבפרויקט -
כדי להציג את המטא-נתונים של
DataScan:dataplex.datascans.getבפרויקט -
צפייה בפרטים של
DataScan, כולל כללים ותוצאות:dataplex.datascans.getDataבפרויקט -
רשימת
DataScan:dataplex.datascans.listבפרויקט -
להריץ
DataScan:dataplex.datascans.runבפרויקט -
עדכון של
DataScan:dataplex.datascans.updateבפרויקט -
קבלת מדיניות IAM או הגדרת מדיניות IAM ב-
DataScan:-
dataplex.datascans.getIamPolicyבפרויקט -
dataplex.datascans.setIamPolicyבפרויקט
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
אם אתם צריכים לגשת לעמודות שמוגנות על ידי מדיניות גישה ברמת העמודה ב-BigQuery, אתם צריכים גם הרשאות לעמודות האלה.
תפקידים והרשאות של חשבון שירות ב-Knowledge Catalog
אם לא יצרתם סריקות של איכות נתונים או סריקת פרופיל נתונים, או אם אין לכם אגם של Knowledge Catalog בפרויקט הזה, צרו מזהה שירות על ידי הפעלת הפקודה:
gcloud beta services identity create --service=dataplex.googleapis.com.
הפקודה הזו מחזירה מזהה של שירות קטלוג הידע, אם הוא קיים.
כדי לוודא שלחשבון השירות של Knowledge Catalog בפרויקט שמכיל את הסריקה של איכות הנתונים יש את ההרשאות הנדרשות לקריאת נתונים ממקורות שונים ולייצוא תוצאות, צריך לבקש מהאדמין להקצות את תפקידי ה-IAM הבאים לחשבון השירות של Knowledge Catalog בפרויקט שמכיל את הסריקה של איכות הנתונים:
-
קריאת נתונים מטבלאות BigQuery:
BigQuery Data Viewer (
roles/bigquery.dataViewer) בטבלאות BigQuery שצריך לסרוק ובכל טבלה אחרת שמפנים אליה בכללים -
קריאת נתוני טבלה בקטלוג Iceberg REST:
BigLake Viewer (
roles/biglake.viewer) בטבלאות של קטלוג Iceberg REST שצריך לסרוק ובכל טבלה אחרת שמופיעה בכללים -
ייצוא תוצאות הסריקה לטבלה ב-BigQuery:
BigQuery Data Editor (
roles/bigquery.dataEditor) במערך הנתונים ובטבלה של התוצאות -
סריקת נתונים ב-BigQuery שמסודרים באגם של Knowledge Catalog:
- Dataplex Metadata Reader (
roles/dataplex.metadataReader) on Dataplex resources - בעל הרשאת צפייה ב-Dataplex (
roles/dataplex.viewer) במשאבי Dataplex
- Dataplex Metadata Reader (
-
סריקה של טבלה חיצונית ב-BigQuery מ-Cloud Storage:
Storage Object Viewer (
roles/storage.objectViewer) בקטגוריה של Cloud Storage
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות לקריאת נתונים ממקורות שונים ולייצוא תוצאות. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לקרוא נתונים ממקורות שונים ולייצא תוצאות, נדרשות ההרשאות הבאות:
-
קריאת נתונים מטבלה ב-BigQuery:
-
bigquery.tables.getבטבלאות BigQuery -
bigquery.tables.getDataבטבלאות BigQuery
-
-
ייצוא תוצאות הסריקה לטבלה ב-BigQuery:
-
bigquery.datasets.getבטבלה ובמערך הנתונים של התוצאות -
bigquery.tables.createבטבלה ובמערך הנתונים של התוצאות -
bigquery.tables.getבטבלה ובמערך הנתונים של התוצאות -
bigquery.tables.getDataבטבלה ובמערך הנתונים של התוצאות -
bigquery.tables.updateבטבלה ובמערך הנתונים של התוצאות -
bigquery.tables.updateDataבטבלה ובמערך הנתונים של התוצאות
-
-
סריקת נתונים ב-BigQuery שמסודרים באגם Knowledge Catalog:
-
dataplex.lakes.listבמשאבי Dataplex -
dataplex.lakes.getבמשאבי Dataplex -
dataplex.zones.listבמשאבי Dataplex -
dataplex.zones.getבמשאבי Dataplex -
dataplex.entities.listבמשאבי Dataplex -
dataplex.entities.getבמשאבי Dataplex -
dataplex.operations.getבמשאבי Dataplex
-
-
סריקה של טבלה חיצונית ב-BigQuery מ-Cloud Storage:
-
storage.buckets.getבקטגוריה של Cloud Storage -
storage.objects.getבקטגוריה של Cloud Storage
-
יכול להיות שהאדמין יוכל גם להעניק לחשבון השירות של Knowledge Catalog בפרויקט שמכיל את הסריקה של איכות הנתונים את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
אם אתם צריכים לגשת לעמודות שמוגנות על ידי מדיניות גישה ברמת העמודה ב-BigQuery, אתם צריכים להקצות הרשאות לחשבון השירות של Knowledge Catalog לעמודות האלה.
אם בטבלה מופעלות מדיניות גישה ברמת השורה ב-BigQuery, אפשר לסרוק רק את השורות שחשבון השירות של Knowledge Catalog יכול לראות. הערה: הרשאות הגישה של משתמשים פרטיים לא נבדקות במדיניות ברמת השורה.
דרישות רשת
כדי להריץ סריקה, צריך להפעיל את הגישה הפרטית ל-Google בתת-הרשת של ה-VPC שבה משתמשים לסריקה. אם לא מציינים רשת משנה, צריך לוודא שמופעלת גישה פרטית ל-Google ברשת המשנה שמוגדרת כברירת מחדל.
הגדרת כללים לאיכות הנתונים
אפשר להגדיר כללים לאיכות הנתונים באמצעות:
אם אתם משתמשים ב-Google Cloud CLI, אתם יכולים להגדיר את הכללים האלה בקובץ JSON או YAML.
בדוגמאות שבקטעים הבאים מוסבר איך להגדיר מגוון כללים של איכות נתונים. הכללים מאמתים טבלת דוגמה שמכילה נתונים על עסקאות של לקוחות. נניח שהסכימה של הטבלה היא:
| שם העמודה | סוג העמודה | תיאור העמודה |
|---|---|---|
| transaction_timestamp | חותמת הזמן | חותמת הזמן של העסקה. הטבלה מחולקת למחיצות לפי השדה הזה. |
| customer_id | String | מספר לקוח בפורמט של 8 אותיות ואחריהן 16 ספרות. |
| transaction_id | String | מזהה העסקה צריך להיות ייחודי בכל הטבלה. |
| currency_id | String | אחד מהמטבעות הנתמכים. סוג המטבע צריך להיות זהה לאחד מסוגי המטבעות שזמינים בטבלת המימדים dim_currency.
|
| amount | מספר ממשי (float) | סכום העסקה. |
| discount_pct | מספר ממשי (float) | אחוז ההנחה. הערך צריך להיות בין 0 ל-100. |
הגדרת כללים לאיכות הנתונים באמצעות סוגי כללים מובנים
הדוגמאות הבאות מבוססות על סוגי כללים מובנים. אפשר ליצור כללים על סמך סוגי כללים מובנים באמצעות Google Cloud המסוף או ה-API. יכול להיות ש-Knowledge Catalog ימליץ על חלק מהכללים האלה.
| שם עמודה | סוג הכלל | המימד המוצע | פרמטרים של כללים |
|---|---|---|---|
transaction_id |
בדיקת ייחודיות | ייחודיות | סף: Not Applicable |
amount |
בדיקת ערך Null | השלמות | סף: 100% |
customer_id |
בדיקת ביטוי רגולרי (regex) | תוקף | ביטוי רגולרי: ^[a-zA-Z]{8}[0-9]{16}$ ערך סף: 100%
|
currency_id |
בדיקת ערך מוגדר | תוקף | קבוצה של: USD,JPY,INR,GBP,CAN סף: 100%
|
הגדרת כללים לאיכות הנתונים באמצעות כללי SQL בהתאמה אישית
כדי ליצור כללי SQL בהתאמה אישית, משתמשים במסגרת הבאה:
כשיוצרים כלל שמעריך שורה אחת בכל פעם, צריך ליצור ביטוי שמפיק את מספר השורות שהוערכו בהצלחה כש-Knowledge Catalog מעריך את השאילתה
SELECT COUNTIF(CUSTOM_SQL_EXPRESSION) FROM TABLE. ב-Knowledge Catalog נבדק אם מספר השורות שעברו בהצלחה עומד בסף.כשיוצרים כלל שמוערך על פני השורות או שמשתמש בתנאי של טבלה, צריך ליצור ביטוי שמחזיר הצלחה או כישלון כש-Knowledge Catalog מעריך את השאילתה
SELECT IF(CUSTOM_SQL_EXPRESSION) FROM TABLE.כשיוצרים כלל שמעריך את המצב הלא תקין של מערך נתונים, צריך לספק הצהרה שמחזירה שורות לא תקינות. אם מוחזרות שורות, הכלל נכשל. משמיטים את הנקודה-פסיק בסוף הצהרת ה-SQL.
אפשר להפנות לטבלה של מקור נתונים ולכל מסנני התנאים המוקדמים שלה באמצעות פרמטר ההפניה לנתונים
${data()}בכלל, במקום לציין במפורש את טבלת המקור והמסננים שלה. דוגמאות למסנני תנאי מוקדם כוללות מסנני שורות, אחוזים של דגימה ומסננים מצטברים. הפרמטר${data()}הוא תלוי אותיות רישיות.
הדוגמאות הבאות מבוססות על כללי SQL בהתאמה אישית.
| סוג הכלל | תיאור הכלל | ביטוי SQL |
|---|---|---|
| תנאי השורה | הפונקציה בודקת אם הערך של discount_pct
הוא בין 0 ל-100.
|
0 <discount_pct AND discount_pct < 100
|
| תנאי השורה | בדיקה של הפניה כדי לוודא ש-currency_id היא אחת מהמטבעות הנתמכים.
|
currency_id in (select id from my_project_id.dim_dataset.dim_currency)
|
| מצב הטבלה | ביטוי SQL מצטבר שבודק אם הערך הממוצע של discount_pct הוא בין 30% ל-50%.
|
30<avg(discount) AND avg(discount) <50
|
| תנאי השורה | הפונקציה בודקת אם תאריך מסוים לא חל בעתיד. | TIMESTAMP(transaction_timestamp) < CURRENT_TIMESTAMP()
|
| מצב הטבלה |
פונקציה בהגדרת המשתמש (UDF) ב-BigQuery
כדי לבדוק שהסכום הממוצע של העסקאות קטן מערך מוגדר מראש
לכל מדינה. כדי ליצור את ה-UDF (ב-JavaScript), מריצים את הפקודה הבאה:
CREATE OR REPLACE FUNCTION
myProject.myDataset.average_by_country (
country STRING, average FLOAT64)
RETURNS BOOL LANGUAGE js AS R"""
if (country = "CAN" && average < 5000){
return 1
} else if (country = "IND" && average < 1000){
return 1
} else { return 0 }
""";
|
דוגמה לכלל לבדיקת סכום העסקה הממוצע עבור country=CAN.
myProject.myDataset.average_by_country(
"CAN",
(SELECT avg(amount) FROM
myProject.myDataset.transactions_table
WHERE currency_id = 'CAN'
))
|
| מצב הטבלה | סעיף BigQuery ML
predict לזיהוי אנומליות ב-discount_pct. המערכת בודקת
אם צריך להחיל הנחה על סמך customer,
currency ו-transaction. הכלל בודק אם התחזית תואמת לערך בפועל ב-99% מהמקרים לפחות. הנחה: מודל למידת המכונה נוצר לפני השימוש בכלל. יוצרים את מודל ה-ML באמצעות הפקודה הבאה:
CREATE MODEL
model-project-id.dataset-id.model-name
OPTIONS(model_type='logistic_reg') AS
SELECT
IF(discount_pct IS NULL, 0, 1) AS label,
IFNULL(customer_id, "") AS customer,
IFNULL(currency_id, "") AS currency,
IFNULL(amount, 0.0) AS amount
FROM
`data-project-id.dataset-id.table-names`
WHERE transaction_timestamp < '2022-01-01';
|
הכלל הבא בודק אם דיוק התחזית גדול מ-99%.
SELECT
accuracy > 0.99
FROM
ML.EVALUATE
(MODEL model-project-id.dataset-id.model-name,
(
SELECT
customer_id,
currency_id,
amount,
discount_pct
FROM
data-project-id.dataset-id.table-names
WHERE transaction_timestamp > '2022-01-01';
)
)
|
| תנאי השורה | פונקציית חיזוי של BigQuery ML לזיהוי אנומליות ב-discount_pct. הפונקציה
בודקת אם צריך להחיל הנחה על סמך customer,
currency ו-transaction.
הכלל מזהה את כל המקרים שבהם התחזית לא תאמה.
הנחה: מודל ה-ML נוצר לפני השימוש בכלל. יוצרים את מודל למידת המכונה באמצעות הפקודה הבאה:
CREATE MODEL
model-project-id.dataset-id.model-name
OPTIONS(model_type='logistic_reg') AS
SELECT
IF(discount_pct IS NULL, 0, 1) AS label,
IFNULL(customer_id, "") AS customer,
IFNULL(currency_id, "") AS currency,
IFNULL(amount, 0.0) AS amount
FROM
`data-project-id.dataset-id.table-names`
WHERE transaction_timestamp < '2022-01-01';
|
הכלל הבא בודק אם התחזית לגבי ההנחה תואמת לערך בפועל בכל שורה.
IF(discount_pct > 0, 1, 0)
=(SELECT predicted_label FROM
ML.PREDICT(
MODEL model-project-id.dataset-id.model-name,
(
SELECT
customer_id,
currency_id,
amount,
discount_pct
FROM
data-project-id.dataset-id.table-names AS t
WHERE t.transaction_timestamp =
transaction_timestamp
LIMIT 1
)
)
)
|
| טענת נכוֹנוּת (assertion) של SQL | הפונקציה בודקת אם הערך של discount_pct גדול מ-30% להיום, על ידי בדיקה אם יש שורות עם אחוז הנחה שקטן מ-30 או שווה ל-30. |
SELECT * FROM my_project_id.dim_dataset.dim_currency WHERE discount_pct <= 30 AND transaction_timestamp >= current_date() |
| טענת SQL (עם פרמטר הפניה לנתונים) | הפונקציה בודקת אם הערך מסנן התאריכים פרמטר ההפניה לנתונים |
SELECT * FROM ${data()} WHERE discount_pct > 30 |
הגדרת כללים לאיכות הנתונים באמצעות ה-CLI של gcloud
בקובץ ה-YAML לדוגמה הבא נעשה שימוש בחלק מהכללים שמופיעים בכללים לדוגמה באמצעות סוגים מובנים ובכללי SQL בהתאמה אישית לדוגמה. קובץ ה-YAML הזה מכיל גם מפרטים אחרים לסריקה של איכות הנתונים, כמו מסננים ואחוז הדגימה. כשמשתמשים ב-CLI של gcloud כדי ליצור או לעדכן סריקה של איכות הנתונים, אפשר להשתמש בקובץ YAML כקלט לארגומנט --data-quality-spec-file.
rules:
- uniquenessExpectation: {}
column: transaction_id
dimension: UNIQUENESS
- nonNullExpectation: {}
column: amount
dimension: COMPLETENESS
threshold: 1
- regexExpectation:
regex: '^[a-zA-Z]{8}[0-9]{16}$'
column : customer_id
ignoreNull : true
dimension : VALIDITY
threshold : 1
- setExpectation :
values :
- 'USD'
- 'JPY'
- 'INR'
- 'GBP'
- 'CAN'
column : currency_id
ignoreNull : true
dimension : VALIDITY
threshold : 1
- rangeExpectation:
minValue : '0'
maxValue : '100'
column : discount_pct
ignoreNull : true
dimension : VALIDITY
threshold : 1
- rowConditionExpectation:
sqlExpression : 0 < `discount_pct` AND `discount_pct` < 100
column: discount_pct
dimension: VALIDITY
threshold: 1
- rowConditionExpectation:
sqlExpression : currency_id in (select id from `my_project_id.dim_dataset.dim_currency`)
column: currency_id
dimension: VALIDITY
threshold: 1
- tableConditionExpectation:
sqlExpression : 30 < avg(discount_pct) AND avg(discount_pct) < 50
dimension: VALIDITY
- rowConditionExpectation:
sqlExpression : TIMESTAMP(transaction_timestamp) < CURRENT_TIMESTAMP()
column: transaction_timestamp
dimension: VALIDITY
threshold: 1
- sqlAssertion:
sqlStatement :