יצירת טבלאות חיצוניות ב-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.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery Connection and BigQuery Reservation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, activate Cloud Shell.
מוודאים שיש לכם מערך נתונים ב-BigQuery.
מוודאים שהגרסה של Google Cloud SDK היא 366.0.0 ואילך:
gcloud versionבמקרה הצורך, מעדכנים את Google Cloud SDK.
יוצרים חיבור למשאב בענן על סמך מקור הנתונים החיצוני, ומעניקים לחיבור הזה גישה ל-Cloud Storage. אם אין לכם את ההרשאות המתאימות ליצירת חיבור, בקשו ממנהל BigQuery ליצור חיבור ולשתף אותו איתכם.
bigquery.tables.createbigquery.connections.delegate- תפקיד BigQuery Viewer (
roles/bigquery.viewer) - התפקיד BigQuery Connection User (
roles/bigquery.connectionUser) - גישה לקטגוריה של Cloud Storage שמכילה את הנתונים האלה
- PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
- DATASET: מערך הנתונים ב-BigQuery שיכיל את טבלת Delta Lake
- DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake
- REGION: האזור שמכיל את החיבור ליצירת טבלת Delta Lake, לדוגמה
us CONNECTION_ID: מזהה החיבור, לדוגמה:
myconnectionכשמציגים את פרטי החיבור במסוף Google Cloud , מזהה החיבור הוא הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור – לדוגמה,
projects/myproject/locations/connection_location/connections/myconnection.DELTA_TABLE_GCS_BASE_PATH: הקידומת של טבלת Delta Lake
- DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה
- PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
- DATASET: מערך הנתונים ב-BigQuery שיכיל את טבלת Delta Lake
- DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake
- PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
- REGION: האזור שמכיל את החיבור ליצירת טבלת Delta Lake, לדוגמה
us CONNECTION_ID: מזהה החיבור, לדוגמה:
myconnectionכשמציגים את פרטי החיבור במסוף Google Cloud , מזהה החיבור הוא הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור – לדוגמה,
projects/myproject/locations/connection_location/connections/myconnection.DELTA_TABLE_GCS_BASE_PATH: הקידומת של טבלת Delta Lake
DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake
DATASET: מערך הנתונים ב-BigQuery שיכיל את טבלת Delta Lake
- יכול להיות שהמשתמשים ייתקלו בשגיאות
ACCESS_DENIEDכשהם ינסו לגשת לקבצים ב-Cloud Storage. - תכונות כמו בקרת גישה פרטנית זמינות רק בטבלאות BigLake של Delta Lake.
- PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
- DATASET: מערך הנתונים ב-BigQuery שיכיל את טבלת Delta Lake
- DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake
- DELTA_TABLE_GCS_BASE_PATH: הקידומת של טבלת Delta Lake
- PROJECT_ID: המזהה של הפרויקט שבו רוצים ליצור את טבלת Delta Lake
- REGION: האזור שמכיל את החיבור ליצירת טבלת Delta Lake, לדוגמה
us CONNECTION_ID: מזהה החיבור, לדוגמה:
myconnectionכשמציגים את פרטי החיבור במסוף Google Cloud , מזהה החיבור הוא הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור – לדוגמה,
projects/myproject/locations/connection_location/connections/myconnection.DELTALAKE_TABLE_NAME: השם של טבלת Delta Lake
DATASET: מערך הנתונים ב-BigQuery שיכיל את טבלת Delta Lake
- תמיכה ב-Delta Lake reader version 3 עם וקטורים של מחיקת נתיבים יחסיים ומיפוי עמודות.
- אין תמיכה בנקודות ביקורת של Delta Lake V2.
- צריך לציין את גרסת הקורא בקובץ האחרון של רשומת היומן. לדוגמה, בטבלאות חדשות צריך להשתמש ב-
00000..0.json. - אין תמיכה בפעולות של סימון נתונים שהשתנו (CDC). המערכת מתעלמת מכל פעולות ה-CDC הקיימות.
- הסכימה מזוהה אוטומטית. אין תמיכה בשינוי הסכימה באמצעות BigQuery.
- שמות העמודות בטבלה צריכים לעמוד בדרישות של BigQuery בנוגע לשמות של עמודות.
- אין תמיכה בתצוגות חומריות.
- אין תמיכה ב-Read API ב-Delta Lake.
- סוג הנתונים
timestamp_ntzלא נתמך בטבלאות Delta Lake BigLake. מוודאים שאתם משתמשים בטבלאות Delta Lake BigLake (עם חיבור).
למשתמשים יש את ההרשאה הנדרשת.
אפשר להשתמש בכלי עזר של Delta Lake כדי לדחוס את קובצי הנתונים הבסיסיים ולהסיר קבצים מיותרים, כמו נתונים ומטא-נתונים.
מוודאים שהערך של
delta.checkpoint.writeStatsAsStructהואtrue.מוודאים שמשתנים שנמצאים בשימוש תדיר בסעיפי תנאי נמצאים בעמודות של המחיצה.
התפקידים הנדרשים
כדי ליצור טבלת Delta Lake, צריך את ההרשאות הבאות:
ההרשאות האלה כלולות בתפקיד המוגדר מראש 'אדמין של BigQuery' (roles/bigquery.admin) בניהול זהויות והרשאות גישה.
אם אתם לא משתמשים בתפקיד הזה, אתם צריכים לבקש מהאדמין להעניק לכם את ההרשאות האלה או ליצור בשבילכם את טבלת Delta Lake.
בנוסף, כדי לאפשר למשתמשי BigQuery להריץ שאילתות בטבלה, לחשבון השירות שמשויך לחיבור צריכות להיות ההרשאה והגישה הבאות:
במאמר תפקידים והרשאות מוגדרים מראש מוסבר בהרחבה על תפקידים והרשאות ב-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']);
מחליפים את הערכים הבאים:
BQ
בסביבת שורת פקודה, משתמשים בפקודה bq mk כדי ליצור את טבלת Delta Lake:
bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
מחליפים את הערכים הבאים:
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
מחליפים את הערכים הבאים:
כשיוצרים טבלאות Delta Lake, הקידומת Delta Lake משמשת כמזהה ה-URI של הטבלה. לדוגמה, אם יש לכם טבלה עם יומנים בדלי gs://bucket/warehouse/basictable/_delta_log, ה-URI של הטבלה הוא gs://bucket/warehouse/basictable. כשמריצים שאילתות בטבלת Delta Lake, BigQuery קורא את הנתונים שמתחת לקידומת כדי לזהות את הגרסה הנוכחית של הטבלה, ואז מחשב את המטא-נתונים ואת הקבצים של הטבלה.
אפשר ליצור טבלאות חיצוניות של Delta Lake בלי חיבור, אבל לא מומלץ לעשות את זה מהסיבות הבאות:
עדכון של טבלאות Delta Lake
כדי לעדכן (לרענן) את הסכימה של טבלאות Delta Lake, פועלים לפי השלבים הבאים.
BQ
בסביבת שורת פקודה, משתמשים בפקודה bq update כדי לעדכן (לרענן) את הסכימה של טבלת Delta Lake:
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
מחליפים את הערכים הבאים:
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 Lake
אחרי שיוצרים טבלת BigLake של Delta Lake, אפשר להריץ עליה שאילתות באמצעות תחביר 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 וגם את המגבלות הבאות:
פתרון בעיות
בקטע הזה מוסבר איך להשתמש בטבלאות 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, או לערך שמונע יצירה של קובצי JSON בגודל של יותר מ-50 MB בין נקודות הבדיקה.
שם העמודה לא חוקי
מוודאים שמיפוי העמודות מופעל בטבלת 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, בודקים את הדברים הבאים:
ביצועים
כדי לשפר את ביצועי השאילתות, אפשר לנסות את השלבים הבאים:
יכול להיות שיהיה יתרון בשימוש בהגדרות ובתכונות נוספות במערכי נתונים גדולים (מעל 100 TB). אם השלבים הקודמים לא פותרים את הבעיות, כדאי לפנות אל שירות הלקוחות או אל biglake-help@google.com, במיוחד אם מערכי הנתונים גדולים מ-100 TB.