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 ללא גבולות.
לפני שמתחילים
לפני שתוכלו לשלוח שאילתות לנתונים, תצטרכו לבצע את הפעולות הבאות:
- הגדרת Lakehouse ללא גבולות ל-AWS Glue, Databricks Unity Catalog או Snowflake.
- מוודאים שיש נתונים בקטלוג המרוחק.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לשליחת שאילתות לנתונים מאוחדים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-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.
הפעלת קישוריות יוצאת ל-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.
-
יוצרים קובץ של אפליקציית 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=falsespark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=falseאפשרות 2: שינוי מדיניות הסריאליזציה ב-Snowflake: משנים את מדיניות הסריאליזציה של האחסון ל-
COMPATIBLEעבור הטבלה ב-Snowflake.
-