שמירת נתונים עם תכונות של חזרה בזמן ומניעת כשל
במסמך הזה מתוארים חלונות שמירת הנתונים של מסע בזמן ושל מנגנון למניעת כשלים במערכי נתונים. במהלך תקופות ה-time travel וה-fail-safe, הנתונים ששיניתם או מחקתם בכל טבלה במערך הנתונים ממשיכים להיות מאוחסנים למקרה שתצטרכו לשחזר אותם.
מסע בזמן ושמירת נתונים
אתם יכולים לגשת לנתונים ששונו או נמחקו מכל נקודה בטווח הזמן של התכונה 'מסע בזמן', שמוגדר כברירת מחדל ל-7 הימים האחרונים. התכונה 'מסע בזמן' מאפשרת להריץ שאילתות על נתונים שעודכנו או נמחקו, לשחזר טבלה או מערך נתונים שנמחקו, לשחזר טבלה שתוקף שלה פג או לשחזר טבלה לנקודת זמן מסוימת.
אפשר להגדיר את משך חלון הזמן של ההחזרה בזמן, ממינימום של יומיים ועד מקסימום של שבעה ימים. חלון זמן ארוך יותר של חזרה בזמן שימושי במקרים שבהם חשוב לשחזר נתונים שעודכנו או נמחקו. חלון זמן קצר יותר מאפשר לכם לחסוך בעלויות האחסון כשאתם משתמשים במודל החיוב של נפח האחסון הפיזי. החיסכון הזה לא רלוונטי כשמשתמשים במודל החיוב של אחסון לוגי. מידע נוסף על ההשפעה של מודל החיוב על העלות של נפח האחסון זמין במאמר חיוב. אי אפשר להגדיר את משך הזמן של הנסיעה בזמן לפחות מיומיים.
הגדרת חלון הזמן של התכונה 'חזרה בזמן'
אתם מגדירים את חלון הזמן של Time Travel ברמת מערך הנתונים או ברמת הפרויקט. ההגדרות האלה יחולו על כל הטבלאות שמשויכות למערך הנתונים או לפרויקט.
הגדרת חלון הזמן של Time Travel ברמת הפרויקט
כדי לציין את חלון ברירת המחדל של נסיעה בזמן ברמת הפרויקט, אפשר להשתמש בהצהרות של שפת הגדרת נתונים (DDL). במאמר ניהול הגדרות ההגדרה מוסבר איך מגדירים את חלון המבט לאחור ברמת הפרויקט.
הגדרת חלון זמן לנסיעה אחורה בזמן ברמת מערך הנתונים
כדי לציין או לשנות את חלון הזמן של Time Travel למערך נתונים, אפשר להשתמש בCloud de Confiance מסוף, בכלי שורת הפקודה של BigQuery או ב-BigQuery API.
- כדי לציין את חלון ברירת המחדל של מסע בזמן למערכי נתונים חדשים, אפשר לעיין במאמר בנושא יצירת מערכי נתונים.
- כדי לשנות או לעדכן את חלון הנסיעה בזמן של מערך נתונים קיים, אפשר לעיין במאמר בנושא עדכון חלונות נסיעה בזמן.
כשמשנים את חלון הזמן של מסע בזמן, אם חותמת הזמן מציינת זמן מחוץ לחלון הזמן של מסע בזמן, או לפני שהטבלה נוצרה, השאילתה נכשלת ומוחזרת שגיאה כמו הבאה:
TableIDwas created at time which is before its allowed time travel intervaltimestamp. Creation time:timestamp
איך פועל מסע בזמן
ב-BigQuery נעשה שימוש בפורמט אחסון עמודתי. כלומר, הנתונים מאורגנים ומאוחסנים לפי עמודה ולא לפי שורה. אם יש לכם טבלה עם כמה עמודות, הערכים של כל עמודה בכל השורות מאוחסנים יחד בבלוקים של אחסון.
כשמשנים תא בטבלה ב-BigQuery, משנים ערך ספציפי בשורה מסוימת ובעמודה מסוימת. מכיוון ש-BigQuery מאחסן עמודות יחד, שינוי של תא אחד בעמודה בדרך כלל מחייב קריאה של בלוק האחסון כולו שמכיל את נתוני העמודה בשורות הרלוונטיות, החלת השינוי ואז כתיבה של גרסה חדשה של בלוק האחסון הזה.
התכונה 'מסע בזמן' פועלת על ידי מעקב אחרי גרסאות של בלוקים באחסון שמרכיבים את הטבלה. כשמעדכנים נתונים, BigQuery לא רק משנה את בלוק האחסון הקיים במקום. במקום זאת, נוצרת גרסה חדשה של בלוקי האחסון המושפעים עם הנתונים המעודכנים. הגרסה הקודמת נשמרת למטרות של מעבר לנקודת זמן קודמת.
ב-BigQuery נעשה שימוש בגדלים משתנים של קבצים ובבלוקים של אחסון. גודל בלוקי האחסון לא קבוע, והוא יכול להשתנות בהתאם לגורמים כמו גודל הטבלה ופיזור הנתונים שלה. שינוי של תא אחד בבלוק אחסון משנה את הנתונים של העמודה הזו, ויכול להשפיע על הרבה שורות. לכן, יחידת הנתונים שעוברת גרסאות ונשלחת ל-Time Travel היא לרוב בלוק האחסון כולו שמכיל את הנתונים ששונו בעמודה הזו, ולא רק תא אחד.
לכן, שינוי של תא אחד יכול לגרום לשליחה של יותר נתונים ל-Time Travel מאשר רק גודל השינוי.
איך חלון הזמן של Time Travel משפיע על שחזור של טבלה ושל מערך נתונים
טבלה או מערך נתונים שנמחקו משתמשים במשך הזמן של חלון הנסיעה בזמן שהיה בתוקף בזמן המחיקה.
לדוגמה, אם משך חלון הנסיעה בזמן הוא יומיים ואז מגדילים את המשך ל-7 ימים, עדיין אפשר לשחזר טבלאות שנמחקו לפני השינוי רק למשך יומיים. באופן דומה, אם משך חלון הנסיעה בזמן הוא חמישה ימים ואתם מקצרים אותו לשלושה ימים, עדיין אפשר לשחזר טבלאות שנמחקו לפני השינוי למשך חמישה ימים.
חלונות הזמן של התכונה 'חזרה בזמן' מוגדרים ברמת קבוצת הנתונים, ולכן אי אפשר לשנות את חלון הזמן של קבוצת נתונים שנמחקה עד שמבטלים את המחיקה שלה.
אם מקצרים את משך הזמן של חלון הנסיעה בזמן, מוחקים טבלה ואז מבינים שצריך תקופה ארוכה יותר לשחזור הנתונים האלה, אפשר ליצור תמונת מצב של הטבלה מנקודת זמן שלפני מחיקת הטבלה. צריך לעשות את זה בזמן שהטבלה שנמחקה עדיין ניתנת לשחזור. מידע נוסף זמין במאמר בנושא יצירת תמונת מצב של טבלה באמצעות תכונת Time Travel.
מסע בזמן וגישה ברמת השורה
אם בטבלה יש כללי מדיניות של גישה ברמת השורה, או שהיו בה כללי מדיניות כאלה, רק חשבון משתמש שקיבל את ההרשאה הבאה של ניהול זהויות והרשאות גישה (IAM) יכול לגשת לנתונים היסטוריים של הטבלה:
| הרשאה | משאב |
|---|---|
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
|
הטבלה שאליה מתבצעת גישה לנתונים היסטוריים |
תפקידי ה-IAM המוגדרים מראש הבאים מספקים את ההרשאה bigquery.rowAccessPolicies.overrideTimeTravelRestrictions:
| תפקיד | משאב |
|---|---|
roles/bigquery.admin
|
הטבלה שאליה מתבצעת גישה לנתונים היסטוריים |
roles/bigquery.studioAdmin
|
הטבלה שאליה מתבצעת גישה לנתונים היסטוריים |
roles/iam.databasesAdmin
|
הטבלה שאליה מתבצעת גישה לנתונים היסטוריים |
אפשר גם להעניק את ההרשאה bigquery.rowAccessPolicies.overrideTimeTravelRestrictions באמצעות תפקיד בהתאמה אישית.
מריצים את הפקודה הבאה כדי לקבל את הזמן המקביל של מערכת Unix על ידי העברת חותמת הזמן של UTC:
date -d '2023-08-04 16:00:34.456789Z' +%s000
מחליפים את ראשית זמן יוניקס (Unix epoch)
1691164834000שהתקבל מהפקודה הקודמת בכלי שורת הפקודה של BigQuery. מריצים את הפקודה הבאה כדי לשחזר עותק של הטבלה שנמחקהdeletedTableIDבטבלה אחרתrestoredTable, באותו מערך נתוניםmyDatasetID:bq cp myProjectID:myDatasetID.deletedTableID@1691164834000 myProjectID:myDatasetID.restoredTable
מנגנון למניעת כשלים
BigQuery מספק תקופה שבה אפשר לשחזר את הנתונים. במהלך תקופת ההגנה מפני כשלים, הנתונים שנמחקו נשמרים אוטומטית למשך שבעה ימים נוספים אחרי חלון הזמן של האפשרות 'חזרה בזמן', כדי שהנתונים יהיו זמינים לשחזור במקרה חירום. אפשר לשחזר נתונים ברמת הטבלה. השחזור של נתוני הטבלה מתבצע מהנקודה בזמן שמיוצגת על ידי חותמת הזמן של מחיקת הטבלה. אי אפשר להגדיר את תקופת ההגנה מפני כשלים, ואי אפשר להאריך אותה.
כשמבצעים את הפעולות הבאות, אפשר לשחזר את הנתונים שהוחלפו או הוסרו באמצעות חלון הזמן של התכונה 'מסע בזמן'. אחרי שחלון הזמן של הנסיעה בזמן מסתיים, הנתונים האלה נכנסים לתקופה של מנגנון למניעת כשלים, שבה זמן השחזור ממושך יותר:
-
מחיקה או החלפה של טבלה: כשמוחקים טבלה או כשמחליפים את הנתונים שלה באופן מלא (לדוגמה, באמצעות
WRITE_TRUNCATEהמאפיין write disposition בעבודת טעינה או באמצעות הפקודהCREATE OR REPLACE TABLE), התוכן הקודם של הטבלה נשמר. - מחיקת מחיצה: אם מחיצה ספציפית נמחקת מטבלה עם מחיצות, הנתונים ששייכים למחיצה הספציפית הזו נשמרים. לא תהיה השפעה על מחיצות אחרות בטבלה.
אי אפשר לשלוח שאילתות או לשחזר נתונים ישירות באחסון בטוח. כדי לשחזר נתונים מאחסון בטוח מפני כשלים, צריך לפנות אל Cloud Customer Care.
חיוב
אם הגדרתם את מודל החיוב על אחסון לשימוש בבייטים פיזיים, תחויבו בנפרד על הבייטים שמשמשים לאחזור נתונים מנקודת זמן קודמת ולאחסון בטוח. החיוב על אחסון בטוח מפני כשלים ועל אחזור נתונים מנקודת זמן קודמת הוא לפי התעריף של אחסון פיזי פעיל. אתם יכולים להגדיר את חלון הזמן של Time Travel כדי לאזן בין עלויות האחסון לבין צורכי שמירת הנתונים.
אם הגדרתם את מודל החיוב של האחסון לשימוש בבייטים לוגיים, העלויות הכוללות של האחסון לשימוש בתכונות 'חזרה בזמן' ו'אחסון בטוח' כלולות בתעריף הבסיסי שחויבתם עליו.
בטבלה הבאה מוצגת השוואה בין עלויות אחסון פיזי ועלויות אחסון לוגי:
| מודל חיוב | על מה משלמים? |
|---|---|
| אחסון פיזי (דחוס) |
|
| אחסון לוגי (לא דחוס) (הגדרת ברירת מחדל) |
|
אם אתם משתמשים באחסון פיזי, תוכלו לראות את מספר הבייטים שמשמשים את התכונות 'חזרה בזמן' ו'מצב בטוח' בעמודות TIME_TRAVEL_PHYSICAL_BYTES ו-FAIL_SAFE_PHYSICAL_BYTES בתצוגות TABLE_STORAGE ו-TABLE_STORAGE_BY_ORGANIZATION. דוגמה לשימוש באחת מהתצוגות האלה כדי להעריך את העלויות מופיעה במאמר בנושא תחזית החיובים על אחסון.
עלויות האחסון חלות על נתונים שמאוחסנים ב-BigQuery לצורך שימוש בתכונות 'חזרה בזמן' ו'מצב בטוח', אבל אתם מחויבים רק אם לא חלות עלויות אחסון נתונים במקומות אחרים ב-BigQuery. הפרטים הבאים רלוונטיים:
- כשיוצרים טבלה, אין עלות של אחסון בטוח או של שימוש ב-Time Travel.
- אם הנתונים משתנים או נמחקים, תחוייבו על האחסון של הנתונים ששונו או נמחקו ונשמרו על ידי התכונה 'חזרה בזמן' במהלך חלון הזמן של התכונה ותקופת ההגנה. התמחור הזה דומה לתמחור של אחסון תמונות מצב ושיבוטים של טבלאות.
- לא מתבצע חיוב על אחסון זמני של טבלאות.
דוגמה לשמירת נתונים
בטבלה הבאה אפשר לראות איך נתונים שנמחקו או שונו עוברים בין חלונות שמירה של נתונים. בדוגמה הזו, נפח האחסון הכולל הפעיל הוא 200GiB, ונמחקו 50GiB עם חלון זמן של שבעה ימים לשימוש בתכונה 'חזרה בזמן':
| יום 0 | היום הראשון | היום השני | יום 3 | יום 4 | יום 5 | יום 6 | יום 7 | יום 8 | יום 9 | יום 10 | יום 11 | יום 12 | יום 13 | יום 14 | יום 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| אחסון פעיל | 200 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 |
| אחסון של נסיעות בזמן | 50 | 50 | 50 | 50 | 50 | 50 | 50 | |||||||||
| אחסון בטוח | 50 | 50 | 50 | 50 | 50 | 50 | 50 |
מחיקת נתונים מאחסון פיזי לטווח ארוך פועלת באותו אופן.
מגבלות
אחזור נתונים באמצעות 'מסע בזמן' כפוף למגבלות הבאות:
- האפשרות 'מסע בזמן' מאפשרת גישה לנתונים היסטוריים רק למשך חלון הזמן של המסע בזמן. כדי לשמור את נתוני הטבלה למטרות שאינן חירום למשך זמן ארוך יותר מחלון הזמן של התכונה 'חזרה בזמן', צריך להשתמש בתמונות מצב של טבלאות.
- אם בטבלה יש מדיניות גישה ברמת השורה, או שהייתה כזו בעבר, רק אדמינים של הטבלה יכולים להשתמש ב'מסע בזמן'. מידע נוסף זמין במאמר בנושא Time travel and row-level access (מסע בזמן וגישה ברמת השורה).
- התכונה 'מסע בזמן' לא משחזרת מטא-נתונים של טבלאות.
- אי אפשר להשתמש בטבלאות מהסוגים הבאים כדי לחזור אחורה בזמן:
- טבלאות חיצוניות. עם זאת, בטבלאות חיצוניות של Apache Iceberg, אפשר להשתמש בפסקה
FOR SYSTEM_TIME AS OFכדי לגשת לתמונות מצב שנשמרות במטא-נתונים של Iceberg. - טבלאות זמניות של תוצאות שאילתות שנשמרו במטמון.
- טבלאות זמניות של סשנים.
- טבלאות זמניות עם כמה הצהרות.
- טבלאות שמופיעות בקטע 'מערכי נתונים חיצוניים'.
- טבלאות חיצוניות. עם זאת, בטבלאות חיצוניות של Apache Iceberg, אפשר להשתמש בפסקה