שינוי נתונים באמצעות פקודות DML

שינוי נתונים מאפשר לכם לעדכן, למחוק ולמזג רשומות בטבלאות Apache Iceberg בקטלוג הייעודי לזמן ריצה של Lakehouse.

כשמפעילים את BigQuery DML בטבלה, אפשר להריץ פקודות DML רגילות מ-BigQuery לצד מנועי קוד פתוח כמו Spark ו-Trino, וכך להשיג יכולת פעולה הדדית מלאה של כתיבה בעותק יחיד של נתונים שמאוחסנים ב-Cloud Storage.

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

  1. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  2. מפעילים את BigLake API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

  3. מגדירים את הקטלוג הייעודי לזמן ריצה של Lakehouse עם נקודת הקצה (endpoint) של קטלוג REST של Apache Iceberg.

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

כדי לקבל את ההרשאות שדרושות לשינוי נתונים בטבלה, בקשו מהאדמין לתת לכם את התפקידים הבאים ב-IAM ברמת הפרויקט וקטגוריית האחסון:

  • כתיבת נתונים בטבלה במצב הפצת פרטי כניסה: BigLake Editor (roles/biglake.editor) – הפרויקט
  • כתיבת נתוני טבלה במצב שאינו מצב הפצת פרטי כניסה:
    • עריכת BigLake‏ (roles/biglake.editor) – הפרויקט
    • משתמש באובייקטים באחסון (roles/storage.objectUser) – הקטגוריה של Cloud Storage

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

יכולות ותמיכה בטבלאות

כשמשתמשים בטבלאות בקטלוג הייעודי לזמן ריצה של Lakehouse, כדאי להבין את סוגי הטבלאות השונים ואת יכולות ההצטרפות שלהן. סקירה כללית על טבלאות Apache Iceberg

טבלאות Iceberg נתמכות

יש תמיכה רק בטבלאות Apache Iceberg בגרסה 2 (GA) ובגרסה 3 (גרסת טרום-השקה (Preview)). אין תמיכה בטבלאות Iceberg V1. כדי לשדרג טבלאות קיימות בגרסה 1, קראו את המאמר שדרוג טבלאות Iceberg מגרסה 1 לגרסה 2.

שימוש באפשרויות של הטבלה (גרסת טרום-השקה (Preview))

כדי להשתמש ביכולות המנוהלות של BigQuery, כמו שפת הטיפול בנתונים (DML) ב-BigQuery וניהול אוטומטי של טבלאות, אתם יכולים להגדיר מאפייני טבלה ספציפיים. התכונות האלה מופעלות בדרכים שונות, בהתאם למקום שבו הטבלה נוצרה:

  • מ-BigQuery: כברירת מחדל, מופעלים BigQuery DML וניהול אוטומטי של טבלאות.
  • ממנועי קוד פתוח: כדי להצטרף, צריך להגדיר במפורש את מאפייני הטבלה. מידע נוסף מופיע בקטע הגדרת אפשרויות הטבלה.

עדכון נתונים

עדכון שורות קיימות בטבלה:

Spark

ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;

Trino

ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;

BigQuery

UPDATE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET data = "updated row"
WHERE id = 1;

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

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud.
  • ‫CATALOG_ID: מזהה הקטלוג הייעודי לזמן ריצה ב-Lakehouse.
  • ‫NAMESPACE: השם של מרחב השמות של Iceberg.
  • ‫TABLE_NAME: השם של טבלת Iceberg.

מחיקת נתונים

מחיקת שורות ספציפיות מהטבלה:

Spark

ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

DELETE FROM TABLE_NAME WHERE id = 1;

Trino

ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

DELETE FROM TABLE_NAME WHERE id = 1;

BigQuery

DELETE FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
WHERE id = 1;

מיזוג נתונים

ממזגים נתונים מטבלת מקור לטבלת היעד ב-Iceberg:

Spark

ALTER TABLE TARGET_TABLE SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (s.id, s.data);

Trino

ALTER TABLE TARGET_TABLE SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (s.id, s.data);

BigQuery

MERGE `PROJECT_ID.CATALOG_ID.NAMESPACE.TARGET_TABLE` t
USING `PROJECT_ID.CATALOG_ID.NAMESPACE.SOURCE_TABLE` s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (id, data);

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