שליחת שאילתות לנתונים מרוחקים

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

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

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

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

  1. מוודאים שיש נתונים בקטלוג המרוחק.
  2. הגדרת חיבור בין עננים ל-AWS Glue,‏ Databricks Unity Catalog,‏ Snowflake Horizon Catalog או SAP Business Data Cloud.

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

כדי לקבל את ההרשאות שדרושות לשליחת שאילתות לנתונים מאוחדים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-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.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

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

    • NAMESPACE_NAME: מרחב השמות בקטלוג המאוחד.
    • TABLE_NAME: השם של הטבלה בקטלוג המאוחד.
    • CATALOG_NAME: שם לקטלוג המקומי של Spark (לדוגמה, my_catalog).
    • PYSPARK_FILE: הנתיב ב-gs:// Cloud Storage לקובץ של אפליקציית PySpark.
    • 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.

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