יצירת טבלאות חיצוניות של BigLake עבור Delta Lake

‫BigLake מאפשר גישה לטבלאות Delta Lake עם בקרת גישה מדויקת יותר. ‫Delta Lake הוא פורמט קוד פתוח לאחסון נתונים בטבלאות, שפותח על ידי Databricks ותומך בטבלאות נתונים בקנה מידה של פטה-בייט.

‫BigQuery תומך בתכונות הבאות עם טבלאות Delta Lake:

  • הענקת הרשאות גישה: אפשר לשלוח שאילתות לנתונים מובְנים במאגרי נתונים חיצוניים באמצעות הענקת הרשאות גישה. הענקת הרשאות גישה מפרידה בין הגישה לטבלת Delta Lake לבין הגישה למאגר הנתונים הבסיסי.
  • בקרת גישה מפורטת: אכיפת אבטחה מפורטת ברמת הטבלה, כולל אבטחה ברמת השורה וברמת העמודה. בטבלאות Delta Lake שמבוססות על Cloud Storage, אפשר גם להשתמש בהסתרת נתונים דינמית.
  • התפתחות הסכימה: שינויים בסכימה של טבלאות Delta Lake מזוהים באופן אוטומטי. השינויים בסכימה משתקפים בטבלה ב-BigQuery.

טבלאות Delta Lake תומכות גם בכל התכונות של BigLake כשמגדירים אותן כטבלאות BigLake.

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

  1. בדף לבחירת הפרויקט במסוף Cloud de Confiance , בוחרים פרויקט ב- Cloud de Confiance או יוצרים אותו.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Cloud de Confiance .

  3. מפעילים את BigQuery Connection API ואת BigQuery Reservation API.

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    הפעלת ממשקי ה-API

  4. במסוף Cloud de Confiance , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

  5. מוודאים שיש לכם מערך נתונים ב-BigQuery.

  6. מוודאים שהגרסה של Google Cloud SDK היא 366.0.0 ואילך:

    gcloud version
    

    במקרה הצורך, מעדכנים את Google Cloud SDK.

  7. יוצרים קישור למשאבים ב-Cloud על סמך מקור הנתונים החיצוני, ומעניקים לקישור הזה גישה ל-Cloud Storage. אם אין לכם את ההרשאות המתאימות ליצירת חיבור, אתם יכולים לבקש ממנהל BigQuery ליצור חיבור ולשתף אותו איתכם.

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

כדי ליצור טבלת Delta Lake, צריך את ההרשאות הבאות:

  • bigquery.tables.create
  • bigquery.connections.delegate

ההרשאות האלה כלולות בתפקיד המוגדר מראש של ניהול זהויות והרשאות גישה (IAM) ב-BigQuery Admin ‏(roles/bigquery.admin).

אם אתם לא משתמשים בתפקיד הזה, אתם צריכים לבקש מהאדמין להעניק לכם את ההרשאות האלה או ליצור בשבילכם את טבלת Delta Lake.

בנוסף, כדי לאפשר למשתמשי BigQuery להריץ שאילתות בטבלה, לחשבון השירות שמשויך לחיבור צריכות להיות ההרשאה והגישה הבאות:

  • תפקיד BigQuery Viewer (roles/bigquery.viewer)
  • התפקיד BigQuery Connection User (roles/bigquery.connectionUser)
  • גישה לקטגוריה של Cloud Storage שמכילה את הנתונים

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

יצירת טבלאות באמצעות Delta Lake

כדי ליצור טבלאות Delta Lake, פועלים לפי השלבים הבאים.

SQL

משתמשים בהצהרה CREATE EXTERNAL TABLE כדי ליצור את טבלת Delta Lake:

CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  format ="DELTA_LAKE",
  uris=['DELTA_TABLE_GCS_BASE_PATH']);

מחליפים את הערכים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
  • DATASET: מערך הנתונים ב-BigQuery שמכיל את טבלת Delta Lake
  • DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake
  • REGION: האזור שמכיל את החיבור ליצירת טבלת Delta Lake, לדוגמה us
  • CONNECTION_ID: מזהה החיבור, לדוגמה: myconnection

    כשמציגים את פרטי החיבור במסוף Cloud de Confiance , מזהה החיבור הוא הערך בקטע האחרון של מזהה החיבור המלא שמוצג ב'מזהה החיבור' – לדוגמה, projects/myproject/locations/connection_location/connections/myconnection.

  • DELTA_TABLE_GCS_BASE_PATH: הקידומת של טבלת Delta Lake

BQ

בסביבת שורת פקודה, משתמשים בפקודה bq mk כדי ליצור את טבלת Delta Lake:

bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

מחליפים את הערכים הבאים:

  • DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה
  • PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
  • DATASET: מערך הנתונים ב-BigQuery שמכיל את טבלת Delta Lake
  • DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake

REST

משתמשים ב-BigQuery API כדי ליצור טבלת Delta Lake על ידי קריאה לשיטת ה-API‏ tables.insert:

REQUEST='{
  "autodetect": true,
  "externalDataConfiguration": {
  "sourceFormat": "DELTA_LAKE",
  "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
  "sourceUris": [
    "DELTA_TABLE_GCS_BASE_PATH"
  ],
 },
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'

echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true

מחליפים את הערכים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
  • REGION: האזור שמכיל את החיבור ליצירת טבלת Delta Lake, לדוגמה us
  • CONNECTION_ID: מזהה החיבור, לדוגמה: myconnection

    כשמציגים את פרטי החיבור במסוף Cloud de Confiance , מזהה החיבור הוא הערך בקטע האחרון של מזהה החיבור המלא שמוצג ב'מזהה החיבור' – לדוגמה, projects/myproject/locations/connection_location/connections/myconnection.

  • DELTA_TABLE_GCS_BASE_PATH: הקידומת של טבלת Delta Lake

  • DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake

  • DATASET: מערך הנתונים ב-BigQuery שמכיל את טבלת Delta Lake

כשיוצרים טבלאות Delta Lake, הקידומת Delta Lake משמשת כמזהה ה-URI של הטבלה. לדוגמה, אם יש לכם טבלה עם יומנים בדלי gs://bucket/warehouse/basictable/_delta_log, מזהה ה-URI של הטבלה הוא gs://bucket/warehouse/basictable. כשמריצים שאילתות על טבלת Delta Lake,‏ BigQuery קורא את הנתונים שמתחת לקידומת כדי לזהות את הגרסה הנוכחית של הטבלה, ואז מחשב את המטא-נתונים ואת הקבצים של הטבלה.

אפשר ליצור טבלאות חיצוניות של Delta Lake בלי חיבור, אבל לא מומלץ לעשות את זה מהסיבות הבאות:

  • יכול להיות שהמשתמשים ייתקלו בשגיאות ACCESS_DENIED כשהם ינסו לגשת לקבצים ב-Cloud Storage.
  • תכונות כמו בקרת גישה פרטנית זמינות רק בטבלאות BigLake של Delta Lake.

עדכון של טבלאות Delta Lake

כדי לעדכן (לרענן) את הסכימה של טבלאות Delta Lake, פועלים לפי השלבים הבאים.

BQ

בסביבת שורת פקודה, משתמשים בפקודה bq update כדי לעדכן (לרענן) את הסכימה של טבלת Delta Lake:

bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

מחליפים את הערכים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
  • DATASET: מערך הנתונים ב-BigQuery שמכיל את טבלת Delta Lake
  • DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake

REST

משתמשים ב-BigQuery API כדי לעדכן טבלת Delta Lake על ידי קריאה לשיטת ה-API‏ tables.patch:

REQUEST='{
  "externalDataConfiguration": {
    "sourceFormat": "DELTA_LAKE",
    "sourceUris": [
      "DELTA_TABLE_GCS_BASE_PATH"
    ],
    "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
    "autodetect": true
  }
}'
echo $REQUEST |curl -X PATCH -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables/DELTALAKE_TABLE_NAME?autodetect_schema=true

מחליפים את הערכים הבאים:

  • DELTA_TABLE_GCS_BASE_PATH: הקידומת של טבלת Delta Lake
  • PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
  • REGION: האזור שמכיל את החיבור ליצירת טבלת Delta Lake, לדוגמה us
  • CONNECTION_ID: מזהה החיבור, לדוגמה: myconnection

    כשמציגים את פרטי החיבור במסוף Cloud de Confiance , מזהה החיבור הוא הערך בקטע האחרון של מזהה החיבור המלא שמוצג ב'מזהה החיבור' – לדוגמה, projects/myproject/locations/connection_location/connections/myconnection.

  • DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake

  • DATASET: מערך הנתונים ב-BigQuery שמכיל את טבלת Delta Lake

הרצת שאילתות על טבלאות Delta Lake

אחרי שיוצרים טבלת Delta Lake BigLake, אפשר להריץ עליה שאילתות באמצעות תחביר GoogleSQL, בדיוק כמו בטבלה ב-BigQuery רגילה. לדוגמה:

SELECT field1, field2 FROM mydataset.my_cloud_storage_table;

מידע נוסף זמין במאמר בנושא שאילתות על נתונים ב-Cloud Storage בטבלאות BigLake.

חיבור חיצוני שמשויך לחשבון שירות משמש לחיבור למאגר הנתונים. מכיוון שחשבון השירות מאחזר נתונים ממאגר הנתונים, המשתמשים צריכים גישה רק לטבלת Delta Lake.

מיפוי נתונים

‫BigQuery ממיר את סוגי הנתונים של Delta Lake לסוגי נתונים של BigQuery, כמו שמוצג בטבלה הבאה:

סוג Delta Lake סוג BigQuery
boolean BOOL
byte INT64
int INT64
long INT64
float FLOAT64
double FLOAT64
Decimal(P/S) NUMERIC או BIG_NUMERIC בהתאם לרמת הדיוק
date DATE
time TIME
timestamp (not partition column) TIMESTAMP
timestamp (partition column) DATETIME
string STRING
binary BYTES
array<Type> ARRAY<Type>
struct STRUCT
map<KeyType, ValueType> ARRAY<Struct<key KeyType, value ValueType>>

מגבלות

לטבלאות Delta Lake יש מגבלות של טבלאות BigLake וגם את המגבלות הבאות:

  • תמיכה ב-Delta Lake reader version 3 עם וקטורים של מחיקת נתיבים יחסיים ומיפוי עמודות.
  • אין תמיכה בנקודות ביקורת של Delta Lake V2.
  • צריך לציין את גרסת הקורא בקובץ האחרון של רשומת היומן. לדוגמה, אם מוסיפים טבלאות חדשות, צריך לכלול בהן את התג 00000..0.json.
  • אין תמיכה בפעולות של סימון נתונים שהשתנו (CDC). המערכת מתעלמת מכל פעולות ה-CDC הקיימות.
  • הסכימה מזוהה אוטומטית. אין תמיכה בשינוי הסכימה באמצעות BigQuery.
  • שמות העמודות בטבלה צריכים לעמוד בהגבלות על שמות עמודות ב-BigQuery.
  • אין תמיכה בתצוגות מהותיות.
  • אין תמיכה ב-Read API ב-Delta Lake.
  • סוג הנתונים timestamp_ntz לא נתמך בטבלאות Delta Lake BigLake.

פתרון בעיות

בקטע הזה מפורט מידע שיעזור לכם להשתמש בטבלאות BigLake של Delta Lake. לקבלת עזרה כללית יותר בפתרון בעיות בשאילתות ב-BigQuery, אפשר לעיין במאמר פתרון בעיות בשאילתות.

זמן קצוב לתפוגה של שאילתה ושגיאות שקשורות למשאבים

בודקים את ספריית היומנים (gs://bucket/warehouse/basictable/_delta_log) של טבלת Delta Lake ומחפשים קובצי JSON עם מספר גרסה גדול יותר מנקודת הבדיקה הקודמת. אפשר לקבל את מספר הגרסה על ידי הצגת רשימת הספרייה או בדיקה של הקובץ _delta_log/_last_checkpoint. קבצי JSON שגדולים מ-10MiB עלולים להאט את הרחבת הטבלה, מה שעלול להוביל לפסק זמן ולבעיות במשאבים. כדי לפתור את הבעיה, משתמשים בפקודה הבאה כדי ליצור נקודת ביקורת חדשה, כך שהשאילתות ידלגו על קריאת קובצי ה-JSON:

  spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.checkpointInterval' = '1')");

לאחר מכן, המשתמשים יכולים להשתמש באותה פקודה כדי לאפס את מרווח הזמן בין נקודות הבדיקה לערך ברירת המחדל 10, או לערך שמונע מצב שבו יש יותר מ-50 MB של קובצי JSON בין נקודות הבדיקה.

שם העמודה לא חוקי

מוודאים שמיפוי העמודות מופעל בטבלת Delta Lake. מיפוי עמודות נתמך בגרסה 2 ואילך של Reader. ב-Reader גרסה 1, מגדירים את delta.columnMapping.mode ל-name באמצעות הפקודה הבאה:

spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.columnMapping.mode' = 'name', 'delta.minReaderVersion' = '3', 'delta.minWriterVersion' = '7')");

אם שם העמודה הלא תקין עומד בדרישות של הגבלות על שמות עמודות גמישים, צריך לפנות אל Cloud Customer Care או אל biglake-help@google.com.

שגיאות שקשורות לדחיית גישה

כדי לאבחן בעיות בטבלאות Delta Lake BigLake, כדאי לבדוק את הדברים הבאים:

ביצועים

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

  • אפשר להשתמש בכלי עזר של Delta Lake כדי לדחוס את קובצי הנתונים הבסיסיים ולהסיר קבצים מיותרים, כמו נתונים ומטא-נתונים.

  • מוודאים שההגדרה delta.checkpoint.writeStatsAsStruct היא true.

  • מוודאים שמשתנים שנמצאים בשימוש תדיר במשפטי תנאי נמצאים בעמודות של המחיצה.

יכול להיות שיהיה כדאי להשתמש בהגדרות ובתכונות נוספות במערכי נתונים גדולים (מעל 100 TB). אם השלבים הקודמים לא פתרו את הבעיות, כדאי לפנות אל שירות הלקוחות או אל biglake-help@google.com, במיוחד אם מערכי הנתונים גדולים מ-100 TB.