פדרציית נתונים ללא ETL מ-BigQuery ל-AlloyDB

1. סקירה כללית

בחלק 1, הצלחנו להפוך קובצי PDF לא מובְנים ומבולגנים לטבלאות נקיות, חכמות ומובְנות ב-BigQuery באמצעות Knowledge Catalog ו-DataScan. עכשיו יש לנו מחסן נתונים חזק.

אם אתם צריכים תזכורת מהירה, במעבדה של חלק 1 השתמשנו בתרחיש לדוגמה של רשת פיקטיבית של חנויות יוגורט קפוא והמרנו 400 קובצי PDF לא מובנים – שכוללים טקסט, טבלאות ותמונות – לטבלאות מובנות ב-BigQuery עם קשרים שנוצרו ביניהן באופן אוטומטי באמצעות BigQuery Knowledge Catalog ו-Dataplex.

מה תפַתחו

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

אתם כמפתחים צריכים לשאול את השאלה הזו בשלב הזה:

"אם הנתונים כבר נמצאים ב-BigQuery, למה צריך להשתמש גם ב-AlloyDB? למה האפליקציה לא מריצה פשוט הצהרת SELECT ישירות מול BigQuery?"

הסיבות לכך:

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

אתם יכולים להשתמש ב-AlloyDB כבסיס נתונים טרנזקציוני, וגם לאחסן כמויות גדולות של נתונים ב-BigQuery או ב-BigLake. בדרך כלל, האפליקציות שלכם משולבות באופן עצמאי עם שתי המערכות האלה כדי לגשת לנתונים בשירותים השונים של Google Cloud. Lakehouse Federation for AlloyDB מאפשרת לכם להשתמש בתמיכה של AlloyDB בשאילתה לכמה מסדי נתונים, שמוטמעת כעטיפת נתונים חיצוניים, כדי לגשת לנתונים של BigQuery ו-AlloyDB באמצעות ממשק SQL ב-AlloyDB.

במקום ליצור צינור ETL שביר כדי לשלוח שאילתות לנתוני BigQuery מ-AlloyDB, נשתמש בשאילתות מאוחדות. ‫AlloyDB ישמש כנקודת קצה מאוחדת, ויגיע ל-BigQuery בצורה חלקה כשצריך.

בואו נתחיל לבנות!

1a3f48f6d70b16ad.png

מה תלמדו

  • איך מגדירים אשכול, מכונה ורשת של AlloyDB בלחיצת כפתור
  • איך מגדירים את התוסף כדי להתכונן לאיחוד
  • איך מגדירים פדרציה מ-BigQuery ל-AlloyDB
  • אני רוצה לנסות

דרישות

  • דפדפן, כמו Chrome או Firefox.
  • פרויקט ב-Google Cloud שהחיוב בו מופעל.
  • היכרות בסיסית עם SQL.

‫2. לפני שמתחילים

יצירת פרויקט

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

תמונה של לחצן ההפעלה של Cloud Shell

  1. אחרי שמתחברים ל-Cloud Shell, בודקים שכבר בוצע אימות ושהפרויקט מוגדר למזהה הפרויקט באמצעות הפקודה הבאה:
gcloud auth list
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט.
gcloud config list project
  1. אם רוצים לבצע אימות
gcloud auth login
  1. אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. מפעילים את ממשקי ה-API הנדרשים: מריצים את הפקודה הבאה כדי להפעיל את כל ממשקי ה-API הנדרשים:
gcloud services enable alloydb.googleapis.com

נקודות חשובות ופתרון בעיות

תסמונת 'פרויקט הרפאים'

הפעלת את הפקודה gcloud config set project, אבל בפועל את מסתכלת על פרויקט אחר בממשק המשתמש של המסוף. צריך לבדוק את מזהה הפרויקט בתפריט הנפתח שבפינה הימנית העליונה.

מחסום בחיוב

הפעלתם את הפרויקט, אבל שכחתם להוסיף חשבון לחיוב. ‫AlloyDB הוא מנוע עם ביצועים גבוהים, והוא לא יופעל אם 'מיכל הדלק' (החיוב) ריק.

השהיה בהפצת API

לחצתם על 'הפעלת ממשקי API', אבל בשורת הפקודה עדיין מופיעה ההודעה Service Not Enabled. מחכים 60 שניות. ייקח כמה רגעים עד שהנוירונים בענן יתעוררו.

מכסה Quags

אם אתם משתמשים בחשבון חדש לתקופת ניסיון, יכול להיות שתגיעו למכסה אזורית של מופעי AlloyDB. אם הפעולה us-central1 נכשלת, מנסים את הפעולה us-east1.

3. סיכום מהיר של הנתונים מחלק 1

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

נכנסים אל מסוף Google Cloud דרך חשבון Gmail האישי ולוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell) בפינה השמאלית העליונה של המסוף:

91567e2f55467574.png

ואז מבצעים את השלבים שבקטע 'אין חשבון לחיוב' שבהמשך:

עכשיו כשהנתונים נמצאים ב-BigQuery, אפשר להמשיך לשלבים הבאים.

4. הגדרת אשכול, מכונה ורשת של AlloyDB

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

https://codelabs.developers.google.com/quick-alloydb-setup

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

7cd9d04e06c826d8.png

5. הגדרת הרשאות

הענקת הרשאות BigQuery לחשבון השירות הזה

  1. עוברים אל IAM & Admin > IAM.
  2. לוחצים על Grant Access (הענקת גישה).
  3. מדביקים את הכתובת של חשבון השירות של AlloyDB בשדה New principals (חשבונות משתמשים חדשים).
  4. מקצים את התפקידים הבאים:
  • BigQuery Data Viewer (roles/bigquery.dataViewer): מאפשר קריאת הנתונים.
  • BigQuery User (משתמש ב-BigQuery) ‏(roles/bigquery.user): מאפשר להריץ את השאילתות.
  • (אופציונלי, אבל מומלץ) משתמש בסשן קריאה של BigQuery (roles/bigquery.readSessionUser): מאפשר קריאה אופטימלית של מערכי נתונים גדולים באמצעות Storage Read API.

6. התחברות ל-AlloyDB והפעלת התוסף BigQuery

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

  1. בדף Cluster Overview (סקירה כללית של האשכול) במסוף AlloyDB, לוחצים על AlloyDB Studio.

1dd78902dc2b4f39.png

  1. מתחברים למסד הנתונים באמצעות שם המשתמש והסיסמה שהגדרתם בשלב ההגדרה המהירה של AlloyDB.
  2. אחרי שמתחברים, בכרטיסייה Query Editor (עורך השאילתות) בצד שמאל, מזינים את ההצהרות הבאות ומריצים אותן אחת אחרי השנייה:
CREATE EXTENSION IF NOT EXISTS  bigquery_fdw;

CREATE SERVER bigquery_server FOREIGN DATA WRAPPER bigquery_fdw;

CREATE USER MAPPING FOR postgres SERVER bigquery_server;
  1. אחרי שמסיימים בהצלחה, עוברים לחלונית הניווט בצד ימין וגוללים למטה אל BigQuery tables (טבלאות BigQuery):

efe4f8be930824aa.png

  1. לוחצים על סמל 3 הנקודות ואז על 'קישור לטבלת BigQuery'.
  2. בחלון הקופץ Connect BigQuery Table שנפתח, בוחרים את project_id ואת שם מערך הנתונים ב-BigQuery (שנוצר בחלק 1) שממנו רוצים לשלוח שאילתה לנתונים במסד הנתונים של AlloyDB.

1cc345197b0fbddf.png

  1. בוחרים באפשרות כל טבלה בנפרד כדי לחבר את כל הנתונים ל-AlloyDB. אנחנו עושים זאת כדי לאמת את סוגי העמודות ולוודא שהם נתמכים ב-AlloyDB.

אם רוצים לעשות את אותו הדבר באמצעות SQL במקום באמצעות גישת ההצבעה והקליק:

CREATE FOREIGN TABLE <<TABLE_NAME>> (
      "cas_number" VARCHAR, "ingredient_name" VARCHAR, "max_moisture_percentage" DOUBLE PRECISION, "ph_range" VARCHAR, "purity_percentage" DOUBLE PRECISION, "shelf_life_months" BIGINT, "specific_gravity_range" VARCHAR
    ) SERVER "bigquery_server" OPTIONS (
      project '<<PROJECT_ID>>',
      dataset 'froyo_data',
      table '<<BQ_TABLE_NAME>>'
    );

הקסם!!!

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

7. בדיקת הפדרציה ב-AlloyDB

נבדוק שאפשר להריץ שאילתות על מערך הנתונים הענק והאנליטי של BigQuery ישירות ממסד הנתונים הטרנזקציונלי של PostgreSQL.

עדיין ב-AlloyDB Studio, נריץ שאילתה כדי לגלות אילו אלרגנים יש ב-Midnight Swirl (אותה שאלה ששאלנו בחלק 1, אבל הפעם נשאלת מ-AlloyDB):

SELECT
    p.product_name,
    i.ingredient_name,
    a.allergen_name
FROM
    consistsof c
INNER JOIN product p
    ON c.product_id = p.product_id
INNER JOIN ingredient i
    ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN containsallergen a
    ON i.ingredient_id = a.ingredient_id
WHERE
    UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
    AND a.allergen_name IS NOT NULL;

Boom. אתם אמורים לראות את אותן תוצאות בדיוק כמו ב-BigQuery.

7d0be18295c5dfbd.png

8. הסרת המשאבים

אחרי שמסיימים את ה-Lab הזה, חשוב למחוק את אשכול AlloyDB ואת המכונה.

הוא אמור לנקות את האשכול יחד עם המופעים שלו.

9. מזל טוב על שכבת הנתונים המאוחדת

בואו נחשוב על מה שהשגנו עכשיו:

  1. האפליקציה העסקית שלנו (שפועלת ב-AlloyDB) יכולה לטפל בביקורים מהירים בו-זמנית של משתמשים.
  2. כשהוא צריך נתונים אנליטיים מפורטים או הקשר היסטורי (כמו פרטי ספקים או מיפויים מורכבים של רכיבים), הוא שולח שאילתה ל-froyo_dataschema ב-BigQuery.
  3. Zero ETL. אין פייפליינים שמופעלים. אין מסדי נתונים לא מסונכרנים. אנחנו מאחסנים את הנתונים פעם אחת (ב-BQ) ומבצעים את החישובים במקום שבו אנחנו צריכים אותם.

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

בחלק 3, נבנה את אפליקציית ה-Multi-Agent שפועלת על גבי הארכיטקטורה הזו כדי להפעיל את הפעולות העסקיות של Froyo.