טרנספורמציה של נתונים באמצעות שפת טיפול בנתונים (DML)
שפת הטיפול בנתונים (DML) ב-BigQuery מאפשרת לעדכן, להוסיף ולמחוק נתונים מטבלאות ב-BigQuery.
אפשר להריץ פקודות DML בדיוק כמו שמריצים פקודת SELECT, בתנאים הבאים:
- צריך להשתמש ב-GoogleSQL. כדי להפעיל את GoogleSQL, קראו את המאמר החלפת דיאלקטים של SQL.
- אי אפשר לציין טבלת יעד לשאילתה.
במאמר חישוב גודל השאילתה על פי דרישה מוסבר איך לחשב את מספר הבייטים שמעובדים על ידי פקודת DML.
מגבלות
כל פקודת DML יוזמת טרנזקציה משתמעת, כלומר השינויים שבוצעו על ידי הפקודה נשמרים באופן אוטומטי בסוף כל פקודת DML שהושלמה בהצלחה.
אי אפשר לשנות שורות שנכתבו לאחרונה באמצעות BigQuery Storage Write API (REST) באמצעות שפת טיפול בנתונים (DML), כמו הצהרות
UPDATE,DELETE,MERGEאוTRUNCATE. הכתיבות האחרונות הן אלה שהתרחשו ב-30 הדקות האחרונות. אפשר להמשיך לשנות את כל שאר השורות בטבלה באמצעות הצהרותUPDATE,DELETE,MERGEאוTRUNCATE. יכול להיות שיחלפו עד 90 דקות עד שהנתונים שהועברו בסטרימינג יהיו זמינים לפעולות העתקה.לחלופין, אפשר לשנות שורות שנכתבו לאחרונה באמצעות Storage Write API (gRPC) באמצעות הצהרות
UPDATE,DELETEאוMERGE. מידע נוסף זמין במאמר שימוש בשפת טיפול בנתונים (DML) עם נתונים שהועברו בסטרימינג לאחרונה.שאילתות משנה מתואמות בתוך
when_clause, search_condition,merge_update_clauseאוmerge_insert_clauseלא נתמכות בהצהרותMERGE.בשאילתות שמכילות הצהרות DML, אי אפשר להשתמש בטבלת תווים כלליים לחיפוש כיעד של השאילתה. לדוגמה, אפשר להשתמש בטבלת תווים כלליים לחיפוש בסעיף
FROMשל שאילתתUPDATE, אבל אי אפשר להשתמש בה כיעד של פעולתUPDATE.
פקודות DML
בקטעים הבאים מתוארים הסוגים השונים של פקודות DML ואיך משתמשים בהם.
הצהרה של INSERT
משתמשים בהצהרה INSERT כדי להוסיף שורות חדשות לטבלה קיימת. בדוגמה הבאה מוסיפים שורות חדשות לטבלה dataset.Inventory עם ערכים שצוינו במפורש.
INSERT dataset.Inventory (product, quantity)
VALUES('whole milk', 10),
('almond milk', 20),
('coffee beans', 30),
('sugar', 0),
('matcha', 20),
('oat milk', 30),
('chai', 5)
/+-------------------+----------+
| product | quantity |
+-------------------+----------+
| almond milk | 20 |
| chai | 5 |
| coffee beans | 30 |
| matcha | 20 |
| oat milk | 30 |
| sugar | 0 |
| whole milk | 10 |
+-------------------+----------+/
מידע נוסף על הצהרות INSERT זמין במאמר הצהרת INSERT.
הצהרה של DELETE
כדי למחוק שורות בטבלה, משתמשים בהצהרה DELETE. בדוגמה הבאה נמחקות כל השורות בטבלה dataset.Inventory שכוללות את הערך 0 בעמודה quantity.
DELETE dataset.Inventory
WHERE quantity = 0
/+-------------------+----------+
| product | quantity |
+-------------------+----------+
| almond milk | 20 |
| chai | 5 |
| coffee beans | 30 |
| matcha | 20 |
| oat milk | 30 |
| whole milk | 10 |
+-------------------+----------+/
כדי למחוק את כל השורות בטבלה, צריך להשתמש בהצהרה TRUNCATE TABLE. למידע נוסף על הצהרות DELETE, קראו את המאמר הצהרת DELETE.
הצהרה של TRUNCATE
משתמשים בהצהרה TRUNCATE כדי להסיר את כל השורות מטבלה, אבל להשאיר את המטא-נתונים של הטבלה ללא שינוי, כולל הסכימה, התיאור והתוויות של הטבלה. בדוגמה הבאה, כל השורות מוסרות מהטבלה dataset.Inventory.
TRUNCATE dataset.Inventory
כדי למחוק שורות ספציפיות בטבלה, צריך להשתמש בהצהרה DELETE. מידע נוסף על ההצהרה TRUNCATE זמין במאמר ההצהרה TRUNCATE.
הצהרה של UPDATE
כדי לעדכן שורות קיימות בטבלה, משתמשים בהצהרה UPDATE. ההצהרה UPDATE חייבת לכלול גם את מילת המפתח WHERE כדי לציין תנאי. בדוגמה הבאה, הערך של quantity בשורות של מוצרים שמכילים את המחרוזת milk יופחת ב-10.
UPDATE dataset.Inventory
SET quantity = quantity - 10,
WHERE product LIKE '%milk%'
/+-------------------+----------+
| product | quantity |
+-------------------+----------+
| almond milk | 10 |
| chai | 5 |
| coffee beans | 30 |
| matcha | 20 |
| oat milk | 20 |
| whole milk | 0 |
+-------------------+----------+/
הצהרות UPDATE יכולות לכלול גם משפטי FROM כדי לכלול טבלאות מצורפות.
למידע נוסף על הצהרות UPDATE, ראו הצהרת UPDATE.
הצהרה של MERGE
ההצהרה MERGE משלבת את הפעולות INSERT, UPDATE ו-DELETE בהצהרה אחת, ומבצעת את הפעולות באופן אטומי כדי למזג נתונים מטבלה אחת לאחרת. למידע נוסף ולדוגמאות לגבי ההצהרה MERGE, קראו את המאמר ההצהרה MERGE.
משימות בו-זמניות
BigQuery מנהל את בו-זמניות הביצוע של פקודות DML שמוסיפות, משנות או מוחקות שורות בטבלה.
בו-זמניות של INSERT DML
בכל תקופה של 24 שעות, 1,500 ההצהרות הראשונות של INSERT מופעלות מיד אחרי שהן נשלחות. אחרי שמגיעים למגבלה הזו, אפשר להריץ בו-זמנית רק 10 הצהרות INSERT שכותבות לטבלה. הצהרות INSERT נוספות מתווספות לתור של PENDING. אפשר להוסיף לתור עד 100 הצהרות INSERT לטבלה בכל זמן נתון. כשמשפט INSERT מסתיים, המשפט הבא של INSERT מוסר מהתור ומופעל.
אם אתם צריכים להריץ פקודות DML INSERT בתדירות גבוהה יותר, כדאי להעביר נתונים בסטרימינג לטבלה באמצעות Storage Write API (gRPC).
בו-זמניות של UPDATE, DELETE, MERGE DML
הצהרות ה-DML UPDATE, DELETE ו-MERGE נקראות הצהרות DML לשינוי. אם שולחים פקודת DML אחת או יותר לשינוי טבלה, בזמן שמשימות DML אחרות לשינוי הטבלה עדיין פועלות (או בהמתנה), המערכת של BigQuery מריצה עד 2 מהן בו-זמנית, ואחרי כן עד 20 משימות נוספות נכנסות לתור כ-PENDING. כשהמשימה הקודמת מסתיימת, המשימה הבאה בתור יוצאת מהתור ומתחילה לפעול. פקודות DML לשינוי נתונים שנמצאות בתור משתפות תור לכל טבלה באורך מקסימלי של 20. הצהרות נוספות מעבר לאורך התור המקסימלי של כל טבלה נכשלות, ומוצגת הודעת השגיאה: Resources
exceeded during query execution: Too many DML statements outstanding against
table PROJECT_ID:DATASET.TABLE, limit is 20.
משימות DML אינטראקטיביות בעדיפות גבוהה שממתינות בתור יותר מ-7 שעות נכשלות, ומוצגת הודעת השגיאה הבאה:
DML statement has been queued for too long
התנגשויות בין פקודות DML
פקודות DML לשינוי שפועלות בו-זמנית בטבלה גורמות להתנגשויות בין פקודות DML כשהפקודות מנסות לשנות את אותו המחיצה. ההצהרות יצליחו כל עוד הן לא משנות את אותה מחיצה. BigQuery מנסה להריץ מחדש הצהרות שנכשלו עד שלוש פעמים.
פקודת DML מסוג
INSERTשמוסיפה שורות לטבלה לא מתנגשת עם פקודת DML אחרת שפועלת בו-זמנית.פקודת DML מסוג
MERGEלא מתנגשת עם פקודות DML אחרות שפועלות בו-זמנית, כל עוד הפקודה רק מוסיפה שורות ולא מוחקת או מעדכנת שורות קיימות. היא יכולה לכלול הצהרותMERGEעם משפטיUPDATEאוDELETE, כל עוד המשפטים האלה לא מופעלים כשהשאילתה פועלת.הוספה אוטומטית לתור של פקודות DML חלה רק על פקודות DML עצמאיות שפועלות מחוץ לטרנזקציה עם כמה פקודות. פקודות DML לשינוי בתוך טרנזקציה עם כמה פקודות רוכשות נעילה ברמת הטבלה, במקום לנעול מחיצות נפרדות. טרנזקציות בו-זמניות עם כמה הצהרות שמשנות את אותה טבלה לא נכנסות לתור ונכשלות מיד, גם אם הן מטרגטות מחיצות שונות. אם פרוצדורה מאוחסנת או שאילתה עם כמה הצהרות מריצה רק פקודת DML אחת לשינוי, כמו פקודת
MERGE, אל תעטפו את הפקודה בפקודותBEGIN TRANSACTIONו-COMMIT TRANSACTION. מידע נוסף זמין במאמר טרנזקציות בו-זמניות.
DML פרטני
DML ברזולוציה גבוהה הוא שיפור בביצועים שנועד לייעל את ההרצה של הצהרות UPDATE, DELETE ו-MERGE (שנקראות גם הצהרות DML לשינוי נתונים).
שיקולי ביצועים
בלי להפעיל DML ברזולוציה גבוהה, מוטציות DML מתבצעות ברמת קבוצת הקבצים, מה שעלול להוביל לשכתובים לא יעילים של נתונים, במיוחד במוטציות חסכוניות (sparse). זה יכול להוביל לצריכת משבצות נוספת ולזמני ביצוע ארוכים יותר.
DML ברזולוציה גבוהה הוא שיפור בביצועים שנועד לייעל את פקודות ה-DML שמשנות נתונים. הוא מציג גישה מפורטת יותר שמטרתה לצמצם את כמות הנתונים שצריך לשכתב ברמת קבוצת הקבצים. הגישה הזו יכולה לצמצם באופן משמעותי את זמן העיבוד, הקלט/פלט והמשבצת שנדרשים למוטציות של משימות DML.
כשמשתמשים ב-DML ברמת פירוט גבוהה, חשוב להביא בחשבון כמה שיקולים שקשורים לביצועים:
- פעולות DML מפורטות מעבדות נתונים שנמחקו בגישה משולבת, שמחלקת את עלויות הכתיבה מחדש בין מספר רב של שינויים בטבלה. כל פעולת DML עשויה לעבד חלק מהנתונים שנמחקו, ולאחר מכן להעביר את עיבוד הנתונים שנמחקו הנותרים לתהליך איסוף אשפה ברקע. למידע נוסף, קראו את השיקולים לגבי נתונים שנמחקו.
- בטבלאות עם פעולות DML תכופות לשינוי נתונים, יכול להיות שתהיה עלייה בזמן האחזור של שאילתות
SELECTומשימות DML הבאות. כדי להעריך את ההשפעה של הפעלת התכונה הזו, צריך להשוות את הביצועים של רצף ריאלי של פעולות DML וקריאות עוקבות. - הפעלת DML ברמת פירוט גבוהה לא תפחית את כמות הבייטים שנסרקו בפקודת ה-DML שמשנה את הנתונים.
הפעלת DML ברמת פירוט גבוהה
כדי להפעיל DML ברמת פירוט גבוהה, מגדירים את אפשרות הטבלה enable_fine_grained_mutations לערך TRUE כשמריצים הצהרת DDL מסוג CREATE TABLE או ALTER TABLE.
כדי ליצור טבלה חדשה עם DML פרטני, משתמשים בהצהרה CREATE TABLE:
CREATE TABLE mydataset.mytable ( product STRING, inventory INT64) OPTIONS(enable_fine_grained_mutations = TRUE);
כדי לשנות טבלה קיימת באמצעות DML ברמת פירוט גבוהה, משתמשים בהצהרת ALTER TABLE:
ALTER TABLE mydataset.mytable SET OPTIONS(enable_fine_grained_mutations = TRUE);
כדי לשנות את כל הטבלאות הקיימות במערך נתונים באמצעות DML פרטני, משתמשים בהצהרה ALTER TABLE:
FOR record IN
(SELECT CONCAT(table_schema, '.', table_name) AS table_path
FROM mydataset.INFORMATION_SCHEMA.TABLES)
DO
EXECUTE IMMEDIATE
"ALTER TABLE " || record.table_path || " SET OPTIONS(enable_fine_grained_mutations = TRUE)";
END FOR;אחרי שמגדירים את האפשרות enable_fine_grained_mutations לערך TRUE, פקודות DML לשינוי נתונים מופעלות עם יכולות DML מפורטות ומשתמשות בתחביר הקיים של פקודות DML.
כדי לבדוק אם בטבלה הופעל DML ברמה מפורטת, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.TABLES.
בדוגמה הבאה נבדק באילו טבלאות במערך נתונים הופעלה התכונה הזו:
SELECT table_schema AS datasetId, table_name AS tableId, is_fine_grained_mutations_enabled FROM DATASET_NAME.INFORMATION_SCHEMA.TABLES;
מחליפים את DATASET_NAME בשם של מערך הנתונים שבו רוצים לבדוק אם יש טבלאות שמופעל בהן DML ברמת פירוט גבוהה.
השבתת DML ברמת פירוט גבוהה
כדי להשבית DML ברמת פירוט גבוהה בטבלה קיימת, משתמשים בהצהרה ALTER TABLE.
ALTER TABLE mydataset.mytable SET OPTIONS(enable_fine_grained_mutations = FALSE);
כשמשביתים את ה-DML המפורט, יכול להיות שיעבור קצת זמן עד שכל הנתונים שנמחקו יעובדו באופן מלא. למידע נוסף, קראו את המאמר שיקולים לגבי נתונים שנמחקו. כתוצאה מכך, יכול להיות שהמגבלות המפורטות של DML יישארו בתוקף עד שהתהליך יסתיים.
תמחור
הפעלת DML ברמת פירוט גבוהה בטבלה יכולה להיות כרוכה בעלויות נוספות. העלויות האלה כוללות:
- עלויות האחסון ב-BigQuery לאחסון המטא-נתונים הנוספים של המוטציות שמשויכים לפעולות DML ברמת פירוט גבוהה. עלות האחסון בפועל תלויה בכמות הנתונים שמשתנים, אבל ברוב המקרים היא צפויה להיות זניחה בהשוואה לגודל הטבלה עצמה.
- עלויות המחשוב ב-BigQuery לעיבוד נתונים שנמחקו באמצעות משימות איסוף אשפה שהועברו, ושאילתות
SELECTעוקבות לעיבוד מטא-נתונים נוספים של מחיקה שעדיין לא נאספו.
אתם יכולים להשתמש בהזמנות של BigQuery כדי להקצות משאבי מחשוב ייעודיים של BigQuery לעיבוד משימות של נתונים שנמחקו. ההזמנות מאפשרות להגדיר מגבלה על עלות ביצוע הפעולות האלה. הגישה הזו שימושית במיוחד, ולעיתים קרובות מומלצת, לטבלאות גדולות מאוד עם פעולות DML תכופות לשינוי נתונים ברמת פירוט גבוהה. אחרת, עלויות התמחור על פי דרישה יהיו גבוהות בגלל המספר הגדול של בייטים שעובדו במהלך כל משימת עיבוד של נתונים שנמחקו.
משימות עיבוד נתונים שנמחקו, שהועברו מ-DML ברזולוציה גבוהה, נחשבות למשימות ברקע וצריך להשתמש בהן בסוג הקצאת המאגר BACKGROUND, ולא בסוג הקצאת המאגר QUERY.
בפרויקטים שבהם מתבצעות פעולות DML מפורטות בלי הקצאה של BACKGROUND, המערכת משתמשת בתמחור על פי דרישה כדי לעבד את משימות הנתונים שנמחקו.
| פעולה | תמחור על פי דרישה | תמחור מבוסס-קיבולת |
|---|---|---|
| פקודות DML לשינוי נתונים | משתמשים בגודל DML סטנדרטי כדי לקבוע את החישובים של הבייטים שנסרקו על פי דרישה.
הפעלת DML ברמת פירוט גבוהה לא תפחית את כמות הבייטים שנסרקו בהצהרת ה-DML עצמה. |
צריכת משבצות שהוקצו עם סוג QUERY בזמן הרצת ההצהרה. |
| משימות עיבוד נתונים שנמחקו והועברו לשרת אחר | כדי לקבוע את החישובים של הבייטים שנסרקו על פי דרישה כשמריצים משימות עיבוד של נתונים שנמחקו, משתמשים בגודל DML סטנדרטי. | צריכת משבצות שהוקצו עם סוג BACKGROUND כשמשימות עיבוד הנתונים שנמחקו פועלות. |
שיקולים לגבי נתונים שנמחקו
בפעולות DML מפורטות, נעשה שימוש בגישה משולבת לניהול נתונים שנמחקו, שמשלבת עיבוד בתוך השורה עם איסוף אשפה שהועבר, כדי לפזר את עלויות הכתיבה מחדש ולבצע אופטימיזציה של הביצועים בכמה פקודות DML לשינוי שהונפקו מול טבלה.
במהלך הביצוע של פקודת DML לשינוי, BigQuery מנסה לבצע חלק מאיסוף הזבל הרלוונטי מפקודות DML קודמות בתוך השורה. כל הנתונים שנמחקו ולא טופלו באופן מוטבע מועברים לתהליך ברקע לניקוי מאוחר יותר.
בפרויקטים שבהם מתבצעות פעולות DML מפורטות עם הקצאה של BACKGROUND, תהליך איסוף האשפה מתבצע באמצעות משבצות. עיבוד הנתונים שנמחקו כפוף לזמינות המשאבים של ההזמנה שהוגדרה. אם אין מספיק משאבים זמינים בהזמנה שהוגדרה, יכול להיות שייקח יותר זמן מהצפוי לעבד את פעולות איסוף האשפה שהועברו.
בפרויקטים שבהם מבצעים פעולות DML מפורטות באמצעות תמחור על פי דרישה, או בלי הקצאה של BACKGROUND, משימות איסוף הזבל שמועברות מעובדות באמצעות משאבים פנימיים של BigQuery, והחיוב עליהן הוא לפי תעריפי התמחור על פי דרישה. למידע נוסף, ראו תמחור.
התזמון של משימות איסוף הזבל שהועברו נקבע לפי התדירות של פעילות ה-DML בטבלה ולפי זמינות המשאבים, אם משתמשים בהקצאה של BACKGROUND:
- בטבלאות עם פעולות DML שמשתנות באופן רציף, כל DML מעבד חלק מעומס העבודה של איסוף האשפה כדי להבטיח ביצועים עקביים של קריאה וכתיבה. כתוצאה מכך, איסוף האשפה מעובד באופן קבוע בזמן שפעולות ה-DML הבאות מבוצעות.
- אם לא מתרחשת פעילות DML נוספת בטבלה, איסוף הזבל שהועבר מופעל באופן אוטומטי כשהנתונים שנמחקו מגיעים לגיל של 5 ימים.
- במקרים נדירים, יכול להיות שייקח יותר זמן לעבד באופן מלא את הנתונים שנמחקו.
כדי לזהות משימות עיבוד נתונים של מחיקת DML פרטנית שהועברו, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.JOBS:
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS WHERE job_id LIKE "%fine_grained_mutation_garbage_collection%"
מגבלות
טבלאות שמופעל בהן DML ברמת פירוט גבוהה כפופות למגבלות הבאות:
- בטבלאות גדולות עם מחיצות שמשתנות לעיתים קרובות וגדולות מ-2TB, לא מומלץ להשתמש ב-DML ברמת פירוט גבוהה. בטבלאות האלה יכול להיות לחץ נוסף על הזיכרון בשאילתות הבאות, מה שעלול להוביל לזמן אחזור נוסף בקריאה או לשגיאות בשאילתות.
- אפשר להריץ רק פקודת DML אחת לשינוי בכל פעם בטבלה שמופעל בה DML ברמת פירוט גבוהה. המשימות הבאות בתור מסומנות כ-
PENDING. למידע נוסף על ההתנהגות של בו-זמניות ב-DML לשינוי, קראו את המאמר בו-זמניות ב-DML של UPDATE, DELETE ו-MERGE. - בטבלה שמופעל בה DML ברמת פירוט גבוהה, אי אפשר למחוק או להחליף מחיצות בנפרד. כדי למחוק או להחליף נתונים במחיצה, צריך להשתמש בהצהרת DML לשינוי, כמו
DELETE,UPDATE,MERGEאוTRUNCATE. - אי אפשר להשתמש בשיטה
tabledata.listכדי לקרוא תוכן מטבלה שמופעל בה DML ברמת פירוט גבוהה. במקום זאת, צריך לשלוח שאילתה לטבלה באמצעות הצהרתSELECTכדי לקרוא את הרשומות בטבלה. - אי אפשר לראות תצוגה מקדימה של טבלה שמופעל בה DML ברמת פירוט גבוהה באמצעות מסוף BigQuery.
- אי אפשר להעתיק טבלה שמופעל בה DML ברמת פירוט גבוהה אחרי שמריצים הצהרת
UPDATE,DELETEאוMERGE. - אי אפשר ליצור תמונת מצב של טבלה
או שכפול של טבלה עם
DML ברמת פירוט גבוהה אחרי הפעלת הצהרת
UPDATE,DELETEאוMERGE. - אי אפשר לשנות שם של טבלה כשמופעל DML ברמת פירוט גבוהה אחרי הרצת הצהרת
UPDATE,DELETEאוMERGE. - רפליקציה בין אזורים לא נתמכת בטבלאות שמופעל בהן DML ברמת פירוט גבוהה. המערכת חוסמת יצירה של מערכי נתונים משוכפלים שכבר מכילים טבלאות כאלה, אבל היא לא חוסמת הפעלה של DML ברמת פירוט גבוהה בטבלאות בתוך מערכי נתונים משוכפלים קיימים. עם זאת, הפעולה הזו עלולה לגרום לתוצאות שגויות של שאילתות בטבלה המשנית שבה מופעל DML ברמת פירוט גבוהה.
- פקודות DML שמופעלות בטרנזקציה עם כמה פקודות לא עוברות אופטימיזציה באמצעות DML ברזולוציה גבוהה.
- אי אפשר להפעיל DML ברמת פירוט גבוהה בטבלאות זמניות שנוצרו באמצעות ההצהרה
CREATE TEMP TABLE. - המטא-נתונים שמופיעים בתצוגות
INFORMATION_SCHEMA.TABLE_STORAGEובתצוגותINFORMATION_SCHEMA.PARTITIONSיכולים לכלול באופן זמני נתונים שנמחקו לאחרונה באמצעות DML פרטני, עד להשלמת משימות איסוף הזבל ברקע.
שיטות מומלצות
כדי להשיג את הביצועים הטובים ביותר, Google ממליצה על התבניות הבאות:
אל תשלחו מספר גדול של עדכונים או הוספות של שורות בודדות. במקום זאת, כדאי לקבץ פעולות DML יחד כשאפשר. למידע נוסף, ראו הצהרות DML שמעדכנות או מוסיפות שורות בודדות.
אם עדכונים או מחיקות מתרחשים בדרך כלל בנתונים ישנים יותר, או בטווח מסוים של תאריכים, כדאי לשקול חלוקה למחיצות של הטבלאות. החלוקה למחיצות מבטיחה שהשינויים יוגבלו למחיצות ספציפיות בטבלה.
כדאי להימנע מחלוקת טבלאות למחיצות אם כמות הנתונים בכל מחיצה קטנה, וכל עדכון משנה חלק גדול מהמחיצות.
אם אתם מעדכנים לעיתים קרובות שורות שבהן עמודה אחת או יותר נמצאות בטווח ערכים צר, כדאי להשתמש בטבלאות מסודרות באשכולות. האשכולות מבטיחים שהשינויים יוגבלו לקבוצות ספציפיות של בלוקים, וכך מפחיתים את כמות הנתונים שצריך לקרוא ולכתוב. הדוגמה הבאה היא הצהרת
UPDATEשמסננת לפי טווח של ערכי עמודות:UPDATE mydataset.mytable SET string_col = 'some string' WHERE id BETWEEN 54 AND 75;
הנה דוגמה דומה שמסננת לפי רשימה קטנה של ערכי עמודות:
UPDATE mydataset.mytable SET string_col = 'some string' WHERE id IN (54, 57, 60);
במקרים כאלה, כדאי להגדיר אשכולות לפי העמודה
id.אם אתם צריכים פונקציונליות של OLTP, כדאי להשתמש בשאילתות מאוחדות של Cloud SQL, שמאפשרות ל-BigQuery לשלוח שאילתות לגבי נתונים שנמצאים ב-Cloud SQL.
כדי לפתור את השגיאה
Too many DML statements outstanding against table,ולמנוע אותה, פועלים לפי ההנחיות לשגיאה הזו בדף פתרון הבעיות של BigQuery.
במאמר מבוא לאופטימיזציה של ביצועי שאילתות מפורטות שיטות מומלצות לאופטימיזציה של ביצועי שאילתות.
המאמרים הבאים
- למידע על תחביר DML ודוגמאות, ראו תחביר DML.
- מידע נוסף על עדכון נתונים בטבלה מחולקת למחיצות באמצעות DML
- למידע נוסף על שימוש בהצהרות DML בשאילתות מתוזמנות, ראו תזמון שאילתות.