גישה לנתונים היסטוריים
ב-BigQuery אתם יכולים לשלוח שאילתות ולשחזר נתונים שמאוחסנים ב-BigQuery, ששונו או נמחקו בחלון המסע בזמן. הגישה לנתונים ההיסטוריים האלה מאפשרת לכם לשחזר מחיקות שבוצעו בטעות, או לנתח את המצב המדויק של הנתונים בנקודת זמן ספציפית בעבר, בלי שתצטרכו לתחזק גיבויים נפרדים.
שליחת שאילתות על נתונים בנקודת זמן מסוימת
אתם יכולים לשלוח שאילתה על הנתונים ההיסטוריים של טבלה מכל נקודת זמן בחלון הזמן של המסע בזמן, באמצעות משפט FOR SYSTEM_TIME AS OF. הפסוקית הזו מקבלת ביטוי קבוע של חותמת זמן ומפנה לגרסה של הטבלה שהייתה עדכנית באותה חותמת זמן. הטבלה חייבת להיות מאוחסנת ב-BigQuery, ולא יכולה להיות טבלה חיצונית. אין הגבלה על גודל הטבלה כשמשתמשים ב-SYSTEM_TIME AS OF.
לדוגמה, השאילתה הבאה מחזירה גרסה היסטורית של הטבלה מלפני שעה:
SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
אם חותמת הזמן מציינת זמן שלפני חלון הזמן של Time Travel או לפני שהטבלה נוצרה, השאילתה נכשלת ומוחזרת שגיאה כמו זו:
Invalid snapshot time 1601168925462 for table myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.
אחרי שמחליפים טבלה קיימת באמצעות ההצהרה CREATE OR REPLACE TABLE, אפשר להשתמש ב-FOR SYSTEM_TIME AS OF כדי לשלוח שאילתה לגרסה הקודמת של הטבלה.
אם הטבלה נמחקה, אי אפשר לשלוח שאילתה על הנתונים ההיסטוריים שלה ישירות באמצעות FOR SYSTEM_TIME AS OF. השאילתה נכשלת ומוחזרת שגיאה כמו זו:
Not found: Table myproject:mydataset.table was not found in location LOCATION
כדי לגשת לנתונים היסטוריים של טבלה שנמחקה, צריך לשחזר את הטבלה מנקודת זמן.
שחזור טבלה מנקודת זמן מסוימת
כדי לשחזר טבלה מנתונים היסטוריים, אתם יכולים להעתיק את הנתונים ההיסטוריים לטבלה חדשה. העתקת נתונים היסטוריים פועלת גם אם הטבלה נמחקה או פג תוקפה, כל עוד משחזרים את הטבלה במהלך חלון הזמן של Time Travel.
כשמשחזרים טבלה מנתונים היסטוריים, התגים מטבלת המקור לא מועתקים לטבלת היעד. גם פרטי החלוקה למחיצות של הטבלה לא מועתקים לטבלת היעד. כדי ליצור מחדש את סכימת החלוקה למחיצות של הטבלה המקורית, אפשר להציג את הבקשה הראשונית ליצירת הטבלה ב-Cloud Logging ולהשתמש במידע הזה כדי לחלק למחיצות את הטבלה ששוחזרה.
אפשר לשחזר רק טבלה שלמה. אי אפשר לשחזר מחיצות נפרדות.
לדוגמה, אי אפשר להעתיק מחיצה באמצעות מעטר מחיצה כמו bq cp mydataset.mytable$20260712@1418864998000 mydataset.mytable_restored.
כדי לשחזר טבלה שנמחקה אבל עדיין נמצאת בחלון הזמן של Time Travel, אתם יכולים להעתיק אותה לטבלה חדשה באמצעות מעצב הזמן @<time>.
אי אפשר לשלוח שאילתה לטבלה שנמחקה, גם אם משתמשים במעטר זמן. קודם צריך לשחזר אותו.
משתמשים בתחביר הבא עם מעצב הזמן @<time>:
-
tableid@TIME, כאשרTIMEהוא מספר אלפיות השנייה מאז ראשית זמן יוניקס (Unix epoch). -
tableid@-TIME_OFFSETכאשרTIME_OFFSETהוא ההיסט היחסי מהשעה הנוכחית, באלפיות השנייה. -
tableid@0: מציין את הנתונים ההיסטוריים הכי ישנים שזמינים.
כדי לשחזר טבלה, בוחרים באחת מהאפשרויות הבאות:
המסוף
אי אפשר לבטל מחיקה של טבלה באמצעות מסוף Google Cloud .
BQ
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
כדי לשחזר טבלה, קודם צריך לקבוע חותמת זמן של UNIX למועד שבו הטבלה הייתה קיימת (באלפיות השנייה). אפשר להשתמש בפקודה
dateשל Linux כדי ליצור את חותמת הזמן של Unix מערך רגיל של חותמת זמן:date -d '2023-08-04 16:00:34.456789Z' +%s000
לאחר מכן, משתמשים בפקודה
bq copyעם מעצב המסע בזמן@<time>כדי לבצע את פעולת ההעתקה של הטבלה.לדוגמה, מזינים את הפקודה הבאה כדי להעתיק את הטבלה
mydataset.mytableבזמן1418864998000לטבלה חדשהmydataset.newtable.bq cp mydataset.mytable@1418864998000 mydataset.newtable
(אופציונלי) מציינים את הדגל
--locationומגדירים את הערך למיקום שלכם.אפשר גם לציין היסט יחסי. בדוגמה הבאה, המערכת מעתיקה את הגרסה של הטבלה מלפני שעה:
bq cp mydataset.mytable@-3600000 mydataset.newtable
המשך
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
אם אתם חושבים שתרצו לשחזר טבלה אחרי חלון הזמן של "המסע בזמן", צרו תמונת מצב של הטבלה. מידע נוסף זמין במאמר מבוא לתמונות מצב של טבלאות.
אי אפשר לשחזר תצוגה לוגית באופן ישיר. מידע נוסף זמין במאמר שחזור תצוגה.
המאמרים הבאים
- מידע נוסף על קובצי snapshot של טבלאות
- מידע נוסף על שמירת נתונים באמצעות Time Travel ו-Fail-safe
- מידע נוסף על ניהול טבלאות