ב-Lakehouse ללא גבולות, חיבור חוצה-עננים מאפשר לכם לגשת לנתונים מרוחקים מפלטפורמות חיצוניות בלי להעביר קבצים בין סביבות ענן. לאחר מכן תוכלו לשלוח שאילתות לטבלאות המאוגדות מ-BigQuery, מ-Managed Service for Apache Spark או מ-Apache Spark בקוד פתוח.
בנוסף לשאילתות ניתוח, אתם יכולים להשתמש בנתונים המאוגדים כדי לקבל תובנות מבוססות-AI ולנהל את הנתונים:
- ניתוח נתונים באמצעות שיחה: אתם יכולים ליצור סוכנים מיוחדים שמבוססים על מקורות הנתונים שלכם, כולל טבלאות מאוחדות, כדי לנתח נתונים בעננים שונים בשיחה אחת.
- Knowledge Catalog: יצירת פרופילים של נתונים ותובנות ממקורות נתונים מאוחדים.
כדי לבצע ניתוח מעמיק יותר, אתם יכולים ליצור סוכני ניתוח נתונים בממשק שיחה שמשתמשים בפרויקטים, במערכי נתונים, בטבלאות, בתצוגות, בתרשימים ובפונקציות בהגדרת המשתמש (UDF). הסוכנים האלה פועלים בטבלאות רגילות של BigQuery, בטבלאות Apache Iceberg שמנוהלות על ידי Lakehouse ובמקורות של Lakehouse כמו Databricks Unity Catalog, AWS Glue, SAP BDC ו-Salesforce.
לפני שמתחילים
כדי לשלוח שאילתות על הנתונים, צריך לבצע את הפעולות הבאות:
- מוודאים שיש נתונים בקטלוג המרוחק.
- מגדירים חיבור חוצה-עננים ל-AWS Glue, ל-Databricks Unity Catalog, ל-Snowflake Horizon Catalog, ל-Workday Data Lake או ל-SAP Business Data Cloud.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לשליחת שאילתות על נתונים מאוחדים, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:
-
שליחת שאילתות לגבי נתונים ב-BigQuery:
BigQuery Data Viewer (
roles/bigquery.dataViewer) -
להריץ משימות ב-BigQuery:
BigQuery Job User (
roles/bigquery.jobUser) -
חיפוש וקריאה של מטא-נתונים של טבלאות בקטלוגים של Lakehouse:
צפייה ב-BigLake (
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 ושמירה במטמון חוצה-עננים (כשהיא מופעלת בקטלוג) מטופלים באופן אוטומטי על ידי Google Cloud.
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: האזור של עומס העבודה באצווה של 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.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
מחליפים את מה שכתוב בשדות הבאים:
-
NAMESPACE_NAME: מרחב השמות בקטלוג המאוחד. -
TABLE_NAME: שם הטבלה בקטלוג המאוחד. -
CATALOG_NAME: שם לקטלוג Spark המקומי (לדוגמה,my_catalog). -
PYSPARK_FILE: הנתיב ב-gs://Cloud Storage לקובץ של אפליקציית PySpark. -
REGION: האזור של עומס העבודה באצווה של 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 שמשמש לשיוך של החיוב והמכסה. הגדרת הערך 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).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.
-
מעקב אחרי השימוש במטמון והחיסכון בעלויות של תעבורת נתונים יוצאת
כשמפעילים שמירה במטמון חוצה-עננים בקטלוג מאוחד או בחיבור ל-BigQuery, Lakehouse שומר במטמון בלוקים של קבצים שאוחזרו באופן מקומי באזור של Google Cloud הפעלת השאילתה. שאילתות עוקבות, כולל שאילתות שונות שמטרגטות את אותם בלוקים של קבצים, קוראות ישירות מהמטמון המקומי במקום לאחזר מחדש את הקבצים מהענן המרוחק.
כדי לבדוק את שיעורי המציאה במטמון ולמדוד את החיסכון בעלויות של תעבורת הנתונים היוצאת, בודקים את פרטי המשימה במסוף BigQuery או מאחזרים את הנתונים הסטטיסטיים של משימת השאילתה ב-JobStatistics2 באמצעות BigQuery API או כלי שורת הפקודה של BigQuery:
bq show --format=prettyjson --job=true JOB_ID
מחליפים את JOB_ID במזהה של משימת השאילתה ב-BigQuery.
בפלט ה-JSON בקטע statistics.query.objectStorageStats (או object_storage_stats ב-API של proto), הנתונים הסטטיסטיים של המשימה מחזירים רשימה עם רשומה לכל ספק שירותי ענן שאליו בוצעה גישה במהלך הביצוע. כל רשומה מכילה את השדות הבאים:
-
cloudProvider(cloud_provider): ספק שירותי הענן שמארח את מאגר האובייקטים (לדוגמה,AWSאוAZURE). -
cacheBytesRead(cache_bytes_read): מספר הבייטים הכולל שנקראו מהמטמון המקומי של Google Cloud , בלי לקרוא ממאגר אובייקטים מרוחק. -
objectStorageBytesRead(object_storage_bytes_read): מספר הבייטים הכולל שנקראו ישירות ממאגר האובייקטים של ספק שירותי הענן.
מידע נוסף על מושגי שמירה במטמון ושיקולים לגבי מיקום אחסון הנתונים זמין במאמר שמירה חכמה במטמון.