יצירת טבלאות חיצוניות של 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.
לפני שמתחילים
-
בדף לבחירת הפרויקט במסוף Cloud de Confiance , בוחרים פרויקט ב- Cloud de Confiance או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
מפעילים את BigQuery Connection API ואת BigQuery Reservation API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים -
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
מוודאים שיש לכם מערך נתונים ב-BigQuery.
מוודאים שהגרסה של Google Cloud SDK היא 366.0.0 ואילך:
gcloud versionבמקרה הצורך, מעדכנים את Google Cloud SDK.
יוצרים קישור למשאבים ב-Cloud על סמך מקור הנתונים החיצוני, ומעניקים לקישור הזה גישה ל-Cloud Storage. אם אין לכם את ההרשאות המתאימות ליצירת חיבור, אתם יכולים לבקש ממנהל BigQuery ליצור חיבור ולשתף אותו איתכם.
התפקידים הנדרשים
כדי ליצור טבלת Delta Lake, צריך את ההרשאות הבאות:
bigquery.tables.createbigquery.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 BigLake (עם חיבור).
למשתמשים יש את ההרשאה הנדרשת.
ביצועים
כדי לשפר את ביצועי השאילתות, אפשר לנסות את השלבים הבאים:
אפשר להשתמש בכלי עזר של Delta Lake כדי לדחוס את קובצי הנתונים הבסיסיים ולהסיר קבצים מיותרים, כמו נתונים ומטא-נתונים.
מוודאים שההגדרה
delta.checkpoint.writeStatsAsStructהיאtrue.מוודאים שמשתנים שנמצאים בשימוש תדיר במשפטי תנאי נמצאים בעמודות של המחיצה.
יכול להיות שיהיה כדאי להשתמש בהגדרות ובתכונות נוספות במערכי נתונים גדולים (מעל 100 TB). אם השלבים הקודמים לא פתרו את הבעיות, כדאי לפנות אל שירות הלקוחות או אל biglake-help@google.com, במיוחד אם מערכי הנתונים גדולים מ-100 TB.