לזרימות עבודה חדשות, מומלץ להשתמש בנקודת הקצה של קטלוג REST של Apache Iceberg בתוך קטלוג זמן הריצה של Lakehouse.
נקודת הקצה הזו משמשת כמקור אמת יחיד (SSOT), ומאפשרת יכולת פעולה הדדית חלקה בין מנועי השאילתות. היא מאפשרת למנועים כמו Apache Spark לגלות, לקרוא ולנהל באופן עקבי את הטבלאות שלכם ב-Google Cloud Lakehouse.
הגישה הזו מתאימה אם אתם משתמשים במנועי קוד פתוח כדי לגשת לנתונים ב-Cloud Storage, ואתם צריכים יכולת פעולה הדדית עם מנועים אחרים, כולל BigQuery. היא תומכת בתכונות כמו הקצאת הרשאות לשליטה מדויקת בגישה, ושכפול בין אזורים והתאוששות מאסון.
לעומת זאת, נקודת הקצה של קטלוג Apache Iceberg מותאם אישית ל-BigQuery היא שילוב מוקדם יותר. אפשר להמשיך להשתמש בו בתהליכי עבודה קיימים, אבל קטלוג ה-REST מציע חוויה יותר סטנדרטית ועשירה בתכונות.
לפני שמתחילים
לפני שממשיכים, מומלץ לעיין בקטלוג זמן הריצה של Lakehouse ובסקירה הכללית של נקודת הקצה של קטלוג REST של Iceberg.
-
מפעילים את BigLake API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לשימוש בנקודת הקצה של קטלוג Apache Iceberg REST בקטלוג של זמן הריצה של Lakehouse, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
ביצוע משימות אדמיניסטרטיביות, כמו ניהול הגישה של משתמשים לקטלוג, הגישה לאחסון ומצב מכירת האישורים של הקטלוג:
- אדמין BigLake (
roles/biglake.admin) בפרויקט - אדמין לניהול נפח האחסון (
roles/storage.admin) בקטגוריה של Cloud Storage
- אדמין BigLake (
-
קריאת נתוני טבלה במצב של מכירת אישורים:
BigLake Viewer (
roles/biglake.viewer) בפרויקט. אם אתם משתמשים במנועי שאילתות כמו Managed Service for Apache Spark או Dataflow כדי לקרוא נתונים בטבלה, אתם צריכים להעניק את התפקיד הזה לחשבון השירות שבו אתם משתמשים כדי להריץ משימות במנוע הזה. -
כתיבת נתוני טבלה במצב של מכירת אישורים:
BigLake Editor (
roles/biglake.editor) בפרויקט. אם אתם משתמשים במנועי שאילתות כמו Managed Service for Apache Spark או Dataflow כדי לכתוב נתונים בטבלה, אתם צריכים להעניק את התפקיד הזה לחשבון השירות שבו אתם משתמשים כדי להריץ משימות במנוע הזה. -
שימוש בחשבון השירות של שירות קטלוג זמן הריצה של Lakehouse שהוקצה אוטומטית במצב של מכירת פרטי כניסה:
משתמש באובייקט אחסון (
roles/storage.objectUser) בקטגוריית היעד של Cloud Storage. אחרי שיוצרים את הקטלוג, צריך להעניק במפורש את התפקיד Storage Object User (roles/storage.objectUser) בקטגוריית האחסון לחשבון השירות של הקטלוג של זמן הריצה של Lakehouse שהוקצה אוטומטית. -
קריאת משאבי קטלוג ונתוני טבלה במצב שבו לא מונפקים אישורים:
- BigLake Viewer (
roles/biglake.viewer) בפרויקט - צפייה באובייקט אחסון (
roles/storage.objectViewer) בקטגוריה של Cloud Storage
- BigLake Viewer (
-
ניהול משאבי קטלוג וכתיבת נתוני טבלה במצב שאינו 'הקצאת אישורים':
- BigLake Editor (
roles/biglake.editor) בפרויקט - Storage Object User (
roles/storage.objectUser) בקטגוריה של Cloud Storage
- BigLake Editor (
-
ביצוע פעולות בשפת הטיפול בנתונים (DML) באמצעות איחוד קטלוגים ב-BigQuery:
- BigQuery Data Editor (
roles/bigquery.dataEditor) on the project - אדמין לניהול נפח האחסון (
roles/storage.admin) בקטגוריה של Cloud Storage. אם אתם משתמשים במנועי שאילתות כמו Managed Service for Apache Spark כדי לבצע פעולות DML, אתם צריכים להעניק את התפקידים האלה לחשבון השירות שבו אתם משתמשים כדי להריץ משימות במנוע הזה.
- BigQuery Data Editor (
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מגבלות
נקודת הקצה של קטלוג REST של Apache Iceberg כפופה למגבלות הבאות:
מגבלות כלליות
- יש תמיכה בטבלאות Apache Iceberg בגרסה 2 (זמינות כללית) ובגרסה 3 (גרסת Preview). אין תמיכה בטבלאות Iceberg בגרסה 1. לפני שמשתמשים בטבלאות קיימות בגרסה 1 עם נקודת הקצה של קטלוג Apache Iceberg REST, צריך לשדרג אותן לגרסה נתמכת.
- יש תמיכה ב-Trino רק בשילוב עם פדרציית קטלוגים של BigQuery כשמשתמשים בגרסאות 2.3.16 ואילך של תמונת Managed Service for Apache Spark ב-Compute Engine 2.3.
- כשמשתמשים במצב של מכירת פרטי כניסה, צריך להגדיר את המאפיין
io-implלערךorg.apache.iceberg.gcp.gcs.GCSFileIO. ברירת המחדל,org.apache.iceberg.hadoop.HadoopFileIO, לא נתמכת.
מגבלות על טבלאות
- טבלאות שמנוהלות דרך נקודת הקצה של קטלוג Apache Iceberg REST לא תומכות בבקרת גישה פרטנית (FGAC), כמו אבטחה ברמת השורה וברמת העמודה.
מגבלות נתונים
- רק קובצי Parquet נתמכים. לפרטים נוספים על האופן שבו BigQuery מטפל בקובצי Parquet, ראו טעינת נתוני Parquet מ-Cloud Storage.
- גודל הקובץ של Iceberg
metadata.jsonמוגבל ל-1MB. כדי לבקש להגדיל את המגבלה הזו, אפשר לפנות לצוות התמיכה בחשבון Google.
מגבלות על שאילתות
- אי אפשר לשלוח שאילתות לטבלאות מטא-נתונים של Apache Iceberg (כמו
.snapshotsאו.files) ב-BigQuery באמצעות מזהי שמות בני חמישה חלקים. אפשר לשלוח שאילתות לטבלאות האלה באמצעות Spark.
הגדרת נקודת הקצה של קטלוג REST של Iceberg
לפני שמגדירים את הקטלוג, מומלץ לקרוא את הסקירה הכללית על נקודת הקצה של קטלוג Apache Iceberg REST כדי להבין את היררכיית המשאבים, את סוגי הקטלוג ואת מבנה השמות.
אלה השלבים הכלליים שצריך לבצע כשמשתמשים בנקודת הקצה של קטלוג Apache Iceberg REST בקטלוג של זמן הריצה של Lakehouse:
- על סמך סקירה כללית של נקודת הקצה של קטלוג Iceberg REST, בוחרים את המיקום של מחסן הקטלוג (Cloud Storage או BigQuery).
- אם אתם משתמשים במחסן נתונים של Cloud Storage
gs://, אתם צריכים ליצור קטלוג שמפנה למיקום של מחסן הנתונים. - מגדירים את אפליקציית הלקוח כך שתשתמש בנקודת הקצה של קטלוג Apache Iceberg REST.
- יוצרים מרחב שמות או סכימה כדי לארגן את הטבלאות.
- יוצרים טבלאות ומריצים עליהן שאילתות באמצעות הלקוח שהגדרתם.
שדרוג טבלאות Iceberg מגרסה 1 לגרסה 2
אם יש לכם טבלאות קיימות בגרסה 1 (V1) של Apache Iceberg, אתם צריכים לשדרג אותן באמצעות מנוע השאילתות לפני שמשתמשים בהן עם נקודת הקצה של קטלוג Apache Iceberg REST.
כדי לשדרג טבלה בפורמט Iceberg V1 ל-V2, מריצים את פקודת Spark SQL הבאה או משתמשים בפעולות דומות במנוע:
ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2');
יצירת קטלוג
אפשר ליצור קטלוג שמשתמש בפרטי כניסה של משתמשי קצה או במצב של הקצאת פרטי כניסה.
כשמשתמשים בפרטי כניסה של משתמש קצה, הקטלוג מעביר את הזהות של משתמש הקצה שניגש אליו ל-Cloud Storage לצורך בדיקות הרשאות.
מכירת אישורים היא מנגנון להענקת גישה לאחסון שמאפשר לאדמינים של קטלוג זמן הריצה של Lakehouse לשלוט בהרשאות ישירות במשאבים של קטלוג זמן הריצה של Lakehouse, וכך לבטל את הצורך של משתמשי הקטלוג בגישה ישירה לקטגוריות של Cloud Storage. המנגנון מאפשר לאדמינים של Lakehouse ב-Google Cloud להעניק למשתמשים הרשאות לקבצי נתונים ספציפיים.
לתשומת ליבכם
לפני שיוצרים קטלוג, חשוב לעיין בדרישות בנוגע למיקומים.
כשיוצרים מרחב שמות, הוא משתמש אוטומטית באותו אזור כמו הקטלוג.
אם הקטלוג שלכם משתמש בקטגוריה במספר אזורים ואתם רוצים להשתמש בו עם מספר אזורים ב-BigQuery (
USאוEU), אתם צריכים למחוק את הקטלוג וליצור אותו מחדש כדי לציין את המיקום הראשי.
פרטי הכניסה של משתמשי הקצה
המסוף
פותחים את הדף Lakehouse במסוף Google Cloud .
לוחצים על יצירת קטלוג.
בשדה בחירת קטגוריה של Cloud Storage, מזינים את השם של הקטגוריה של Cloud Storage שבה רוצים להשתמש עם הקטלוג. לחלופין, לוחצים על עיון כדי לבחור דלי קיים או ליצור דלי חדש. אפשר להוסיף רק קטלוג אחד לכל קטגוריה ב-Cloud Storage.
בקטע שיטת אימות, בוחרים באפשרות פרטי כניסה של משתמש קצה.
לוחצים על יצירה.
gcloud
משתמשים בפקודה gcloud biglake iceberg catalogs create.
gcloud biglake iceberg catalogs create \ CATALOG_NAME \ --project PROJECT_ID \ --catalog-type gcs-bucket \ --credential-mode end-user \ [--primary-location LOCATION]
מחליפים את מה שכתוב בשדות הבאים:
-
CATALOG_NAME: שם לקטלוג. בטבלאות Apache Iceberg שנתמכות על ידי קטלוג זמן הריצה של Lakehouse, השם הזה לרוב זהה למזהה הקטגוריה ב-Cloud Storage שמשמש עם קטלוג REST. לדוגמה, אם הקטגוריה היאgs://bucket-id, שם הקטלוג יכול להיותbucket-id. השם הזה משמש גם כמזהה הקטלוג כשמריצים שאילתות על הטבלאות האלה מ-BigQuery. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: (אופציונלי) האזור הראשי של הקטלוג, כדי להבטיח יכולת פעולה הדדית עם BigQuery. עבור קטגוריות של Cloud Storage באזור ארה"ב (לדוגמה,USאוus-central1) או באזור האיחוד האירופי (לדוגמה,EUאוeurope-west4), צריך לצייןUSאוEUבהתאמה כדי להבטיח שהקטלוג יהיה נגיש וזמין לשאילתות מאזורים מרובים תואמים ב-BigQuery. מידע נוסף זמין במאמר בנושא אזורים של קטגוריות וקטלוגים.
מצב מכירת פרטי כניסה
אדמין של קטלוג מפעיל את האפשרות להקצאת הרשאות כשיוצרים או מעדכנים קטלוג. משתמש בקטלוג יכול להנחות את נקודת הקצה של קטלוג REST של Apache Iceberg להחזיר הרשאות אחסון עם היקף הרשאות מצומצם, על ידי ציון של הקצאת הרשאות גישה כשמגדירים את נקודת הקצה של קטלוג REST של Apache Iceberg.
חשבון השירות של קטלוג זמן הריצה של Lakehouse שמוקצה אוטומטית צריך את התפקיד 'משתמש באובייקט אחסון' (roles/storage.objectUser) באופן מפורש בקטגוריית היעד של Cloud Storage. כברירת מחדל, הוא נוצר עם גישה לצפייה בלבד.
בלי התפקיד הזה, לפרטי הכניסה שסופקו לא יהיה היקף מספיק כדי לבצע כתיבות לאחסון. אם אתם משתמשים בכלים כמו gcloud או Terraform, אתם צריכים להעניק את התפקיד הזה באופן ידני.
המסוף
במסוף Google Cloud , פותחים את הדף Lakehouse.
לוחצים על יצירת קטלוג. ייפתח הדף Create catalog.
בשדה Select a Cloud Storage bucket (בחירת קטגוריה של Cloud Storage), מזינים את השם של הקטגוריה של Cloud Storage שרוצים להשתמש בה עם הקטלוג. לחלופין, לוחצים על עיון כדי לבחור מתוך רשימה של דליים קיימים או כדי ליצור דלי חדש. אפשר להוסיף רק קטלוג אחד לכל קטגוריה של Cloud Storage.
בקטע שיטת אימות, בוחרים באפשרות מצב מכירת אישורים.
לוחצים על יצירה.
הקטלוג נוצר והדף פרטי הקטלוג נפתח.
בקטע שיטת אימות, לוחצים על הגדרת הרשאות של מאגר.
בתיבת הדו-שיח, לוחצים על אישור.
כך מוודאים שלחשבון השירות של הקטלוג יש את התפקיד Storage Object Admin (אדמין של אובייקטים באחסון) בקטגוריית האחסון.
gcloud
משתמשים בפקודה gcloud biglake iceberg catalogs create.
gcloud biglake iceberg catalogs create \ CATALOG_NAME \ --project PROJECT_ID \ --catalog-type gcs-bucket \ --credential-mode vended-credentials \ [--primary-location LOCATION]
מחליפים את מה שכתוב בשדות הבאים:
-
CATALOG_NAME: שם לקטלוג. השם הזה לרוב זהה למזהה קטגוריה של Cloud Storage שמשמש עם קטלוג REST – לדוגמה, אם הקטגוריה היאgs://bucket-id, שם הקטלוג יכול להיותbucket-id. השם הזה משמש גם כמזהה הקטלוג כששולחים שאילתות לטבלאות האלה מ-BigQuery. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
LOCATION: (אופציונלי) האזור הראשי של הקטלוג כדי להבטיח יכולת פעולה הדדית עם BigQuery. כדי להבטיח שהקטלוג יהיה נגיש וזמין לשליפת נתונים ממספר האזורים התואמים ב-BigQuery, צריך לצייןUSאוEUבהתאם לקטגוריות של Cloud Storage באזור ארה"ב (למשלUSאוus-central1) או באזור האיחוד האירופי (למשלEUאוeurope-west4). מידע נוסף זמין במאמר אזורים של קטגוריות וקטלוגים.אחרי שיוצרים את הקטלוג, צריך להעניק במפורש את התפקיד משתמש באובייקט אחסון (
roles/storage.objectUser) בקטגוריית האחסון לחשבון השירות של קטלוג זמן הריצה של Lakehouse שהוקצה אוטומטית לקטלוג.
הגדרת אפליקציית לקוח
אחרי שיוצרים קטלוג, צריך להגדיר את אפליקציית הלקוח כך שתשתמש בו. בדוגמאות האלה מוסבר איך להגדיר את הקטלוג עם או בלי מכירת אישורים.
אשכול
כדי להשתמש ב-Spark עם נקודת הקצה של קטלוג Apache Iceberg REST ב-Managed Service for Apache Spark, אפשר להשתמש במאפיינים כדי לפשט את ההגדרה, או להגדיר את הסשן באופן ידני.
הגדרה פשוטה באמצעות מאפיינים (מומלץ)
יוצרים אשכול עם נכס מסוג קטלוג:
gcloud dataproc clusters create CLUSTER_NAME \ --enable-component-gateway \ --project=PROJECT_ID \ --region=REGION \ --optional-components=ICEBERG \ --image-version=DATAPROC_VERSION \ --properties="dataproc:dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/CATALOG_ID"
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם לאשכול. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REGION: האזור של אשכול Managed Service for Apache Spark. -
DATAPROC_VERSION: גרסת התמונה של Managed Service for Apache Spark, לדוגמה2.2. -
CATALOG_NAME: שם לקטלוג Lakehouse שישמש ב-Spark. יכול להיות זהה ל-CATALOG_ID. -
CATALOG_ID: המזהה של קטלוג Lakehouse שיצרתם.
לאחר מכן יוצרים סשן Spark בלי לציין פרמטרים ידניים של קטלוג:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("APP_NAME").getOrCreate()
הגדרה ידנית
אם לא משתמשים במאפיין cluster, יוצרים אשכול כמו שמתואר למעלה (בלי הדגל --properties), ואז מגדירים את סשן Spark באופן ידני:
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'WAREHOUSE_PATH') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
מחליפים את מה שכתוב בשדות הבאים:
-
CATALOG_NAME: השם של נקודת הקצה של קטלוג REST של Apache Iceberg. -
APP_NAME: שם להפעלת Spark. -
REST_API_VERSION: מוגדר ל-v1לגרסה היציבה של ה-API. -
WAREHOUSE_PATH: הנתיב למחסן הנתונים. שימוש ב-gs://CLOUD_STORAGE_BUCKET_NAME. כדי להשתמש בפדרציית קטלוגים ב-BigQuery, אפשר לעיין במאמר שימוש בפדרציית קטלוגים ב-BigQuery. -
PROJECT_ID: הפרויקט שמחויב על השימוש בנקודת הקצה של קטלוג REST של Apache Iceberg, שיכול להיות שונה מהפרויקט שבבעלותו נמצאת קטגוריית Cloud Storage. פרטים על הגדרת פרויקט כשמשתמשים ב-API בארכיטקטורת REST מופיעים במאמר פרמטרים של המערכת.
הגדרה באמצעות הקצאת הרשאות
כדי להשתמש בהקצאת הרשאות, צריך להשתמש בקטלוג במצב הקצאת הרשאות ולהוסיף את הכותרת X-Iceberg-Access-Delegation לבקשות קטלוג של Iceberg REST עם הערך vended-credentials. לשם כך, מוסיפים את השורה הבאה לבונה SparkSession:
.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')
דוגמה לשימוש ב-Credential Vending
בדוגמה הבאה מוגדר מנגנון השאילתות עם מכירת פרטי כניסה:
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \ .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
מידע נוסף מופיע בקטע Headers in RESTCatalog במאמרי העזרה של Apache Iceberg.
שירותים מנוהלים לאשכולות Apache Spark תומכים בתהליכי הרשאה של Google ל-Apache Iceberg בגרסאות הבאות:
- Managed Service for Apache Spark בגרסאות של תמונות Compute Engine 2.2 2.2.65 ואילך.
- Managed Service for Apache Spark ב-Compute Engine בגרסאות אימג' 2.3, 2.3.11 ואילך.
ללא שרת (serverless)
שולחים עומס עבודה של אצווה ב-PySpark אל Managed Service for Apache Spark באמצעות מאפיינים כדי לפשט את ההגדרה (מומלץ) או על ידי ציון כל הפרמטרים.
הגדרה פשוטה באמצעות מאפיינים (מומלץ)
שולחים משימה באצווה עם נכס מסוג קטלוג:
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/CATALOG_ID"
הגדרה ידנית
אם אתם מעדיפים לציין את כל המאפיינים באופן ידני, אתם יכולים להשתמש בהגדרה הבאה:
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="\ spark.sql.defaultCatalog=CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.CATALOG_NAME.type=rest,\ spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_PATH,\ spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
מחליפים את מה שכתוב בשדות הבאים:
-
PYSPARK_FILE: הנתיב של Cloud Storage אל קובץ אפליקציית PySpark.gs:// -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REGION: האזור של עומס העבודה של עיבוד ברצף (batch processing) ב-Managed Service for Apache Spark. -
RUNTIME_VERSION: גרסת זמן הריצה של Managed Service for Apache Spark, לדוגמה2.2. -
CATALOG_NAME: השם של נקודת הקצה של קטלוג REST של Apache Iceberg. -
REST_API_VERSION: מוגדר ל-v1לגרסה היציבה של ה-API. -
WAREHOUSE_PATH: הנתיב למחסן הנתונים. שימוש ב-gs://CLOUD_STORAGE_BUCKET_NAME. כדי להשתמש בפדרציית קטלוגים ב-BigQuery, אפשר לעיין במאמר שימוש בפדרציית קטלוגים ב-BigQuery.
הגדרה באמצעות הקצאת הרשאות
כדי להשתמש בהקצאת אישורים, צריך להשתמש בקטלוג במצב הקצאת אישורים ולהוסיף את הכותרת X-Iceberg-Access-Delegation לבקשות של נקודת הקצה של קטלוג Apache Iceberg REST עם הערך vended-credentials. לשם כך, מוסיפים את השורה הבאה להגדרות של Managed Service for Apache Spark:
.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')
דוגמה לשימוש ב-Credential Vending
בדוגמה הבאה מוגדר מנגנון השאילתות עם מכירת פרטי כניסה:
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="\ spark.sql.defaultCatalog=CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.CATALOG_NAME.type=rest,\ spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=gs://CLOUD_STORAGE_BUCKET_NAME,\ spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token, \ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials"
מידע נוסף זמין בקטע Headers in RESTCatalog במאמרי העזרה של Apache Iceberg.
Managed Service for Apache Spark תומך בתהליכי הרשאה של Google ל-Apache Iceberg בגרסאות זמן הריצה הבאות:
- Managed Service for Apache Spark 2.2 runtimes 2.2.60 and later
- Managed Service for Apache Spark 2.3 runtimes 2.3.10 and later
Trino
כדי להשתמש ב-Trino עם נקודת הקצה של קטלוג Apache Iceberg REST, צריך ליצור אשכול של Managed Service for Apache Spark עם רכיב Trino ולהגדיר את מאפייני הקטלוג באמצעות הדגל gcloud dataproc clusters create --properties.
בדוגמה הבאה נוצר קטלוג Trino בשם CATALOG_NAME:
gcloud dataproc clusters create CLUSTER_NAME \ --enable-component-gateway \ --region=REGION \ --image-version=DATAPROC_VERSION \ --network=NETWORK_ID \ --optional-components=TRINO \ --properties="\ trino-catalog:CATALOG_NAME.connector.name=iceberg,\ trino-catalog:CATALOG_NAME.iceberg.catalog.type=rest,\ trino-catalog:CATALOG_NAME.iceberg.rest-catalog.uri=https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog,\ trino-catalog:CATALOG_NAME.iceberg.rest-catalog.warehouse=WAREHOUSE_PATH,\ trino-catalog:CATALOG_NAME.iceberg.rest-catalog.biglake.project-id=PROJECT_ID,\ trino-catalog:CATALOG_NAME.iceberg.rest-catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager"
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם לאשכול. -
REGION: האזור של אשכול Managed Service for Apache Spark. -
DATAPROC_VERSION: גרסת התמונה של Managed Service for Apache Spark, לדוגמה2.2. -
NETWORK_ID: מזהה רשת האשכול. מידע נוסף זמין במאמר בנושא הגדרת רשת של אשכול Managed Service for Apache Spark. -
CATALOG_NAME: השם של קטלוג Trino באמצעות נקודת הקצה של קטלוג Apache Iceberg REST. -
REST_API_VERSION: מוגדר ל-v1לגרסה היציבה של ה-API. -
WAREHOUSE_PATH: הנתיב למחסן הנתונים. שימוש ב-gs://CLOUD_STORAGE_BUCKET_NAME. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו רוצים להשתמש בקטלוג של זמן הריצה של Lakehouse.
אחרי שיוצרים את האשכול, מתחברים למופע ה-VM הראשי ומשתמשים ב-Trino CLI:
trino --catalog=CATALOG_NAME
Managed Service for Apache Spark Trino תומך בתהליכי הרשאה של Google ל-Apache Iceberg בגרסאות הבאות:
- Managed Service for Apache Spark בגרסאות זמן ריצה של Compute Engine 2.2 2.2.65 ואילך
- Managed Service for Apache Spark ב-Compute Engine גרסאות זמן ריצה 2.3 2.3.11 ואילך
- אין תמיכה ב-Managed Service for Apache Spark ב-Compute Engine 3.0.
הגדרה באמצעות הקצאת הרשאות
הקצאת אישורים נתמכת רק ב-Trino מגרסה 481 ואילך.
Apache Iceberg 1.10 ואילך
בגרסאות 1.10 ואילך של Apache Iceberg עם קוד פתוח יש תמיכה מובנית בזרימות הרשאות של Google ב-GoogleAuthManager.
בדוגמה הבאה מוצג אופן ההגדרה של Spark לשימוש בנקודת הקצה של קטלוג Apache Iceberg REST.
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'WAREHOUSE_PATH') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
מחליפים את מה שכתוב בשדות הבאים:
-
CATALOG_NAME: השם של נקודת הקצה של קטלוג REST של Apache Iceberg. -
APP_NAME: שם להפעלת Spark. -
REST_API_VERSION: מוגדר ל-v1לגרסה היציבה של ה-API. -
WAREHOUSE_PATH: הנתיב למחסן הנתונים. שימוש ב-gs://CLOUD_STORAGE_BUCKET_NAME. כדי להשתמש בפדרציית קטלוגים ב-BigQuery, אפשר לעיין במאמר שימוש בפדרציית קטלוגים ב-BigQuery. -
PROJECT_ID: הפרויקט שמחויב על השימוש בנקודת הקצה של קטלוג REST של Apache Iceberg, שיכול להיות שונה מהפרויקט שבבעלותו נמצא קטגוריה של Cloud Storage. פרטים על הגדרת פרויקט כשמשתמשים ב-API בארכיטקטורת REST מופיעים במאמר פרמטרים של המערכת.
הגדרה באמצעות הקצאת הרשאות
בדוגמה הקודמת לא נעשה שימוש במכירת אישורים. כדי להשתמש במנגנון למתן הרשאות, צריך להשתמש בקטלוג במצב של מתן הרשאות ולהוסיף את הכותרת X-Iceberg-Access-Delegation לבקשות של נקודת הקצה של קטלוג Apache Iceberg REST עם הערך vended-credentials. לשם כך, מוסיפים את השורה הבאה לבונה SparkSession:
.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')
דוגמה לשימוש ב-Credential Vending
בדוגמה הבאה מוגדר מנגנון השאילתות עם מכירת פרטי כניסה:
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \ .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
מידע נוסף זמין בקטע Headers in RESTCatalog במאמרי העזרה של Apache Iceberg.
גרסאות קודמות של Apache Iceberg
בגרסאות של Apache Iceberg בקוד פתוח שקדמו לגרסה 1.10, אפשר להגדיר אימות OAuth רגיל על ידי הגדרת סשן עם הפרטים הבאים:
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.9.1,org.apache.iceberg:iceberg-gcp-bundle:1.9.1') \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'WAREHOUSE_PATH') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \ .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
מחליפים את מה שכתוב בשדות הבאים:
-
CATALOG_NAME: השם של נקודת הקצה של קטלוג REST של Apache Iceberg. -
APP_NAME: שם להפעלת Spark. -
REST_API_VERSION: מוגדר ל-v1לגרסה היציבה של ה-API. -
WAREHOUSE_PATH: הנתיב למחסן הנתונים. שימוש ב-gs://CLOUD_STORAGE_BUCKET_NAME. כדי להשתמש בפדרציית קטלוגים ב-BigQuery, אפשר לעיין במאמר שימוש בפדרציית קטלוגים ב-BigQuery. -
PROJECT_ID: הפרויקט שמחויב על השימוש בנקודת הקצה של קטלוג REST של Apache Iceberg, שיכול להיות שונה מהפרויקט שבבעלותו נמצא קטגוריה של Cloud Storage. פרטים על הגדרת פרויקט כשמשתמשים ב-API בארכיטקטורת REST מופיעים במאמר פרמטרים של המערכת. -
TOKEN: אסימון האימות שלכם, שתקף לשעה אחת – לדוגמה, אסימון שנוצר באמצעותgcloud auth application-default print-access-token.
הגדרה באמצעות הקצאת הרשאות
בדוגמה הקודמת לא נעשה שימוש במכירת אישורים. כדי להשתמש במנגנון למתן הרשאות, צריך להשתמש בקטלוג במצב של מתן הרשאות ולהוסיף את הכותרת X-Iceberg-Access-Delegation לבקשות של נקודת הקצה של קטלוג Apache Iceberg REST עם הערך vended-credentials. לשם כך, מוסיפים את השורה הבאה לבונה SparkSession:
.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')
דוגמה עם מכירת פרטי כניסה
בדוגמה הבאה מוגדר מנגנון השאילתות עם מכירת פרטי כניסה:
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \ .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \ .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
מידע נוסף זמין בקטע Headers in RESTCatalog במאמרי העזרה של Apache Iceberg.
יצירת מרחב שמות או סכימה
אחרי שמגדירים את הלקוח, יוצרים מרחב שמות או סכימה כדי לארגן את הטבלאות. התחביר ליצירת מרחב שמות או סכימה משתנה בהתאם למנוע השאילתות. בדוגמאות הבאות מוסבר איך ליצור אותם באמצעות Spark ו-Trino.
המסוף
במסוף Google Cloud , עוברים אל Lakehouse.
בוחרים קטלוג קיים או יוצרים קטלוג חדש אם אין לכם קטלוג.
בסרגל התפריטים, לוחצים על + יצירת מרחב שמות.
בשדה Namespace name (שם מרחב השמות), מזינים שם ייחודי למרחב השמות.
בשדה מיקום, בוחרים קטגוריה של Cloud Storage לקישור למרחב השמות.
לוחצים על יצירה.
Spark
מחסן נתונים ב-Cloud Storage
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;") spark.sql("USE NAMESPACE_NAME;")
מחליפים את NAMESPACE_NAME בשם של מרחב השמות.
Trino
מחסן נתונים ב-Cloud Storage
CREATE SCHEMA IF NOT EXISTS CATALOG_NAME.SCHEMA_NAME; USE CATALOG_NAME.SCHEMA_NAME;
מחליפים את מה שכתוב בשדות הבאים:
-
CATALOG_NAME: השם של קטלוג Trino באמצעות נקודת הקצה של קטלוג Apache Iceberg REST. -
SCHEMA_NAME: שם הסכימה.