שמירת נתונים עם תכונות של חזרה בזמן וגיבוי
במסמך הזה מוסבר על חלונות הזמן לשמירת נתונים של המסע בזמן ולגיבוי במערכי נתונים. במהלך תקופות ה-time travel וה-fail-safe, נתונים ששיניתם או מחקתם בכל טבלה במערך הנתונים ממשיכים להיות מאוחסנים למקרה שתצטרכו לשחזר אותם.
מסע בזמן ושמירת נתונים
אתם יכולים לגשת לנתונים ששונו או נמחקו מכל נקודה בחלון הזמן של הנסיעה בזמן, שכולל כברירת מחדל את שבעת הימים האחרונים. בעזרת Time Travel אתם יכולים לשלוח שאילתה על נתונים שעודכנו או נמחקו, לשחזר טבלה או קבוצת נתונים שנמחקו, לשחזר טבלה שתוקפה פג או לשחזר טבלה לנקודת זמן מסוימת.
אתם יכולים להגדיר את משך הזמן של חלון הנסיעה בזמן, ממינימום של יומיים ועד למקסימום של שבעה ימים. חלון זמן ארוך יותר של חזרה בזמן שימושי במקרים שבהם חשוב לשחזר נתונים מעודכנים או נתונים שנמחקו. חלון זמן קצר יותר מאפשר לכם לחסוך בעלויות האחסון כשאתם משתמשים במודל החיוב על אחסון פיזי. החיסכון הזה לא חל כשמשתמשים במודל החיוב על נפח אחסון לוגי. מידע נוסף על ההשפעה של מודל החיוב על העלות של נפח האחסון זמין במאמר חיוב. משך הזמן המינימלי של מסע בזמן הוא יומיים.
הגדרת חלון הזמן של התכונה 'חזרה בזמן'
אתם מגדירים את חלון הזמן של המסע בזמן ברמת מערך הנתונים או הפרויקט. ההגדרות האלה חלות על כל הטבלאות שמשויכות למערך הנתונים או לפרויקט.
הגדרת חלון הזמן של המסע בזמן ברמת הפרויקט
כדי לציין את חלון הזמן של המסע בזמן שמוגדר כברירת מחדל ברמת הפרויקט, אתם יכולים להשתמש בהצהרות של שפת הגדרת נתונים (DDL). במאמר ניהול הגדרות אישיות מוסבר איך מגדירים את חלון הזמן של "המסע בזמן" ברמת הפרויקט.
הגדרת חלון הזמן של Time Travel ברמת מערך הנתונים
כדי לציין או לשנות את חלון הזמן של Time Travel למערך נתונים, אפשר להשתמש בCloud de Confiance מסוף, בכלי שורת הפקודה של bq או ב-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 מוגדרים ברמת קבוצת הנתונים, ולכן אי אפשר לשנות את חלון הזמן של Time Travel של קבוצת נתונים שנמחקה עד שמבטלים את המחיקה שלה.
אם אתם מקצרים את חלון הזמן של Time Travel, מוחקים טבלה ואז מבינים שאתם צריכים תקופה ארוכה יותר לשחזור הנתונים, אתם יכולים ליצור קובץ snapshot של הטבלה מנקודת זמן שלפני מחיקת הטבלה. אתם צריכים לעשות את זה כל עוד אפשר לשחזר את הטבלה שנמחקה. מידע נוסף זמין במאמר יצירת קובץ snapshot של טבלה באמצעות נסיעה בזמן.
מסע בזמן וגישה ברמת השורה
אם בטבלה יש או היו כללי מדיניות גישה ברמת השורה, רק חשבון משתמש שקיבל את ההרשאה הבאה של ניהול זהויות והרשאות גישה (IAM) יכול לגשת לנתונים ההיסטוריים של הטבלה:
| הרשאה | משאב |
|---|---|
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
|
הטבלה שהנתונים ההיסטוריים שלה נגישים |
התפקידים המוגדרים מראש הבאים ב-IAM כוללים את ההרשאה bigquery.rowAccessPolicies.overrideTimeTravelRestrictions:
| תפקיד | משאב |
|---|---|
roles/bigquery.admin
|
הטבלה שהנתונים ההיסטוריים שלה נגישים |
roles/bigquery.studioAdmin
|
הטבלה שהנתונים ההיסטוריים שלה נגישים |
roles/iam.databasesAdmin
|
הטבלה שהנתונים ההיסטוריים שלה נגישים |
אפשר גם לתת את ההרשאה bigquery.rowAccessPolicies.overrideTimeTravelRestrictions באמצעות תפקיד בהתאמה אישית.
מריצים את הפקודה הבאה כדי לקבל את הזמן המקביל בראשית זמן יוניקס (Unix epoch) על ידי העברת חותמת הזמן ב-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
Fail-safe
BigQuery מספק תקופה שבה אפשר לשחזר את הנתונים. במהלך תקופת ההגנה, הנתונים שנמחקו נשמרים אוטומטית למשך שבעה ימים נוספים אחרי חלון הזמן של Time Travel, כדי שהנתונים יהיו זמינים לשחזור במקרה חירום. אפשר לשחזר נתונים ברמת הטבלה מנקודת הזמן שמיוצגת על ידי חותמת הזמן של מחיקת הנתונים.
אי אפשר להגדיר את תקופת ההמתנה או להאריך אותה. צריך להתחיל את שחזור הטבלה ולסיים אותו לפני שתקופת הגיבוי של שבעה ימים מסתיימת, ולהקצות מספיק זמן לסיום העתקת הטבלה בהתאם לגודל שלה.
כשמבצעים את הפעולות הבאות, אפשר לשחזר את הנתונים שהוחלפו או הוסרו באמצעות חלון הזמן של המסע בזמן. אחרי שחלון הזמן של Time Travel מסתיים, הנתונים נכנסים לתקופת Fail-safe לזמן שחזור מורחב:
-
מחיקה או החלפה של טבלה: כשמוחקים טבלה או כשהנתונים שלה מוחלפים במלואם (לדוגמה, באמצעות מאפיין הכתיבה
WRITE_TRUNCATEבמשימת טעינה או באמצעות ההצהרהCREATE OR REPLACE TABLE), התוכן הקודם של הטבלה נשמר. - מחיקה או תפוגה של מחיצה: אם מחיצה ספציפית נמחקת או שתוקפה פג מטבלה עם מחיצות, הנתונים ששייכים למחיצה הספציפית הזו נשמרים. מחיצות אחרות בטבלה לא מושפעות. אי אפשר לשחזר מחיצה ספציפית, ולכן צריך לשחזר את כל הטבלה מחותמת זמן שלפני המחיקה או התפוגה של המחיצה. אם בטבלה המקורית יש תפוגה של מחיצה, ההגדרה הזו מועתקת לטבלה המשוחזרת. כדי לבצע שאילתה במחיצות משוחזרות שנוצרו לפני תאריך התפוגה של המחיצה, צריך לעדכן את תאריך התפוגה של המחיצה בטבלה המשוחזרת.
שחזור נתונים מאחסון בטוח
אי אפשר לשלוח שאילתות לנתונים באחסון בטוח ישירות, ואי אפשר להעתיק טבלה מאחסון בטוח עד ש-Cloud Customer Care מעניק גישה זמנית לשחזור בטוח של מערך הנתונים. כדי לשחזר טבלה מאחסון Fail-safe, פנו ל-Cloud Customer Care ובקשו גישה לשחזור Fail-safe של קבוצת הנתונים. לאחר מכן, שחזרו את הטבלה בעצמכם על ידי הפעלת משימה להעתקת טבלה עם מעטר חותמת זמן של @TIME.
בניגוד לשחזור באמצעות Time Travel, שמעדכן רק את המצביעים של המטא-נתונים, בשחזור באמצעות Fail-safe צריך לשחזר פיזית ולשכפל את בלוקי האחסון בארכיון לפני שהמשימה של העתקת הטבלה מסתיימת. כשמשחזרים טבלה גדולה או טבלה עם מחיצות רבות מאחסון בטוח, חשוב לזכור את ההתנהגויות הבאות:
- זמני העתקה ארוכים יותר וזמני קצובים לתפוגה: שחזור טבלה בגודל של כמה טרה-בייטים או טבלה עם הרבה מחיצות מאחסון בטוח יכול להימשך הרבה יותר זמן מאשר העתקה רגילה של טבלה. יכול להיות שייווצר מצב שבו משימת העתקה אחת תסתיים לפני הזמן או תיכשל עם שגיאה פנימית זמנית לפני שכל בלוקי האחסון ישוחזרו.
- התקדמות הדרגתית בניסיונות חוזרים: ההתקדמות של השחזור נשמרת באופן הדרגתי. כל בלוקי האחסון ששוחזרו לפני שהזמן הקצוב לתפוגה של משימת ההעתקה חלף או שהמשימה נכשלה, נשארים משוחזרים. אם הפקודה
bq cpנכשלת, נסו שוב להריץ את הפקודה עם אותה טבלת מקור ואותו מעצב חותמת זמן@TIME. בכל ניסיון חוזר, המערכת מדלגת על הבלוקים שכבר שוחזרו וממשיכה לשחזר את שאר הנתונים עד שההעתקה מצליחה. - חלון זמן לשחזור רגיש לזמן: חשוב לפנות לCloud Customer Care בהקדם האפשרי במהלך תקופת ההגנה של שבעה ימים, במיוחד אם מדובר בטבלאות גדולות, כדי שיהיה לכם מספיק זמן להפעיל ניסיונות חוזרים לפני שתקופת ההגנה תסתיים.
חיוב
אם הגדרתם את מודל החיוב על אחסון לשימוש בבייטים פיזיים, תחויבו בנפרד על הבייטים שמשמשים לאחסון של Time Travel ו-Fail-safe. החיוב על Time Travel ועל אחסון ב-Fail-safe הוא לפי התעריף של אחסון פיזי פעיל. אתם יכולים להגדיר את חלון הזמן של Time Travel כדי לאזן בין עלויות האחסון לבין צורכי שמירת הנתונים.
אם הגדרתם את מודל החיוב על אחסון לפי בייטים לוגיים, עלויות האחסון הכוללות של Time Travel ו-Fail-safe כלולות בתעריף הבסיסי שאתם מחויבים בו.
בטבלה הבאה מוצגת השוואה בין עלויות האחסון הפיזי והלוגי:
| מודל החיוב | על מה משלמים? |
|---|---|
| אחסון פיזי (דחוס) |
|
| אחסון לוגי (לא דחוס) (הגדרת ברירת מחדל) |
|
אם אתם משתמשים באחסון פיזי, תוכלו לראות את הבייטים שמשמשים ל-Time Travel ול-Fail-safe בעמודות TIME_TRAVEL_PHYSICAL_BYTES ו-FAIL_SAFE_PHYSICAL_BYTES בתצוגות TABLE_STORAGE ו-TABLE_STORAGE_BY_ORGANIZATION. במאמר תחזית החיובים על אחסון מוסבר איך להשתמש באחת מהתצוגות האלה כדי להעריך את העלויות.
עלויות האחסון חלות על נתונים שמאוחסנים ב-BigQuery לצורך שימוש בתכונות 'חזרה בזמן' ו'מצב בטוח', אבל אתם מחויבים רק אם לא חלות עלויות אחסון נתונים במקומות אחרים ב-BigQuery. הפרטים הבאים רלוונטיים:
- כשיוצרים טבלה, אין עלות אחסון של Time Travel או Fail-safe.
- אם הנתונים משתנים או נמחקים, תחויבו על האחסון של הנתונים שהשתנו או נמחקו ונשמרו על ידי המסע בזמן במהלך חלון המסע בזמן ותקופת הגיבוי. התמחור הזה דומה לתמחור האחסון של תמונות מצב ושיבוטים של טבלאות.
- לא מתבצע חיוב על אחסון בטבלאות זמניות.
דוגמה לשמירת נתונים
בטבלה הבאה אפשר לראות איך נתונים שנמחקו או שונו עוברים בין חלונות זמן השמירה באחסון. בדוגמה הזו מוצג מצב שבו נפח האחסון הכולל הפעיל הוא 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. למידע נוסף, קראו את המאמר Time Travel וגישה ברמת השורה.
- התכונה 'חזרה בזמן' לא משחזרת מטא-נתונים של טבלאות.
- אי אפשר להשתמש ב-Time Travel בסוגי הטבלאות הבאים:
- טבלאות חיצוניות. עם זאת, בטבלאות חיצוניות של Apache Iceberg, אתם יכולים להשתמש במשפט
FOR SYSTEM_TIME AS OFכדי לגשת לתמונות מצב שנשמרות במטא-נתונים של Iceberg. - טבלאות זמניות של תוצאות שאילתות שנשמרו במטמון.
- טבלאות סשן זמניות.
- טבלאות זמניות עם כמה הצהרות.
- טבלאות שמופיעות בקטע של מערכי נתונים חיצוניים.
- טבלאות חיצוניות. עם זאת, בטבלאות חיצוניות של Apache Iceberg, אתם יכולים להשתמש במשפט