שליחת שאילתות לטבלאות ב-BigQuery דרך נקודת הקצה של קטלוג Apache Iceberg REST

‫Lakehouse מספק יכולת פעולה הדדית עם BigQuery על ידי ניתוב בקשות דרך נקודת הקצה של קטלוג ה-REST של Apache Iceberg לקטלוג של BigQuery. היכולת הזו מאפשרת לחשוף טבלאות שמנוהלות על ידי BigQuery, כמו טבלאות שמנוהלות על ידי Iceberg, למנועי קוד פתוח (OSS) חיצוניים כמו Apache Spark ו-Trino.

במקום ליצור מאגר ייעודי של קטלוג Lakehouse לאחסון מטא-נתונים, נקודת הקצה של קטלוג ה-REST של Apache Iceberg פועלת רק כשער proxy. כשמנועים חיצוניים מתחברים באמצעות הקידומת bq:// של המחסן, השער מנתב את בקשות הקטלוג שלהם ישירות לקטלוג הפנימי של BigQuery. כך אתם יכולים ליצור ולנהל טבלאות ישירות ב-BigQuery באמצעות DDL או ממשקי API רגילים של BigQuery, ולתת למנועי OSS חיצוניים גישה לקריאה בלבד כדי לשלוח שאילתות לטבלאות האלה דרך נקודת הקצה של קטלוג ה-REST.

איך פועלת שליחת שאילתות לטבלאות ב-BigQuery דרך נקודת הקצה של קטלוג REST

ניתוב בקשות לקטלוג של BigQuery מאפשר לכם לחשוף טבלאות ב-BigQuery, כמו טבלאות מנוהלות של Iceberg וטבלאות מטא-נתונים ב-BigQuery, דרך נקודת הקצה של קטלוג REST של Apache Iceberg בקטלוג הייעודי לזמן ריצה של Lakehouse.

תהליך העבודה פועל באופן הבא:

  1. יצירת טבלה בקטלוג של BigQuery: יוצרים טבלה מנוהלת של Iceberg ב-BigQuery באמצעות הצהרות DDL. הטבלה הזו קיימת בקטלוג של BigQuery, כפופה לרשימות בקרת גישה (ACL) של BigQuery ופועלת כמשאב REST של BigQuery.
  2. איחוד למחסן הנתונים של BigQuery מקטלוג ייעודי לזמן ריצה של Lakehouse: באמצעות Apache Iceberg REST API של קטלוג ייעודי לזמן ריצה של Lakehouse, אתם מאחדים למחסן נתונים שצוין בפורמט של נתיב מחסן הנתונים bq://projects/PROJECT_ID (או בגרסה האזורית bq://projects/PROJECT_ID/locations/LOCATION). כך אתם יכולים לגשת לטבלה ב-BigQuery ממנועי מחשוב כמו Apache Spark דרך Apache Iceberg REST Catalog API. בהגדרה הזו, אתם מקבלים חוויית קריאה בלבד מ-Spark, אבל חוויית קריאה וכתיבה מ-BigQuery.

לתשומת ליבכם

  • כשמנתבים בקשות לקטלוג של BigQuery, לא נוצר משאב קטלוג ייעודי של Lakehouse. לכן, הגדרות ומושגים אחרים ברמת הקטלוג לא רלוונטיים לשיטה הזו, למשל היררכיית המשאבים, אזורי הקטלוג והקטגוריות ומבנה השמות P.C.N.T שמורכב מארבעה חלקים. ב-API הבסיסי, זה תואם להגדרה CATALOG_TYPE_BIGQUERY. כשמנתבים בקשות לקטלוג של BigQuery, אי אפשר להעניק גישה לאחסון (הנפקת פרטי כניסה).

  • חשיפת טבלאות ב-BigQuery דרך נקודת הקצה של קטלוג REST שונה מגישה לנתונים חוצי-עננים. תהליך העבודה הזה חושף טבלאות של Google Cloud למנועי OSS חיצוניים, אבל Lakehouse מחבר את Google Cloud לקטלוגים חיצוניים מרוחקים, כמו Databricks Unity Catalog, כדי לשלוח שאילתות לנתונים שמאוחסנים אצל ספקי שירותי ענן אחרים ישירות מ-BigQuery וממנועי OSS בלי להעביר את הנתונים. למידע נוסף על תהליך העבודה הזה, קראו את המאמר מידע על גישה לנתונים חוצי-עננים.

השוואה לטבלאות שמנוהלות על ידי נקודת הקצה של קטלוג REST של Apache Iceberg

חשיפת טבלאות BigQuery דרך נקודת הקצה של קטלוג REST שונה מתהליכי עבודה שבהם הקטלוג הייעודי לזמן ריצה של Lakehouse משתמש בנקודת הקצה של קטלוג REST של Apache Iceberg, בדרכים הבאות:

  • ניהול משאבים ואחסון קטלוגים: הטבלאות בקטלוג של BigQuery נמצאות שם כמשאבי BigQuery REST, והקטלוג הייעודי לזמן ריצה של Lakehouse פועל כשער proxy. כשמשתמשים בנקודת הקצה של קטלוג REST של Apache Iceberg בקטלוג הייעודי לזמן ריצה של Lakehouse כדי לנהל טבלאות באופן ישיר, הטבלאות האלה מאוחסנות כמשאבי REST של Lakehouse.
  • בקרת גישה: הטבלאות בקטלוג של BigQuery משתמשות בהרשאות IAM וברשימות של בקרת גישה (ACL) ב-BigQuery. טבלאות שמנוהלות ישירות בקטלוג הייעודי לזמן ריצה של Lakehouse משתמשות ברשימות ACL של Lakehouse.
  • יכולות קריאה וכתיבה של מנועים: טבלאות מנוהלות של Iceberg מספקות גישת קריאה וכתיבה דרך BigQuery, וגישת קריאה בלבד ממנועים חיצוניים כמו Spark. טבלאות שמנוהלות ישירות בקטלוג הייעודי לזמן ריצה של Lakehouse דרך נקודת הקצה של קטלוג Apache Iceberg REST, תומכות בפעולות קריאה וכתיבה גם מ-BigQuery וגם ממנועים חיצוניים כמו Spark.

לפני שמתחילים

  1. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  2. מפעילים את BigLake API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לשליחת שאילתות לטבלאות ב-BigQuery דרך נקודת הקצה של קטלוג ה-REST של Apache Iceberg, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:

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

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

אם אתם משתמשים במנועי שאילתות חיצוניים כמו Managed Service for Apache Spark כדי ליצור מרחבי שמות או לשנות טבלאות שנוצרו ממנועים חיצוניים, תנו את התפקידים האלה לחשבון השירות שמריץ משימות במנוע הזה (טבלאות מנוהלות של Iceberg הן לקריאה בלבד ממנועים חיצוניים).

הגדרת הלקוח למחסן הנתונים של BigQuery

כדי להתחבר למחסן הנתונים של BigQuery, צריך להגדיר את הלקוח (כמו Apache Spark או Trino) עם פורמט מחסן הנתונים של bq://projects/PROJECT_ID בשדה WAREHOUSE_PATH בדוגמאות להגדרת הלקוח בקטע הגדרת אפליקציית הלקוח.

אפשר גם לכלול מיקום ב-BigQuery כדי להגביל בקשות עתידיות למיקום יחיד, באמצעות הפורמט bq://projects/PROJECT_ID/locations/LOCATION.

מכיוון שהמשאבים האלה מנוהלים על ידי BigQuery, אתם צריכים את ההרשאות הנדרשות הרלוונטיות.

יצירת מרחבי שמות במחסן הנתונים של BigQuery

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

Spark

כדי ליצור מרחב שמות במחסן הנתונים של BigQuery, צריך לכלול את הסעיפים LOCATION ו-DBPROPERTIES:

spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME LOCATION 'gs://BUCKET_NAME/NAMESPACE_NAME' WITH DBPROPERTIES ('gcp-region' = 'LOCATION');")
spark.sql("USE NAMESPACE_NAME;")

מחליפים את מה שכתוב בשדות הבאים:

  • ‫NAMESPACE_NAME: שם למרחב השמות.
  • ‫BUCKET_NAME: הקטגוריה של Cloud Storage שבה אתם משתמשים בקטלוג.
  • LOCATION: מיקום ב-BigQuery. ערך ברירת המחדל הוא US במספר אזורים.

Trino

כדי ליצור סכימה במחסן הנתונים של BigQuery, צריך לכלול את המאפיינים LOCATION ו-gcp-region:

CREATE SCHEMA IF NOT EXISTS  CATALOG_NAME.SCHEMA_NAME WITH ( LOCATION = 'gs://BUCKET_NAME/SCHEMA_NAME', "gcp-region" = 'LOCATION');
USE CATALOG_NAME.SCHEMA_NAME;

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CATALOG_NAME: השם של קטלוג Trino שמשתמש בנקודת הקצה של קטלוג REST של Apache Iceberg.
  • ‫SCHEMA_NAME: שם לסכימה.
  • ‫BUCKET_NAME: הקטגוריה של Cloud Storage שבה אתם משתמשים בקטלוג.
  • LOCATION: מיקום ב-BigQuery. ערך ברירת המחדל הוא US במספר אזורים.

שליחת שאילתות על טבלאות ב-BigQuery

הטבלאות שאתם יוצרים במחסן הנתונים של BigQuery גלויות ב-BigQuery, ואפשר לשלוח אליהן שאילתות ישירות באמצעות SQL סטנדרטי של BigQuery (בלי צורך בשם P.C.N.T בן ארבעה חלקים):

SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;

מחליפים את מה שכתוב בשדות הבאים:

  • ‫NAMESPACE_NAME: השם של מרחב השמות.
  • ‫TABLE_NAME: שם הטבלה.

המאמרים הבאים