יצירת תמונות מצב של טבלאות באמצעות שאילתה מתוזמנת
במאמר הזה מוסבר איך ליצור תמונות מצב חודשיות של טבלה באמצעות חשבון שירות שמריץ שאילתת DDL מתוזמנת. בדוגמה הבאה מוסבר איך עושים את זה:
- בפרויקט
PROJECT, יוצרים חשבון שירות בשםsnapshot-bot. - נותנים לחשבון השירות
snapshot-botאת ההרשאות שהוא צריך כדי ליצור תמונות מצב של הטבלהTABLEשנמצאת במערך הנתוניםDATASET, ולאחסן את תמונות המצב של הטבלה במערך הנתוניםBACKUP. - תכתוב שאילתה שיוצרת תמונות מצב חודשיות של הטבלה
TABLEוממקמת אותן במערך הנתוניםBACKUP. אי אפשר להחליף תמונת מצב קיימת של טבלה, ולכן השמות של תמונות המצב של הטבלה חייבים להיות ייחודיים. כדי לעשות את זה, האפליקציה מוסיפה את התאריך הנוכחי לשמות של תמונות המצב של הטבלה. לדוגמה,TABLE_20220521. התוקף של תמונות המצב של הטבלה יפוג אחרי 40 ימים. - מתזמנים את חשבון השירות
snapshot-botלהפעלת השאילתה ביום הראשון של כל חודש.
המסמך הזה מיועד למשתמשים שמכירים את BigQuery ואת תמונות המצב של טבלאות ב-BigQuery.
הרשאות ותפקידים
בקטע הזה מפורטות ההרשאות ב-IAM שדרושות ליצירת חשבון שירות ולתזמון שאילתה, והתפקידים המוגדרים מראש ב-IAM שמעניקים את ההרשאות האלה.
הרשאות
כדי לעבוד עם חשבון שירות, צריך את ההרשאות הבאות:
| הרשאה | משאב | סוג המשאב |
|---|---|---|
iam.serviceAccounts.*
|
PROJECT |
פרויקט |
כדי לתזמן שאילתה, נדרשת ההרשאה הבאה:
| הרשאה | משאב | סוג המשאב |
|---|---|---|
bigquery.jobs.create
|
PROJECT |
פרויקט |
תפקידים
אלה התפקידים המוגדרים מראש שכוללים את ההרשאות שנדרשות כדי לעבוד עם חשבון שירות:
| תפקיד | משאב | סוג המשאב |
|---|---|---|
אחת מהפעולות הבאות:roles/iam.serviceAccountAdminroles/editorroles/owner
|
PROJECT |
פרויקט |
התפקידים המוגדרים מראש ב-BigQuery שמספקים את ההרשאות שנדרשות לתזמון שאילתה הם:
| תפקיד | משאב | סוג המשאב |
|---|---|---|
אחת מהאפשרויות הבאות:roles/bigquery.userroles/bigquery.jobuserroles/bigquery.admin`
|
PROJECT |
פרויקט |
יצירת חשבון שירות snapshot-bot
כדי ליצור את snapshot-bot
חשבון השירות ולהעניק לו את ההרשאות שהוא צריך כדי להריץ שאילתות בפרויקט PROJECT, פועלים לפי השלבים הבאים:
המסוף
במסוף Google Cloud , נכנסים לדף Service accounts:
בוחרים את הפרויקט
PROJECT.יוצרים את חשבון השירות
snapshot-bot:לוחצים על יצירת חשבון שירות.
בשדה שם חשבון השירות, מזינים snapshot-bot.
לוחצים על יצירה והמשך.
נותנים לחשבון השירות את ההרשאות שהוא צריך כדי להריץ משימות של BigQuery:
בקטע Grant this service account access to project (הענקת גישה של חשבון השירות הזה לפרויקט), בוחרים בתפקיד BigQuery User (משתמש ב-BigQuery).
לוחצים על סיום.
מערכת BigQuery יוצרת את חשבון השירות עם כתובת האימייל snapshot-bot@PROJECT.iam.gserviceaccount.com.
כדי לוודא ש-BigQuery יצר את חשבון השירות עם ההרשאות שציינתם, פועלים לפי השלבים הבאים:
המסוף
מוודאים ש-BigQuery יצר את חשבון השירות:
במסוף Google Cloud , נכנסים לדף Service accounts:
בוחרים את הפרויקט
PROJECT.לוחצים על snapshot-bot@PROJECT.iam.gserviceaccount.com.
מוודאים שההודעה סטטוס חשבון השירות מציינת שחשבון השירות פעיל.
מוודאים ש-BigQuery העניק לחשבון השירות שלכם את ההרשאה שנדרשת להרצת שאילתות:
במסוף Google Cloud , נכנסים לדף Manage resources:
לחץ על
PROJECT.לוחצים על הצגת חלונית המידע.
בכרטיסייה הרשאות, מרחיבים את הצומת משתמש BigQuery.
מוודאים שחשבון השירות snapshot-bot מופיע ברשימה.
מתן הרשאות לחשבון השירות
בקטע הזה מוסבר איך להעניק לחשבון השירות snapshot-bot את ההרשאות שדרושות לו כדי ליצור תמונות מצב של הטבלה DATASET.TABLE במערך הנתונים BACKUP.
הרשאה לצילום תמונות מצב של טבלת הבסיס
כדי לתת לחשבון השירות snapshot-bot את ההרשאות שהוא צריך כדי לצלם תמונות מצב של הטבלה DATASET.TABLE, מבצעים את השלבים הבאים:
המסוף
במסוף Google Cloud , פותחים את הדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את צומת הפרויקט
PROJECT.לוחצים על Datasets (מערכי נתונים) ואז על מערך הנתונים DATASET.
לוחצים על סקירה כללית > טבלאות ואז על הטבלה TABLE.
לוחצים על שיתוף. תיפתח החלונית שיתוף.
לוחצים על Add Principal. נפתחת החלונית הענקת גישה.
בקטע New principals (חשבונות משתמשים חדשים), מזינים את כתובת האימייל של חשבון השירות: snapshot-bot@PROJECT.iam.gserviceaccount.com.
בתפריט הנפתח Select a role (בחירת תפקיד), בוחרים בתפקיד BigQuery Data Editor (עריכת נתונים ב-BigQuery).
לוחצים על Save.
בחלונית Share (שיתוף), מרחיבים את הצומת BigQuery Data Editor (עורך נתונים ב-BigQuery) ומוודאים שחשבון השירות snapshot-bot@PROJECT.iam.gserviceaccount.com מופיע ברשימה.
לוחצים על Close.
BQ
במסוף Google Cloud , מפעילים את Cloud Shell:
מזינים את הפקודה הבאה:
bq add-iam-policy-bindingbq add-iam-policy-binding \ --member=serviceAccount:snapshot-bot@PROJECT.iam.gserviceaccount.com \ --role=roles/bigquery.dataEditor DATASET.TABLE
מערכת BigQuery מאשרת שהוסף קישור מדיניות חדש.
הרשאה ליצור טבלאות במערך הנתונים של היעד
נותנים לחשבון השירות snapshot-bot את ההרשאות שהוא צריך כדי ליצור תמונות מצב של טבלאות במערך הנתונים BACKUP באופן הבא:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

בחלונית Explorer, מרחיבים את צומת הפרויקט
PROJECT.לוחצים על Datasets (מערכי נתונים) ואז על מערך הנתונים BACKUP.
לוחצים על שיתוף > ניהול הרשאות. נפתחת חלונית ההרשאות של מערך הנתונים.
לוחצים על Add principal. בשדה New principals, מזינים את כתובת האימייל של חשבון השירות: snapshot-bot@PROJECT.iam.gserviceaccount.com.
בתפריט הנפתח Select a role (בחירת תפקיד), בוחרים את התפקיד BigQuery Data Owner (הבעלים של נתוני BigQuery).
לוחצים על Save.
בחלונית ההרשאות של מערך הנתונים, מוודאים שחשבון השירות snapshot-bot@PROJECT.iam.gserviceaccount.com מופיע בצומת BigQuery Data Owner.
לוחצים על Close.
לחשבון השירות snapshot-bot יש עכשיו את תפקידי ה-IAM הבאים למשאבים הבאים:
| תפקיד | משאב | סוג המשאב | מטרה |
|---|---|---|---|
| עריכה של נתוני BigQuery | PROJECT:DATASET.TABLE |
טבלה | תצלם תמונות מצב של הטבלה TABLE. |
| בעלים של נתונים ב-BigQuery | PROJECT:BACKUP |
קבוצת הנתונים | יצירה ומחיקה של קובצי snapshot של טבלאות במערך הנתונים BACKUP. |
| משתמש BigQuery | PROJECT |
פרויקט | מריצים את השאילתה המתוזמנת שיוצרת את תמונות המצב של הטבלה. |
התפקידים האלה מספקים את ההרשאות שחשבון השירות snapshot-bot צריך כדי להריץ שאילתות שיוצרות תמונות מצב של הטבלה DATASET.TABLE וממקמות את תמונות המצב של הטבלה במערך הנתונים BACKUP.
כתיבת שאילתה עם כמה הצהרות
בקטע הזה מוסבר איך לכתוב שאילתה עם כמה הצהרות שיוצרת תמונת מצב של הטבלה DATASET.TABLE באמצעות הצהרת DDL CREATE SNAPSHOT TABLE.
התמונה נשמרת במערך הנתונים BACKUP והתוקף שלה פג אחרי יום אחד.
-- Declare variables DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; -- Set variables SET expiration = DATE_ADD(current_timestamp(), INTERVAL 1 DAY); SET snapshot_name = CONCAT( "BACKUP.TABLE_", FORMAT_DATETIME('%Y%m%d', current_date())); -- Construct the query to create the snapshot SET query = CONCAT( "CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE mydataset.mytable OPTIONS(expiration_timestamp = TIMESTAMP '", expiration, "');"); -- Run the query EXECUTE IMMEDIATE query;
תזמון השאילתה החודשית
כדי לתזמן את השאילתה כך שתפעל בשעה 5:00 בבוקר ביום הראשון של כל חודש:
BQ
במסוף Google Cloud , מפעילים את Cloud Shell:
מזינים את הפקודה הבאה:
bq querybq query --use_legacy_sql=false --display_name="Monthly snapshots of the TABLE table" \ --location="us" --schedule="1 of month 05:00" \ --project_id=PROJECT \ 'DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; SET expiration = DATE_ADD(@run_time, INTERVAL 40 DAY); SET snapshot_name = CONCAT("BACKUP.TABLE_", FORMAT_DATETIME("%Y%m%d", @run_date)); SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE PROJECT.DATASET.TABLE OPTIONS(expiration_timestamp=TIMESTAMP \"", expiration, "\");"); EXECUTE IMMEDIATE query;'
המערכת של BigQuery מתזמנת את השאילתה.
השאילתה עם כמה הצהרות בפקודה של כלי שורת הפקודה של BigQuery שונה מהשאילתה שהפעלתם במסוף Google Cloud באופן הבא:
- השאילתה בכלי שורת הפקודה של BigQuery משתמשת ב-
@run_dateבמקום ב-current_date(). בשאילתה מתוזמנת, הפרמטר@run_dateמכיל את התאריך הנוכחי. אבל בשאילתה אינטראקטיבית, הפרמטר@run_dateלא נתמך. אפשר להשתמש ב-current_date()במקום ב-@run_dateכדי לבדוק שאילתה אינטראקטיבית לפני שמגדירים לה תזמון. - השאילתה בכלי שורת הפקודה של BigQuery משתמשת ב-
@run_timeבמקום ב-current_timestamp(), ומסיבה דומה – הפרמטר@run_timeלא אפשרי בשאילתות אינטראקטיביות, אבל אפשר להשתמש ב-current_timestamp()במקום ב-@run_timeכדי לבדוק את השאילתה האינטראקטיבית. - בשאילתה של כלי שורת הפקודה של BigQuery נעשה שימוש בלוכסן ובמירכאות
\"במקום בגרשיים', כי הגרשיים משמשים להוספת השאילתה.
הגדרת חשבון השירות להרצת השאילתה המתוזמנת
השאילתה מתוזמנת כרגע להפעלה באמצעות פרטי הכניסה שלך.
כדי לעדכן את השאילתה המתוזמנת כך שתפעל עם פרטי הכניסה של חשבון השירות snapshot-bot, פועלים לפי השלבים הבאים:
מריצים את הפקודה
bq lsכדי לקבל את הזהות של עבודת השאילתה המתוזמנת:bq ls --transfer_config=true --transfer_location=us
הפלט אמור להיראות כך:
namedisplayNamedataSourceIdstateprojects/12345/locations/us/transferConfigs/12345Monthly snapshots of the TABLE tablescheduled_queryRUNNINGמריצים את הפקודה
bq updateהבאה באמצעות המזהה בשדהname:bq update --transfer_config --update_credentials \ --service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \ projects/12345/locations/us/transferConfigs/12345
ב-Cloud Shell מוצג אישור שהשאילתה המתוזמנת עודכנה בהצלחה.
בדיקת העבודה
בקטע הזה מוסבר איך לוודא שהשאילתה מתוזמנת בצורה נכונה, איך לבדוק אם היו שגיאות בהרצת השאילתה ואיך לוודא שנוצרים הצילומים החודשיים.
הצגת השאילתה המתוזמנת
כדי לוודא ש-BigQuery תזמן את השאילתה של תמונות המצב החודשיות של הטבלה, צריך לבצע את השלבים הבאים:
המסוף
במסוף Google Cloud , עוברים לדף Scheduled queries:
לוחצים על תמונות מצב חודשיות של הטבלה TABLE.
לוחצים על הגדרה.
מוודאים שמחרוזת השאילתה מכילה את השאילתה, ושהשאילתה מתוזמנת לפעול ביום הראשון של כל חודש.
הצגת היסטוריית ההרצה של השאילתה המתוזמנת
אחרי שהשאילתה המתוזמנת תרוץ, תוכלו לראות אם היא רצה בהצלחה באופן הבא:
המסוף
במסוף Google Cloud , עוברים לדף Scheduled queries:
לוחצים על תיאור השאילתה, Monthly snapshots of the TABLE table (תמונות מצב חודשיות של הטבלה TABLE).
לוחצים על היסטוריית ההרצה.
אפשר לראות את התאריך והשעה שבהם השאילתה הופעלה, אם ההפעלה הייתה מוצלחת, ואם לא, אילו שגיאות התרחשו. כדי לראות פרטים נוספים על ריצה מסוימת, לוחצים על השורה שלה בטבלה היסטוריית הריצות. בחלונית Run details מוצגים פרטים נוספים.
צפייה בתמונות המצב של הטבלה
כדי לוודא שנוצרים צילומים של טבלאות, פועלים לפי השלבים הבאים:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery:
בחלונית הימנית, לוחצים על כלי הניתוחים:

בחלונית Explorer, פותחים את מערך הנתונים
BACKUPומוודאים שנוצרו תמונות המצבTABLE_YYYYMMDD, כאשרYYYYMMDDהוא היום הראשון בכל חודש.לדוגמה:
TABLE_20220601TABLE_20220701TABLE_20220801
המאמרים הבאים
- מידע נוסף על תמונות מצב של טבלאות זמין במאמר בנושא עבודה עם תמונות מצב של טבלאות.
- מידע נוסף על תזמון שאילתות זמין במאמר תזמון שאילתות.
- מידע נוסף על Google Cloud חשבונות שירות