שיעור Lab 3: גילוי מטען אבוד באמצעות BigQuery Graph וניתוח נתונים בשיחה

1. מבוא

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

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

Lost Cargo Lab 3 Conversational Analytics Architecture Preview

כדי למצוא את המכולה החסרה ולאבטח את המטען, תבנו גרף נכסים של 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

  1. במסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים פרויקט ב-Google Cloud או יוצרים פרויקט.
  2. הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud.

הפעלת Cloud Shell

תשתמשו ב-Google Cloud Shell כדי להוריד את הקוד, להריץ סקריפטים של הגדרה ולפרוס את האפליקציה.

  1. בכרטיסייה חדשה בדפדפן, פותחים את Cloud Shell:

הפעלת Cloud Shell

  1. אחרי החיבור, מגדירים את מזהה הפרויקט ומאשרים את הסביבה:
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. איך מודלים של גרפים של נכסים מתארים קשרים

מפה של ארכיטקטורה שנבנתה על ידי Property Graph

גרף נכסים ב-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 להגדרה וליצירה של גרף הנכס, אבל הוא לא שלם כרגע. צריך להגדיר את התוויות של הקצוות (הקשרים) בקובץ הסכימה הזה לפני שמבצעים קומפילציה ופריסה שלו:

  1. פותחים את Cloud Shell Editor.

פתיחת Cloud Shell Editor

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

שאילתת SQL ליצירת תרשים

  1. מאתרים את הפלייסהולדרים של תוויות הקצוות:
    • שורה 22: מחליפים את `EDGE_TABLE_PLACEHOLDER` בתג בעל משמעות שמייצג את הקשר בין המניפסטים לכלי השיט (לדוגמה, CARRIED_BY).
    • שורה 27: מחליפים את `EDGE_TABLE_PLACEHOLDER` בתג שמייצג את הקשר בין כלי השיט לחברות (לדוגמה, OPERATED_BY).
  2. שומרים את הקובץ.

עכשיו חוזרים לטרמינל Cloud Shell ופורסים את גרף הנכסים המעודכן באמצעות הסקריפט שהושלם:

bq query --use_legacy_sql=false < setup_graph.sql

הפלט אמור להראות שהמשימה הושלמה:

Waiting on bqjob_r... ... (0s) Current status: DONE

אפשר לראות את פרטי גרף הנכס ב-BigQuery Console:

מוצאים את lost_cargo_dataset ובוחרים באפשרות 'תרשימים':

מפה של ארכיטקטורה שנבנתה על ידי Property Graph

אחרי שהגרף של הנכס שלנו עבר קומפילציה בהצלחה, אפשר לעבור ל-BigQuery Studio כדי להריץ שאילתות ולהציג את הקשרים בצורה ויזואלית.

5. הפעלת שאילתה ב-Graph

אתם יכולים להריץ שאילתות על הגרף ולעיין בו באופן חזותי באמצעות Graph Query Language (GQL) מקורית ישירות ב-BigQuery Studio.

1. שאילתה לשרשרת של מאגר -> כלי שיט -> חברה

נבדוק שאילתות GQL על ידי חיפוש של הגורם שמפעיל את כלי השיט שמובילים מטען. כדי למצוא את המפעיל, צריך לעבור בין שלושה צמתי ישויות נפרדים ברשת הלוגיסטית שלנו:

מושג הצומת בתרשים

  1. מתחילים בצומת של הקונטיינר Manifest.
  2. עוקבים אחרי קצה הקשר CARRIED_BY כדי למצוא את Vessel.
  3. עוברים לאורך קצה הקשר OPERATED_BY מהכלי אל Company האחראי ומאחזרים את המזהה שלו.

קודם נריץ שאילתה כדי להציג את הרשת השלמה (בלי מסננים) כדי לראות את הגרף המלא.

  1. פותחים כרטיסייה חדשה בעורך ה-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
    );
    
  2. בסיום השאילתה, בחלונית Query results שבתחתית המסך, לוחצים על הכרטיסייה Graph (שנמצאת לצד הכרטיסייה Results table).

תוצאות גרף BigQuery 1

  1. מערכת 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.

  1. מדביקים את השאילתה הבאה בעורך ה-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
    );
    
  2. לוחצים על הכרטיסייה תרשים מתחת לתוצאות.

תוצאות תרשים BigQuery 2

  1. עכשיו מוצג בצופה רק מסלול המעבר הפעיל של MV-CAPYBARA-003. כדי לראות את הצמתים והחיבורים, מגדילים את התצוגה:
    • לוחצים לחיצה כפולה על הצומת Company כדי לפתוח את חלונית המאפיינים. בקטע מאפיינים, יופיע האופרטור company_id: 103 (Davy Jones Shipping). חשוב לרשום את מזהה החברה הזה – תצטרכו אותו בהמשך כדי לאחזר את קוד הסיסמה לאישור מהמרשם של האבטחה.
    • לוחצים פעמיים על הצומת Vessel כדי לוודא שהוא Flying Dutchman.

6. שיחה עם הגרף באמצעות ניתוח נתונים בשיחה

אחרי שחיפשתם את מזהה החברה בגרף באופן ידני, נשתמש ב-Conversational Analytics כדי לשוחח ישירות עם הגרף ולזהות לאן מאגר התגים שלנו מוביל.

1. איך מתחילים סשן של ניתוח נתונים בשיחה

  1. ב-Google Cloud Console, עוברים אל BigQuery Console ומרחיבים את חלונית המשאבים כדי למצוא את מערך הנתונים (lost_cargo_dataset).
  2. לוחצים על משאב גרף הנכסים: logistics_network.
  3. בסרגל הכלים של חלונית הפרטים בחלק העליון, לוחצים על הלחצן צ'אט. תיפתח סשן של ניתוח נתוני שיחות עם ההקשר של הגרף שנטען מראש.

ממשק ההגדרה של BigQuery Data Agent שמקשר את המקור של גרף המאפיינים שעבר קומפילציה

2. איתור נמל העגינה הקרוב ביותר למכולה שנחטפה

מטוס סיור ימי זיהה כלי שיט שתואם לתיאור של אוניית המטען שלנו, שט במיקום לא ידוע (עם משדר לא פעיל) בקואורדינטות POINT(-122.48 37.55). כדי ליירט את המטען, אנחנו צריכים למצוא את נמל העגינה הקרוב ביותר שבו פועל סינדיקט הצללים Davy Jones Shipping.

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

  1. בתיבת הצ'אט של 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.
    

ממשק ההגדרה של BigQuery Data Agent שמקשר את המקור של גרף המאפיינים שעבר קומפילציה

  1. צריך לבחון את התשובה בקפידה. הסוכן עובר על הגרף ומחזיר את מתקן העגינה הקרוב ביותר ואת המרחק שלו:
    • יציאת עגינה: Mountain View Terminal
    • מרחק: 39.42 kilometers
  2. ממשק 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

  1. במסוף Google Cloud, מחפשים את Knowledge CatalogSearch ועוברים אליו.
  2. בעמודה של מסנן החיפוש בקטע מערכות, מסמנים את האפשרות BigQuery כדי לצמצם את התוצאות.
  3. בתיבת החיפוש, מזינים את השאילתה הבאה:
    container override codes
    

ממשק חיפוש סמנטי של Knowledge Catalog שמחפש את הטבלה של החותם הפיזי המבודד

  1. לוחצים על משאב הטבלה maritime_security_registry שמופיע בתוצאות החיפוש:

כשבודקים את סכימת המטא-נתונים, רואים שהטבלה מכילה עמודות של נתוני אבטחה של מאגרים – כמו חברת המתאם co_id, אסימון הנאמן cust_tok, והכי חשוב, עמודת קוד הגישה לביטול ההגדרה של המאגר המאובטח: clc_ovr_cd.

מצאנו בהצלחה את הטבלה ואת העמודה המאובטחת המדויקת שדרושה לנו כדי לשחזר את המטען.

‫🔓 Real-World Governance: בסביבת ייצור ארגונית, צוותי אבטחה וצוותי ניהול משתמשים גם ב:

  • היבטים ותבניות תגים: כדי לצרף מטא-נתונים עסקיים (כמו בעל הנתונים, תקופת השמירה או סיווג PII) לסכימות של טבלאות.
  • מעקב אחר מקורות נתונים: כדי ליצור באופן אוטומטי תרשימי זרימה ויזואליים שמייצגים איך מתבצעות שאילתות על טבלאות כמו maritime_security_registry ואיך מערכות במורד הזרם צורכות אותן.

2. בדיקת אבטחת עמודות ב-BigQuery

  1. חוזרים אל BigQuery Console.
  2. בכרטיסייה Explorer, בוחרים באפשרות lost_cargo_dataset ולוחצים על הטבלה maritime_security_registry.
  3. לוחצים על הכרטיסייה Schema.

תצוגת סכימת הטבלה שבה מוצג תג המדיניות שהוקצה לעמודה clc_ovr_cd

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

תצוגת מרחב העבודה של BigQuery שמציגה פלט של מסכות ברמת העמודה או אילוצים של דחיית גישה

8. פריצת אבטחת העמודות כדי לאחזר את קוד הגישה

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

1. מתן הרשאות לתגי מדיניות

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

חלונית הניהול של תגי המדיניות ב-BigQuery, שבה מוקצה התפקיד Fine-Grained Reader (קורא פרטני) למחרוזת היעד של המסכה

2. שאילתה לקבלת קוד לשינוי

חוזרים לעורך של סביבת העבודה ב-BigQuery. עכשיו יש לך גישת קריאה עם הרשאות מפורטות, ולכן אנחנו אמורים להיות מסוגלים להריץ שוב את השאילתה ולראות את הנתונים שלא הוסתרו:

SELECT *  FROM `lost_cargo_dataset.maritime_security_registry` 
WHERE co_id = 103;

🔓 תוצאה

השאילתה מחזירה את קוד הביטול הלא מוסווה:

SHIVER-ME-TIMBERS-888

תוצאות ההרצה של סביבת עבודה ב-BigQuery מחזירות את הדגל של המחרוזת הסופית שלא עברה הסרת מיסוך

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 ולגשת לנתונים מוגבלים ברמת העמודה באמצעות תגי מדיניות.