שימוש ב-Lakehouse ללא גבולות

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

  • ניתוח נתונים בשיחה: אפשר ליצור סוכנים מיוחדים שמבוססים על מקורות הנתונים המדויקים שלכם, כולל טבלאות חוצות עננים, כדי לנתח נתונים בעננים שונים מתוך שיחה אחת.
  • Dataplex Catalog: שימוש בתכונות של Knowledge Catalog ליצירת פרופילים של נתונים ותובנות עם מקורות נתונים מאוחדים.

כדי לקבל תובנות מעמיקות יותר, אתם יכולים ליצור סוכנים מיוחדים שמבוססים על מקורות הנתונים שלכם, החל מפרויקטים, מערכי נתונים וטבלאות, ועד לתצוגות, לתרשימים ולפונקציות שהוגדרו על ידי המשתמש. מכיוון שהנתונים שלכם בדרך כלל לא נמצאים במקום אחד, ניתוח שיחות לא מוגבל לטבלאות רגילות ב-BigQuery, אלא גם לטבלאות Apache Iceberg שמנוהלות על ידי Lakehouse ולמקורות Lakehouse ללא גבולות כמו Databricks Unity, ‏AWS Glue, ‏SAP ו-Salesforce. כך תוכלו לנתח נתונים בעננים שונים משיחה אחת, בלי להסתמך על נתונים מבודדים.

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

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

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

  1. הגדרת Lakehouse ללא גבולות ל-AWS Glue,‏ Databricks Unity Catalog או Snowflake.
  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=IO_IMPL,\
        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: השם של הקטלוג המאוחד.
    • IO_IMPL: ההטמעה של FileIO שתואמת לאחסון הבסיסי.

    פרמטרים להגדרת Spark

    בטבלה הבאה מפורטים פרמטרים נפוצים שנדרשים לכל החיבורים:

    פרמטר תיאור
    spark.sql.defaultCatalog שם קטלוג ברירת המחדל (לדוגמה, CATALOG_NAME).
    spark.sql.catalog.CATALOG_NAME המחלקה להטמעת הקטלוג. הוגדר לערך org.apache.iceberg.spark.SparkCatalog.
    spark.sql.catalog.CATALOG_NAME.type סוג הקצה העורפי של הקטלוג. הערך שמוגדר הוא rest לקטלוג REST של Iceberg.
    spark.sql.catalog.CATALOG_NAME.uri ה-URI של נקודת הקצה של קטלוג REST. הוגדר לערך 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 מזהה הפרויקט ב-Google Cloud שמשמש לחיוב ולשיוך מכסות. הוגדר לערך PROJECT_ID.
    spark.sql.extensions התוספים של סשן Spark לתחביר ולתכונות של Iceberg SQL. הוגדר לערך org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions.

    בטבלה הבאה מפורטים פרמטרים של אימות:

    פרמטר תיאור
    spark.sql.catalog.CATALOG_NAME.rest.auth.type הסיווג של מנהל האימות בהתאמה אישית. מגדירים את הערך org.apache.iceberg.gcp.auth.GoogleAuthManager לאימות בתהליך OAuth.
    spark.sql.catalog.CATALOG_NAME.oauth2-server-uri כתובת ה-URI של נקודת הקצה של שרת הטוקנים מסוג OAuth2. הערך שמוגדר הוא https://oauth2.googleapis.com/token לאימות באמצעות טוקן גישה אישי (PAT).
    spark.sql.catalog.CATALOG_NAME.token טוקן למוכ"ז או טוקן גישה אישי (PAT). בדרך כלל הערך הוא $(gcloud auth application-default print-access-token) לאימות PAT.

    בטבלה הבאה מפורטים פרמטרים ייחודיים לפי ספק שירותי האחסון (IO_IMPL):

    אחסון spark.sql.catalog.CATALOG_NAME.io-impl הערות
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO נדרש אימות (X-Iceberg-Access-Delegation=vended-credentials) אם האפשרות הזו מופעלת.
    פרמטר נוסף: spark.sql.catalog.CATALOG_NAME.s3.region (רשימת האזורים זמינה במאמר נקודות קצה ומכסות ב-Amazon S3).
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO פרמטר נוסף: spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token.
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO אין צורך בפרמטרים נוספים של אחסון.

    ב-Snowflake, יכולות להיות בעיות בשאילתות של עמודות STRING כי הן עוברות אופטימיזציה אוטומטית לאחסון. אפשר לפתור את הבעיה הזו בשתי דרכים:

    • אפשרות 1: השבתת הווקטוריזציה ב-Spark: מוסיפים את מאפייני התצורה הבאים של Spark לדגל --properties:
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • אפשרות 2: שינוי מדיניות הסריאליזציה ב-Snowflake: משנים את מדיניות הסריאליזציה של האחסון ל-COMPATIBLE עבור הטבלה ב-Snowflake.

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