1. מבוא
ברוכים הבאים לשלב האחרון בחקירת המטען האבוד! אחרי מעקב אחרי המכולה הגנובה של בובות Android מלונדון ועד סידני, העקבות נעלמו. השבתת המשדר של המכולה הפעילה נעילה אוטומטית למקרה חירום בכספת האבטחה החכמה שלה.
כדי לשחזר את המטען היקר לפני שהוא יינעל לתמיד, המשימה שלכם היא למצוא את המיקום הסופי של המכולה ולאחזר את קוד הגישה לביטול הנעילה הידני כדי לפתוח את הכספת באופן פיזי.

כדי למצוא את המכולה החסרה ולאבטח את המטען, תבנו גרף נכסים של BigQuery כדי לעקוב אחרי מסלול המשלוח. לאחר מכן, תוכלו לשלוח שאילתות לרשת הזו בשפה טבעית באמצעות Conversational Analytics, ולסיים בביצוע חיפוש סמנטי במטא-נתונים של הנתונים באמצעות Knowledge Catalog כדי לאתר את קודי הביטול.
💡 לא השתתפתם בשיעור Lab 1 או בשיעור Lab 2? אל דאגה! השיעור הזה הוא עצמאי לחלוטין. בשלבי הגדרת הסביבה יוקצו כל הרכיבים שצריך, כך שתוכלו להתחיל מיד ולהשלים את ההגדרה באופן עצמאי.
הפעולות שתבצעו:
- משכפלים את המאגר ומריצים את סקריפט ההגדרה ב-Google Cloud Shell.
- יצירת גרף נכסים ב-BigQuery שמקשר בין נתונים של חברות, כלי שיט ומניפסטים.
- משתמשים ב-Conversational Analytics כדי לשאול את הגרף בשפה טבעית ולעקוב אחרי המסע של המטען כדי לזהות את המפעיל האחראי.
- מאתרים את הטבלה שכוללת את קודי הביטול הסופיים באמצעות Knowledge Catalog.
- משתמשים בבקרת גישה ברמת העמודה ב-BigQuery כדי לבטל את ההסתרה ולחשוף את הקוד הסופי.
הדרישות
- דפדפן אינטרנט כמו Chrome
- פרויקט ב-Google Cloud שהחיוב בו מופעל
- גישה ל-Google Cloud Shell
ה-Codelab הזה מיועד למומחי נתונים בכל הרמות.
העלות של המשאבים שנוצרו ב-codelab הזה צריכה להיות פחות מ-5$.
משך משוער: השלמת ה-codelab הזה תימשך כ-45 דקות.
2. לפני שמתחילים
יצירת פרויקט ב-Google Cloud
- במסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים פרויקט ב-Google Cloud או יוצרים פרויקט.
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud.
הפעלת Cloud Shell
תשתמשו ב-Google Cloud Shell כדי להוריד את הקוד, להריץ סקריפטים של הגדרה ולפרוס את האפליקציה.
- בכרטיסייה חדשה בדפדפן, פותחים את Cloud Shell:

- אחרי החיבור, מגדירים את מזהה הפרויקט ומאשרים את הסביבה:
gcloud config set project <<YOUR_PROJECT_ID>>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
אמורה להופיע הודעה דומה לזו:
Your active configuration is: [cloudshell-####] Updated property [core/project]
הפעלת ממשקי ה-API הנדרשים
מריצים את הפקודה הבאה ב-Cloud Shell כדי להפעיל את ממשקי ה-API הנדרשים:
gcloud services enable \
bigquery.googleapis.com \
aiplatform.googleapis.com \
datacatalog.googleapis.com \
geminidataanalytics.googleapis.com \
cloudaicompanion.googleapis.com
אם ההפעלה בוצעה בהצלחה, תוצג הודעה שדומה לזו:
Operation "operations/..." finished successfully.
3. הגדרת הסביבה
במעבדות הקודמות בסדרה הזו, הנחנו את הבסיס לחקירה שלנו.
1. שכפול המאגר
משכפלים את מאגר ה-Codelab לסביבת Cloud Shell:
cd ~/
git clone --filter=blob:none --no-checkout https://github.com/GoogleCloudPlatform/devrel-demos.git
cd ~/devrel-demos
git sparse-checkout init --cone
git sparse-checkout set codelabs/bigquery-graph-analytics
git checkout main
cd codelabs/bigquery-graph-analytics/
2. הגדרה של טבלאות בסיס ותגי מדיניות
מריצים את סקריפט ההגדרה כדי לאכלס את קבוצת הנתונים ב-BigQuery ולהחיל תגי אבטחה ברמת העמודה כדי להגביל את הגישה למידע אישי רגיש:
bash setup_lab.sh
מוודאים שהפלט במסוף מראה שההפעלה הצליחה:
🚀 Provisioning foundational tables and deploying Policy Tag security bindings... 🎯 Active Project: your-project-id ... 🎉 Success! Foundational tables initialized and Column-Level Policy Tags fully mapped out of the box!
אחרי שהגדרתם את הסביבה בהצלחה ואכלסתם את נתוני הלוגיסטיקה ב-BigQuery, אתם יכולים ליצור גרף נכסים כדי לקשר בין הטבלאות ולעקוב אחרי מסלול המטען.
4. חיבור הנתונים באמצעות BigQuery Graph
כדי לנתח את נתוני שרשרת האספקה שלנו, נגדיר את הקשר בין חברות, כלי שיט ומניפסטים. בניית גרף נכסים מאפשרת לנו לשלוח בקשות שאילתה לחיבורים האלה בקלות.
1. איך מודלים של גרפים של נכסים מתארים קשרים

גרף נכסים ב-BigQuery מדמה רשתות באמצעות:
- צמתים: הישויות ברשת. בשיעור ה-Lab הזה, הצמתים מייצגים חברות (שמאחסנות פרטים ליצירת קשר באופן ישיר), מניפסטים וכלי שיט.
- קשתות: הקשרים שמקשרים בין הצמתים. לדוגמה:
- קצה מחבר מניפסט לכלי (באמצעות קשרים בטבלה
manifests). - קצה מחבר Vessel ל-Company (באמצעות קשרים בטבלה
vessels).
- קצה מחבר מניפסט לכלי (באמצעות קשרים בטבלה
- מאפיינים: מטא-נתונים שמאוחסנים בצמתים או בקשתות. לדוגמה, לצומת Company יש עמודות כמו
company_nameו-phone_number, ולצומת Manifest ישseal_integrity_statusוקואורדינטות (last_ping_lat,last_ping_long). - תוויות: שמות תגים שמוקצים לצמתים (למשל,
Company,Vessel,Manifest) ולקשתות (למשל,CARRIED_BY,OPERATED_BY), כדי שכלי שאילתות יוכלו לזהות את סוגי הצמתים והקשרים.
2. פריסת גרף המאפיינים ב-BigQuery
קובץ setup_graph.sql מכיל את ה-SQL DDL להגדרה וליצירה של גרף הנכס, אבל הוא לא שלם כרגע. צריך להגדיר את התוויות של הקצוות (הקשרים) בקובץ הסכימה הזה לפני שמבצעים קומפילציה ופריסה שלו:
- פותחים את Cloud Shell Editor.

- פותחים את הקובץ
setup_graph.sqlב-Cloud Shell Editor.

- מאתרים את הפלייסהולדרים של תוויות הקצוות:
- שורה 22: מחליפים את
`EDGE_TABLE_PLACEHOLDER`בתג בעל משמעות שמייצג את הקשר בין המניפסטים לכלי השיט (לדוגמה,CARRIED_BY). - שורה 27: מחליפים את
`EDGE_TABLE_PLACEHOLDER`בתג שמייצג את הקשר בין כלי השיט לחברות (לדוגמה,OPERATED_BY).
- שורה 22: מחליפים את
- שומרים את הקובץ.
עכשיו חוזרים לטרמינל Cloud Shell ופורסים את גרף הנכסים המעודכן באמצעות הסקריפט שהושלם:
bq query --use_legacy_sql=false < setup_graph.sql
הפלט אמור להראות שהמשימה הושלמה:
Waiting on bqjob_r... ... (0s) Current status: DONE
אפשר לראות את פרטי גרף הנכס ב-BigQuery Console:
מוצאים את lost_cargo_dataset ובוחרים באפשרות 'תרשימים':

אחרי שהגרף של הנכס שלנו עבר קומפילציה בהצלחה, אפשר לעבור ל-BigQuery Studio כדי להריץ שאילתות ולהציג את הקשרים בצורה ויזואלית.
5. הפעלת שאילתה ב-Graph
אתם יכולים להריץ שאילתות על הגרף ולעיין בו באופן חזותי באמצעות Graph Query Language (GQL) מקורית ישירות ב-BigQuery Studio.
1. שאילתה לשרשרת של מאגר -> כלי שיט -> חברה
נבדוק שאילתות GQL על ידי חיפוש של הגורם שמפעיל את כלי השיט שמובילים מטען. כדי למצוא את המפעיל, צריך לעבור בין שלושה צמתי ישויות נפרדים ברשת הלוגיסטית שלנו:

- מתחילים בצומת של הקונטיינר
Manifest. - עוקבים אחרי קצה הקשר
CARRIED_BYכדי למצוא אתVessel. - עוברים לאורך קצה הקשר
OPERATED_BYמהכלי אלCompanyהאחראי ומאחזרים את המזהה שלו.
קודם נריץ שאילתה כדי להציג את הרשת השלמה (בלי מסננים) כדי לראות את הגרף המלא.
- פותחים כרטיסייה חדשה בעורך ה-SQL של BigQuery Studio, מדביקים את שאילתת ה-GQL הבאה ולוחצים על Run (הפעלה):
SELECT * FROM GRAPH_TABLE( `lost_cargo_dataset.logistics_network` MATCH p = (m:Manifest)-[:CARRIED_BY]->(v:Vessel)-[:OPERATED_BY]->(comp:Company) RETURN TO_JSON(p) AS path ); - בסיום השאילתה, בחלונית Query results שבתחתית המסך, לוחצים על הכרטיסייה Graph (שנמצאת לצד הכרטיסייה Results table).

- מערכת BigQuery מציגה את התוצאות כייצוג חזותי אינטראקטיבי של גרף. כדי לראות את הרשת המלאה של המכולות, כלי השיט והמפעילים המחוברים, צריך להתקרב.
המבנה של שאילתת GQL
בואו נפרט את שאילתת ה-GQL שהרצנו:
-
GRAPH_TABLE: מכוון את BigQuery להריץ שאילתת גרף של נכס מול הגרףlogistics_network. -
MATCH: הצהרה על דפוס מעבר מרובה קפיצות. מתחילים ב-Manifest(m), מתאימים את קשר הקצה:CARRIED_BYשמצביע עלVessel(v), ואז מתאימים את קשר הקצה:OPERATED_BYשמצביע עלCompany(comp). - GQL מחליף לוגיקה מורכבת של צירוף בחצים אינטואיטיביים של קשרים בפורמט ASCII-art
()->[]->()שקריא לאנשים, וכך הופך את הכתיבה והאופטימיזציה של שאילתות מרובות קפיצות לפשוטות במיוחד. -
RETURN: מחזירה מאפיינים או את נתיב ה-JSON מהרכיבים התואמים.
2. סינון תוצאות של שאילתות GQL
עכשיו נסנן את השאילתה כדי שנסתכל רק על הנתיב של מאגר התגים המטרה שנפרץ MV-CAPYBARA-003.
- מדביקים את השאילתה הבאה בעורך ה-SQL ולוחצים על Run (הפעלה):
SELECT * FROM GRAPH_TABLE( `lost_cargo_dataset.logistics_network` MATCH p = (m:Manifest {shipment_id: 'MV-CAPYBARA-003'})-[:CARRIED_BY]->(v:Vessel)-[:OPERATED_BY]->(comp:Company) RETURN TO_JSON(p) AS path ); - לוחצים על הכרטיסייה תרשים מתחת לתוצאות.

- עכשיו מוצג בצופה רק מסלול המעבר הפעיל של
MV-CAPYBARA-003. כדי לראות את הצמתים והחיבורים, מגדילים את התצוגה:- לוחצים לחיצה כפולה על הצומת
Companyכדי לפתוח את חלונית המאפיינים. בקטע מאפיינים, יופיע האופרטורcompany_id:103(Davy Jones Shipping). חשוב לרשום את מזהה החברה הזה – תצטרכו אותו בהמשך כדי לאחזר את קוד הסיסמה לאישור מהמרשם של האבטחה. - לוחצים פעמיים על הצומת
Vesselכדי לוודא שהואFlying Dutchman.
- לוחצים לחיצה כפולה על הצומת
6. שיחה עם הגרף באמצעות ניתוח נתונים בשיחה
אחרי שחיפשתם את מזהה החברה בגרף באופן ידני, נשתמש ב-Conversational Analytics כדי לשוחח ישירות עם הגרף ולזהות לאן מאגר התגים שלנו מוביל.
1. איך מתחילים סשן של ניתוח נתונים בשיחה
- ב-Google Cloud Console, עוברים אל BigQuery Console ומרחיבים את חלונית המשאבים כדי למצוא את מערך הנתונים (
lost_cargo_dataset). - לוחצים על משאב גרף הנכסים:
logistics_network. - בסרגל הכלים של חלונית הפרטים בחלק העליון, לוחצים על הלחצן צ'אט. תיפתח סשן של ניתוח נתוני שיחות עם ההקשר של הגרף שנטען מראש.

2. איתור נמל העגינה הקרוב ביותר למכולה שנחטפה
מטוס סיור ימי זיהה כלי שיט שתואם לתיאור של אוניית המטען שלנו, שט במיקום לא ידוע (עם משדר לא פעיל) בקואורדינטות POINT(-122.48 37.55). כדי ליירט את המטען, אנחנו צריכים למצוא את נמל העגינה הקרוב ביותר שבו פועל סינדיקט הצללים Davy Jones Shipping.
במקום לחפש ידנית בכל הנמלים בעולם, נשאל את רשת הגרפים שלנו כדי לאתר את הנמלים שמחוברים לצי הפעיל של הסינדיקט, ונמדוד איזה מהם הכי קרוב פיזית למיקום התצפית.
- בתיבת הצ'אט של Conversational Analytics, מזינים את ההנחיה הבאה:
Find all ports associated with Davy Jones Shipping vessels. Which port is closest to coordinate POINT(-122.48 37.55), show the distance in km, and display it on a map.

- צריך לבחון את התשובה בקפידה. הסוכן עובר על הגרף ומחזיר את מתקן העגינה הקרוב ביותר ואת המרחק שלו:
- יציאת עגינה:
Mountain View Terminal - מרחק:
39.42 kilometers
- יציאת עגינה:
- ממשק Analytics לשיחה מבוסס על Gemini עם שילוב מקורי של מערכת מידע גיאוגרפית (GIS), ולכן הוא יכול לפרש נקודות של קואורדינטות גיאוגרפיות ולהשתמש בידע שלו על העולם כדי לאמת את המיקום:"הכלי נמצא במרחק של כ-39.42 קילומטרים ממסוף Mountain View בקליפורניה, מה שמצביע על כך שהוא בדרכו לשם כדי לעגון".
ההודעה הזו מאשרת שהמטען שלנו בדרכו ישירות אל Mountain View.
מתחת למכסה המנוע: Graph Query Language (GQL) ומערכת מידע גיאוגרפי (GIS) מרחבית
מאחורי הקלעים, סוכן ניתוח השיחות הרכיב והריץ באופן דינמי שאילתה שמשלבת התאמה של נתיב הגרף עם חישובים של מרחק גיאו-מרחבי. הדבר הזה מושג באמצעות פסקה מקורית של GQL COLUMNS, שבה מחושב המרחק הגיאודזי באופן מקורי בתוך התאמת מעבר הגרף:
SELECT port_id, port_name, country, latitude, longitude, distance_km
FROM GRAPH_TABLE(
`lost_cargo_dataset.logistics_network`
MATCH (c:Company)<-[]-(v:Vessel)-[]->(p:Port)
WHERE LOWER(c.company_name) = 'davy jones shipping'
COLUMNS (
p.port_id,
p.port_name,
p.country,
p.latitude,
p.longitude,
ROUND(ST_DISTANCE(ST_GEOGPOINT(p.longitude, p.latitude), ST_GEOGPOINT(-122.48, 37.55)) / 1000, 2) AS distance_km
)
)
ORDER BY distance_km ASC;
באמצעות שילוב של פונקציות גיאו-מרחביות (GIS) (ST_DISTANCE, ST_GEOGPOINT) עם התאמה של גרף מאפיינים של GQL, BigQuery פותר באופן דינמי את טביעת הרגל התפעולית של הסינדיקט ומחשב את הקרבה הפיזית בעולם האמיתי בשאילתה אחת!
7. איך למצוא נתונים חסרים באמצעות Knowledge Catalog
גרף הנכס מציג את הקשרים, אבל הוא לא כולל את הטבלה שבה מאוחסנים קודי הביטול בפועל.
בסביבת ארגון אמיתית עם מאות מערכי נתונים וטבלאות, יכול להיות קשה למצוא את המידע הזה. נשתמש ב-Knowledge Catalog כדי לבצע חיפוש סמנטי ולאתר את הטבלה הנכונה.
1. חיפוש סמנטי ב-Knowledge Catalog
- במסוף Google Cloud, מחפשים את Knowledge Catalog ➔ Search ועוברים אליו.
- בעמודה של מסנן החיפוש בקטע מערכות, מסמנים את האפשרות BigQuery כדי לצמצם את התוצאות.
- בתיבת החיפוש, מזינים את השאילתה הבאה:
container override codes

- לוחצים על משאב הטבלה
maritime_security_registryשמופיע בתוצאות החיפוש:
כשבודקים את סכימת המטא-נתונים, רואים שהטבלה מכילה עמודות של נתוני אבטחה של מאגרים – כמו חברת המתאם co_id, אסימון הנאמן cust_tok, והכי חשוב, עמודת קוד הגישה לביטול ההגדרה של המאגר המאובטח: clc_ovr_cd.
מצאנו בהצלחה את הטבלה ואת העמודה המאובטחת המדויקת שדרושה לנו כדי לשחזר את המטען.
🔓 Real-World Governance: בסביבת ייצור ארגונית, צוותי אבטחה וצוותי ניהול משתמשים גם ב:
- היבטים ותבניות תגים: כדי לצרף מטא-נתונים עסקיים (כמו בעל הנתונים, תקופת השמירה או סיווג PII) לסכימות של טבלאות.
- מעקב אחר מקורות נתונים: כדי ליצור באופן אוטומטי תרשימי זרימה ויזואליים שמייצגים איך מתבצעות שאילתות על טבלאות כמו
maritime_security_registryואיך מערכות במורד הזרם צורכות אותן.
2. בדיקת אבטחת עמודות ב-BigQuery
- חוזרים אל BigQuery Console.
- בכרטיסייה Explorer, בוחרים באפשרות
lost_cargo_datasetולוחצים על הטבלהmaritime_security_registry. - לוחצים על הכרטיסייה Schema.

- שימו לב שהעמודה
clc_ovr_cdמאובטחת באמצעות תג מדיניות בשםMaskShippingDetails(מופיע בעמודה Policy tags). - פותחים כרטיסייה חדשה ב-SQL Editor ב-BigQuery ומנסים להציג את קודי ההחלפה של הרישום על ידי הפעלת השאילתה הבאה:
SELECT * FROM `lost_cargo_dataset.maritime_security_registry` WHERE co_id = 103; - מכיוון שלחשבון שלכם עדיין אין הרשאות לקרוא עמודות שתויגו ב-
MaskShippingDetails, השאילתה תיכשל באופן מיידי עם שגיאת אבטחת מסד נתונים Access Denied:

8. פריצת אבטחת העמודות כדי לאחזר את קוד הגישה
כדי לקרוא את קוד הביטול הסופי בטקסט רגיל, אנחנו צריכים להעניק לחשבון המשתמש שלנו הרשאה לקרוא עמודות שתויגו ב-MaskShippingDetails.
1. מתן הרשאות לתגי מדיניות
- בחלונית הניווט הימנית במסוף BigQuery, עוברים אל Policy tags (תגי מדיניות).
- בוחרים את הטקסונומיה בשם
LostCargoSecurity_. - ברשימת התגים, לוחצים על
MaskShippingDetails. - בחלונית המידע בצד שמאל של המסך, לוחצים על הוספת גורם ראשי. (אם החלונית מוסתרת, לוחצים על Show Info Panel בפינה הימנית העליונה).
- בשדה New principals, מזינים את כתובת האימייל של המשתמש הפעיל ב-Google Cloud.
- בתפריט הנפתח Select a role, מחפשים את Fine-Grained Reader, בוחרים בו ולוחצים על Save.

2. שאילתה לקבלת קוד לשינוי
חוזרים לעורך של סביבת העבודה ב-BigQuery. עכשיו יש לך גישת קריאה עם הרשאות מפורטות, ולכן אנחנו אמורים להיות מסוגלים להריץ שוב את השאילתה ולראות את הנתונים שלא הוסתרו:
SELECT * FROM `lost_cargo_dataset.maritime_security_registry`
WHERE co_id = 103;
🔓 תוצאה
השאילתה מחזירה את קוד הביטול הלא מוסווה:
SHIVER-ME-TIMBERS-888

9. הסרת המשאבים
כדי להימנע מחיובים, צריך למחוק את המשאבים של ארגז החול שנוצרו במהלך שיעור ה-Lab הזה.
חוזרים למסוף Cloud Shell ומוחקים את מערך הנתונים ב-BigQuery שמכיל את טבלאות הלוגיסטיקה:
bq rm -r -f -d lost_cargo_dataset
מסירים את הקבצים של המאגר המשוכפל:
cd ..
rm -rf data-cloud-roadshow-26
10. מזל טוב
השלמת בהצלחה את תהליך הבדיקה ואיתרת את קוד הביטול של ההסרה.
מה למדתם
- איך ליצור תרשים מאפיינים ב-BigQuery כדי לייצג ישויות ויחסים מורכבים.
- איך מוגדרים צמתים, קשתות, מאפיינים ותוויות כדי לתעד קשרים בין נתונים.
- איך מריצים שאילתות על גרפים של נכסים באמצעות שפה טבעית עם ניתוח נתונים שיחתי ב-BigQuery.
- איך בנויה שפה של שאילתות גרף (GQL) כדי לעבור בנתיבים יחסיים.
- איך לגלות נכסים מאובטחים באמצעות Knowledge Catalog ולגשת לנתונים מוגבלים ברמת העמודה באמצעות תגי מדיניות.