במסמך הזה מוסבר איך לחפש שושלת נתונים חוצה אזורים עם כמה רמות באמצעות searchLineageStreaming API.
ה-API searchLineageStreaming מבצע חיפוש לרוחב בכיוון שצוין (במעלה הזרם או במורד הזרם), החל מקבוצה מוגדרת של ישויות שורש, ומחזיר גרף שושלת נתונים מאוחד כתגובה של סטרימינג בזמן אמת.
בניגוד לממשקי API רגילים לחיפוש מקורות נתונים, שעלולים להגיע לזמן קצוב לתפוגה בגרפים גדולים של פרויקטים מרובים, searchLineageStreaming מספק תשובות בזמן אמת במנות. אפשר להשתמש ב-API הזה כשיוצרים כלים שצריכים לעבור על ארכיטקטורות נתונים רחבות, עמוקות או חוצות אזורים בלי שיתרחשו פסק זמן של בקשות.
מידע נוסף זמין במאמר מידע על חיפוש שושלת נתונים בכמה אזורים.
יכולות עיקריות
היכולות של searchLineageStreaming API כוללות:
חיפוש לרוחב: סורק את תרשים שושלת הנתונים שכבה אחר שכבה, ומחשב בצורה מדויקת את העומק של כל נכס מקושר.
תשובה בסטרימינג: מחזירה תתי-גרפים וקישורי שושלת נתונים כפי שהם מתגלים על ידי מערכת ה-Backend. השיטה הזו יעילה מאוד לגרפים רחבים או עוצמתיים של שושלות נתונים, ומונעת מצבים של זמן קצוב לתפוגה לבקשה.
מעקב אחרי מקורות נתונים בכמה מיקומים וכמה פרויקטים: למרות שמציינים רק פרויקט חיוב אחד בנתיב הבקשה, ה-API מגלה באופן אוטומטי את קישורי השושלת ועוקב אחריהם בכמה פרויקטים ובכמה מיקומים גיאוגרפיים, בתנאי שיש לכם את ההרשאות הנדרשות. Google Cloud
שושלת נתונים ברמת העמודה: תומך בחיפוש תלות ברמת העמודה בין נכסים.
חיפושים עם תו כללי: מאפשרים לאחזר את כל שושלת הנתונים ברמת העמודה של ישות ספציפית על ידי הוספת הסיומת
*לשם המוגדר במלואו (FQN).תובנות לגבי פייפליינים: אפשר לאחזר מטא-נתונים לגבי פייפליינים (תהליכים) שיצרו את קישורי שושלת הנתונים.
לפני שמתחילים
לפני ששולחים בקשות ל-API, חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות בנושאי אבטחה וסביבה:
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לחיפוש קישורים של שושלת הנתונים, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM Data Lineage Viewer (roles/datalineage.viewer) בפרויקטים שבהם מאוחסנים הקישורים והתהליכים של שושלת הנתונים.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות לחיפוש קישורים של שושלת נתונים. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לחפש קישורים של מעקב אחר מקורות נתונים, נדרשות ההרשאות הבאות:
-
חיפוש של שושלת ברמת הישות:
datalineage.events.getבפרויקט שבו מאוחסן הקישור -
חיפוש שושלת ברמת העמודה:
datalineage.events.getFieldsבפרויקט שבו הקישור מאוחסן -
אחזור פרטים מלאים על תהליך צינור:
datalineage.processes.getבפרויקט שבו התהליך מאוחסן
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
הגדרת היקף משאבים
כשמגדירים את בקשת ה-API, צריך להבחין בין המשאב שמשמש לחיוב אדמיניסטרטיבי לבין המיקומים בפועל שנסרקים על ידי ה-API:
נתיב ההורה לחיוב: הנתיב
parentבבקשת כתובת ה-URL חייב להיות בפורמטprojects/project/locations/location. השילוב הספציפי הזה של פרויקט ומיקום משמש באופן בלעדי להערכת מכסות החיוב ומגבלות הקצב של יצירת בקשות ל-API.מיקומי טירגוט: מגדירים באופן מפורש את האזורים שרוצים שהקצה העורפי יסרוק במערך
locationsבגוף הבקשה.
הגדרת אימות
מאתחלים משתנה סביבה עם אסימון גישה Google Cloud כדי לאמת את הפקודות של curl:
export ACCESS_TOKEN=$(gcloud auth print-access-token)
דוגמאות לשימוש
בדוגמאות הבאות נעשה שימוש בנקודת הקצה datalineage.googleapis.com.
חיפוש בנתוני שושלת רב-רמתיים של כמה פרויקטים
כדי לבצע חיפוש מעמיק של שושלת נתונים שחוצה כמה רמות של הגרף וסורק פרויקטים שונים של Google Cloud , צריך להגדיר את המשתנים הבאים:
מגדירים את
limits.maxDepthלעומק החיפוש הרצוי (אפשר להזין ערכים מ-1עד100).מאכלסים את המערך
locationsבאזורי היעד שרוצים שהקצה העורפי יבצע הצלבת נתונים לגביהם (לדוגמה,["us", "us-east1"]).
C#
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי C#ההוראות להגדרה במאמר מדריך למתחילים לעבודה עם Knowledge Catalog באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Knowledge Catalog C# API.
כדי לבצע אימות לקטלוג הידע, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Java
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaההוראות להגדרה במאמר מדריך למתחילים לעבודה עם Knowledge Catalog באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Knowledge Catalog Java API.
כדי לבצע אימות לקטלוג הידע, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Node.js
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaההוראות להגדרה במאמר מדריך למתחילים לעבודה עם Knowledge Catalog באמצעות ספריות לקוח.
כדי לבצע אימות לקטלוג הידע, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonההוראות להגדרה במאמר מדריך למתחילים לעבודה עם Knowledge Catalog באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Knowledge Catalog Python API.
כדי לבצע אימות לקטלוג הידע, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Ruby
Ruby
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Rubyההוראות להגדרה במאמר מדריך למתחילים לעבודה עם Knowledge Catalog באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Knowledge Catalog Ruby API.
כדי לבצע אימות לקטלוג הידע, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
REST
כדי לחפש את מקורות הנתונים, משתמשים בשיטה searchLineageStreaming.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud שמשמש לחיוב אדמיניסטרטיבי ולבדיקת מכסות. -
LOCATION_ID: ה Google Cloud מיקום, כמוus-central1. -
SOURCE_PROJECT_ID: מזהה הפרויקט שבו נמצא טבלת המקור. Google Cloud -
DATASET_ID: מזהה מערך הנתונים ב-BigQuery. -
TABLE_ID: מזהה הטבלה ב-BigQuery.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID:searchLineageStreaming
תוכן בקשת JSON:
{
"parent": "projects/PROJECT_ID/locations/LOCATION_ID",
"locations": [
"LOCATION_ID",
"us-east1",
"us-central1"
],
"rootCriteria": {
"entities": {
"entities": [
{
"fullyQualifiedName": "bigquery:SOURCE_PROJECT_ID.DATASET_ID.TABLE_ID"
}
]
}
},
"direction": "DOWNSTREAM",
"limits": {
"maxDepth": 10,
"maxResults": 5000
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"links": [
{
"source": {
"fullyQualifiedName": "bigquery:project-prod.dataset.source_table"
},
"target": {
"fullyQualifiedName": "bigquery:project-prod.dataset.target_table"
},
"depth": 1,
"location": "us"
}
]
}
חיפוש בכמה מיקומים גיאוגרפיים
כדי לצמצם או להרחיב את הסריקה של גרף השושלת, משנים את האזורים הגיאוגרפיים שמועברים בשדה המערך החוזר locations.
לדוגמה:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us", "europe-west1", "asia-south2"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.global_table"
}]
}
},
"direction": "DOWNSTREAM"
}'
אחזור שמות של תהליכים לקישורי שושלת
כברירת מחדל, ה-API משמיט את פרטי התהליך (maxProcessPerLink
ברירת המחדל היא 0). כדי לאחזר את שמות המשאבים של צינורות הנתונים שיצרו את קישורי הנתונים, צריך להגדיר את limits.maxProcessPerLink למספר שלם חיובי שאינו אפס.
לדוגמה:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.target_table"
}]
}
},
"direction": "UPSTREAM",
"limits": {
"maxProcessPerLink": 5
}
}'
התנהגות התגובה: הזרם שמתקבל מאכלס את השדה links[].processes בהודעות תהליך שמכילות רק את שם משאב המערכת המוחלט (למשל, projects/my-project/locations/us/processes/my-process).
אחזור פרטים מלאים של תהליך באמצעות FieldMask
אם אתם צריכים מטא-נתונים מבניים מלאים לגבי צינור (כמו displayName, attributes או origin) במקום רק שם המשאב, אתם צריכים להשתמש ב-API FieldMask:
צריך לספק ערך שאינו אפס במאפיין
limits.maxProcessPerLink.מוסיפים
fieldsפרמטר שאילתה לנתיב כתובת ה-URL, ומציינים אתlinks.processes.processיחד עם שדות נדרשים אחרים.
לדוגמה:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST "https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming?fields=links.processes.process,links.source,links.target,links.depth" \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.target_table"
}]
}
},
"direction": "UPSTREAM",
"limits": {
"maxProcessPerLink": 5
}
}'
חיפוש של שושלת נתונים ברמת הטבלה וברמת העמודה
אפשר לחפש שושלת נתונים ברמת הטבלה (ברמת הנכס) וברמת העמודה (ברמת השדה) בבקשה אחת, על ידי ציון כמה ישויות בrootCriteria.entities.entities הרשימה:
עבור שושלת נתונים ברמת הטבלה, השמיטו את המערך
field.כדי להציג את שושלת הנתונים ברמת העמודה, מציינים עמודה אחת במערך
field.
לדוגמה:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [
{
"fullyQualifiedName": "bigquery:my-project.dataset.table_a"
},
{
"fullyQualifiedName": "bigquery:my-project.dataset.table_b",
"field": ["email"]
}
]
}
},
"direction": "DOWNSTREAM"
}'
שימוש בתווים כלליים לחיפוש בשביל שרשרת מקורות נתונים ברמת העמודה
כדי לחפש את כל שורות הנתונים ברמת העמודה שזמינות לטבלה ספציפית בלי לפרט כל עמודה בנפרד, משתמשים בתו הכללי * כערך היחיד במערך field.
לדוגמה:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table",
"field": ["*"]
}]
}
},
"direction": "DOWNSTREAM"
}'
סינון תוצאות של שרשרת המקור
אפשר לצמצם את תוצאות החיפוש של שושלת הנתונים בעזרת הבלוק filters בגוף הבקשה.
סינון לפי סוג התלות
כדי להגביל את התוצאות לסוגים ספציפיים של תלות, כמו עותקים ישירים (EXACT_COPY) או טרנספורמציות כמו סינון וקיבוץ (OTHER), משתמשים במסנן dependencyTypes.
לדוגמה:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"dependencyTypes": ["EXACT_COPY"]
}
}'
החרגת שושלת נתונים ברמת העמודה (חיפוש בטבלה בלבד)
כדי לוודא שהחיפוש יחזיר רק את היסטוריית השינויים ברמת הטבלה ויכלול רק את היסטוריית השינויים ברמת העמודה, צריך להגדיר את המסנן entitySet לערך ENTITIES.
לדוגמה:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"entitySet": "ENTITIES"
}
}'
סינון לפי טווח זמן
אתם יכולים להגביל את תוצאות החיפוש של שושלת נתונים לפרק זמן מסוים.
לדוגמה, כדי לחפש נתוני שושלת שנוצרו אחרי חותמת זמן ספציפית, משתמשים בבקשה הבאה:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"timeRange": {
"startTime": "2026-01-01T00:00:00Z"
}
}
}'
פתרון בעיות: טיפול במיקומים שלא ניתן להגיע אליהם ובגרפים חלקיים
ממשק ה-API של הסטרימינג סורק בו-זמנית קבוצה מבוזרת של פרויקטים ומיקומים, ולכן יכול להיות שחלק מהאזורים המרוחקים לא יפעלו באופן זמני, לא יגיבו או לא יוגדרו בצורה נכונה במהלך ההפעלה.
הסימפטום: הפריסה של תרשים שרשרת המקורות שמוחזרת נראית לא שלמה או שחסרים בה קפיצות אזוריות צפויות.
אבחון: כדי להגן על תקינות הנתונים, הזרם
searchLineageStreamingResponseמאכלס שדה ייעודיunreachable(מחרוזת חוזרת) עם מיקומים בעייתיים, בפורמטprojects/PROJECT_NUMBER/locations/LOCATION(לדוגמה,projects/123456789/locations/us-east1).שיטה מומלצת: תמיד כדאי לבנות את אפליקציות הלקוח כך שיבדקו את השדה
unreachableכדי לוודא שהנתונים מלאים לפני העיבוד של הגרף.