Lakehouse for Apache Iceberg תומך בשאילתות של נתונים מרוחקים באמצעות הגדרת Lakehouse חוצה-ענן. אחרי ההגדרה, המערכת תומכת בגישה לנתונים באמצעות SQL סטנדרטי ב-BigQuery או Apache Spark ב-Managed Service for Apache Spark.
בדף הזה מוסבר איך לשלוח שאילתות לנתונים מרוחקים אחרי שמגדירים Lakehouse חוצה עננים.
לפני שמתחילים
לפני שתוכלו לשלוח שאילתות לנתונים, תצטרכו לבצע את הפעולות הבאות:
- הגדרת Lakehouse חוצה עננים ל-AWS Glue או ל-Databricks Unity Catalog.
- מוודאים שיש נתונים בקטלוג המרוחק.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לשליחת שאילתות לנתונים מאוחדים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
הפעלת שאילתות על נתונים ב-BigQuery:
BigQuery Data Viewer (
roles/bigquery.dataViewer) -
הפעלת משימות BigQuery:
BigQuery Job User (
roles/bigquery.jobUser) -
גילוי וקריאה של מטא-נתונים של טבלאות בקטלוגים של Lakehouse:
BigLake Viewer (
roles/biglake.viewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
שאילתת נתונים
אחרי שמגדירים פדרציה, אפשר לבצע שאילתות על הנתונים המרוחקים באמצעות SQL סטנדרטי ב-BigQuery או ב-Apache Spark ב-Managed Service for Apache Spark.
Lakehouse מטפל בתרגום המטא-נתונים ובגישה מאובטחת לנתונים, כך שאפשר להתייחס לטבלאות Apache Iceberg מרוחקות כאילו הן מקומיות בסביבת Google Cloud .
שליחת שאילתות מ-BigQuery
כדי להריץ שאילתות על טבלאות מאוחדות של Apache Iceberg, צריך להשתמש ב-SQL סטנדרטי של BigQuery. נתיב הטבלה מורכב מ-4 חלקים:
project.federated_catalog.namespace.table. הטיפול במטמון, במכירת פרטי כניסה ובניתוב תנועה של CCI מתבצע באופן אוטומטי.
SELECT user_id, action, COUNT(*) as total_actions FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME` WHERE event_date >= '2026-04-01' GROUP BY 1, 2;
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
FEDERATED_CATALOG_NAME: השם של הקטלוג המאוחד. -
NAMESPACE_NAME: מרחב השמות בקטלוג. -
TABLE_NAME: שם הטבלה. -
REGION: Google Cloud האזור. לדוגמה,us-east4.
אפשר גם להריץ את השאילתה באמצעות כלי שורת הפקודה bq:
bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \ "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"
שאילתה מ-Managed Service for Apache Spark
אתם יכולים לקרוא נתונים מ-Lakehouse חוצה-ענן ישירות מאשכולות של Managed Service for Apache Spark בלי לנהל פרטי כניסה נפרדים ל-AWS או מחברים ל-S3. Spark מתחבר ישירות ל-Lakehouse באמצעות ממשק קטלוג REST רגיל של Apache Iceberg, במקום להשתמש ב-BigQuery Storage Read API.
אם מגדירים את המשימה של Managed Service for Apache Spark עם נקודת הקצה של Lakehouse REST, Lakehouse מספק באופן אוטומטי ל-Spark אישורים זמניים של S3 עם היקף מוגדר, באמצעות X-Iceberg-Access-Delegation=vended-credentials. כך Spark יכול לקרוא את הנתונים הבסיסיים בצורה מאובטחת, בהתאם להגדרות של הקטלוג.
כדי להגדיר את העבודה של Managed Service for Apache Spark עם נקודת הקצה של Lakehouse REST:
מגדירים את עבודת Spark.
בפקודה הזו, מעבירים את המאפיינים של קטלוג REST של Apache Iceberg כששולחים את משימת Spark. המיפוי הזה ממפה את הקטלוג המאוחד של Lakehouse לשם של קטלוג Spark מקומי (לדוגמה,
my_catalog):gcloud dataproc jobs submit pyspark PYSPARK_SCRIPT_PATH \ --cluster="CLUSTER_NAME" \ --region="REGION" \ --properties="spark.sql.catalog.SPARK_CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.SPARK_CATALOG_NAME.type=rest,\ spark.sql.catalog.SPARK_CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.SPARK_CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.SPARK_CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\ spark.sql.catalog.SPARK_CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.SPARK_CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.catalog.SPARK_CATALOG_NAME.header.x-goog-user-project=PROJECT_ID"
מריצים שאילתות על הנתונים ב-PySpark.
הפקודה הזו משתמשת ב-Spark כדי לקרוא ישירות מקטלוג Lakehouse, ואז מפעילה טרנספורמציה רגילה.
df = spark.table("SPARK_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.filter(df.action == "purchase").show()
מחליפים את מה שכתוב בשדות הבאים:
-
PYSPARK_SCRIPT_PATH: הנתיב למשימת PySpark. -
CLUSTER_NAME: השם של אשכול Managed Service for Apache Spark. -
REGION: Google Cloud האזור. לדוגמה,us-east4. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
SPARK_CATALOG_NAME: השם שרוצים להשתמש בו לקטלוג Spark. -
FEDERATED_CATALOG_NAME: השם של הקטלוג המאוחד. -
NAMESPACE_NAME: מרחב השמות בקטלוג. -
TABLE_NAME: שם הטבלה.
-