שימוש ב-Lakehouse חוצה עננים

Lakehouse for Apache Iceberg תומך בשאילתות של נתונים מרוחקים באמצעות הגדרת Lakehouse חוצה-ענן. אחרי ההגדרה, המערכת תומכת בגישה לנתונים באמצעות SQL סטנדרטי ב-BigQuery או Apache Spark ב-Managed Service for Apache Spark.

בדף הזה מוסבר איך לשלוח שאילתות לנתונים מרוחקים אחרי שמגדירים Lakehouse חוצה עננים.

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

לפני שתוכלו לשלוח שאילתות לנתונים, תצטרכו לבצע את הפעולות הבאות:

  1. הגדרת Lakehouse חוצה עננים ל-AWS Glue או ל-Databricks Unity Catalog.
  2. מוודאים שיש נתונים בקטלוג המרוחק.

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

כדי לקבל את ההרשאות שדרושות לשליחת שאילתות לנתונים מאוחדים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-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

שליחת עומס עבודה של PySpark באצווה אל Managed Service for Apache Spark עם הקצאת אישורים מופעלת באמצעות X-Iceberg-Access-Delegation=vended-credentials. ‫Spark ישתמש בפרטי הכניסה הזמניים והמוגבלים כדי להתחבר ל-S3 בצורה מאובטחת, בלי שתצטרכו לנהל פרטי כניסה נפרדים ל-AWS או מחברים ל-S3.

  1. הפעלת קישוריות יוצאת ל-Managed Service for Apache Spark.

    ‫Managed Service for Apache Spark לא יכול להתחבר ל-AWS S3 עם הגדרת הרשת שמוגדרת כברירת מחדל. צריך להקצות Cloud Router ו-Cloud NAT.

    gcloud compute routers create lakehouse-router \
      --network=NETWORK_NAME \
      --region=REGION
    
    gcloud compute routers nats create lakehouse-nat \
      --router=lakehouse-router \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges \
      --region=REGION

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

    • NETWORK_NAME: הרשת של עומס העבודה של אצווה ב-Managed Service for Apache Spark (לדוגמה, default).
    • REGION: האזור של עומס העבודה של עיבוד ברצף (batch processing) ב-Managed Service for Apache Spark.
  2. יוצרים קובץ של אפליקציית PySpark ומריצים את עבודת PySpark.

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate()
    
    df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.show(10, truncate=False)

    מעלים את הקובץ ל-Cloud Storage בכתובת PYSPARK_FILE.

    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/v1/restcatalog,\
        spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_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.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\
        spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
        spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\
        spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

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

    • NAMESPACE_NAME: מרחב השמות בקטלוג המאוחד.
    • TABLE_NAME: השם של הטבלה בקטלוג המאוחד.
    • CATALOG_NAME: שם לקטלוג המקומי של Spark (לדוגמה, my_catalog).
    • PYSPARK_FILE: הנתיב של Cloud Storage אל קובץ אפליקציית PySpark.gs://
    • REGION: האזור של עומס העבודה של עיבוד ברצף (batch processing) ב-Managed Service for Apache Spark.
    • RUNTIME_VERSION: גרסת זמן הריצה של Managed Service for Apache Spark, לדוגמה 2.3.
    • PROJECT_ID: הפרויקט שחויב על השימוש בנקודת הקצה של קטלוג REST של Apache Iceberg.
    • FEDERATED_CATALOG_NAME: השם של הקטלוג המאוחד.

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