יצירת קובצי snapshot של טבלאות

במאמר הזה מוסבר איך ליצור קובץ snapshot של טבלה באמצעות מסוףGoogle Cloud , הצהרת ה-SQL‏ CREATE SNAPSHOT TABLE, הפקודה bq cp --snapshot או ה-API‏ jobs.insert. המסמך הזה מיועד למשתמשים שמכירים את תמונות המצב של טבלאות ב-BigQuery.

הרשאות ותפקידים

בקטע הזה מתוארות ההרשאות של ניהול זהויות והרשאות גישה (IAM) שנדרשות כדי ליצור תמונת מצב של טבלה, והתפקידים המוגדרים מראש ב-IAM שמעניקים את ההרשאות האלה.

הרשאות

כדי ליצור קובץ snapshot של טבלה, צריך את ההרשאות הבאות:

הרשאה משאב הערות
כל התנאים הבאים:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
הטבלה שרוצים ליצור לה קובץ snapshot. מכיוון שתפוגת התוקף של קובץ ה-snapshot מוחקת את קובץ ה-snapshot במועד מאוחר יותר, כדי ליצור קובץ snapshot עם זמן תפוגה, אתם צריכים את ההרשאה bigquery.tables.deleteSnapshot.
bigquery.tables.create
bigquery.tables.updateData
מערך הנתונים שמכיל את קובץ ה-snapshot של הטבלה.

תפקידים

אלה התפקידים המוגדרים מראש ב-BigQuery שכוללים את ההרשאות הנדרשות:

תפקיד משאב הערות
לפחות אחד מהבאים:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

ולפחות אחד מהבאים:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
הטבלה שרוצים ליצור לה קובץ snapshot. אפשר להשתמש רק ב-bigquery.dataOwner, ב-bigquery.admin וב-bigquery.studioAdmin כדי ליצור קובץ snapshot עם זמן תפוגה.
לפחות אחד מהבאים:

bigquery.dataEditor
bigquery.dataOwner
bigquery.studioAdmin
bigquery.admin
מערך הנתונים שמכיל את קובץ ה-snapshot החדש של הטבלה.

מגבלות

למידע על המגבלות של תמונות מצב של טבלאות, ראו המגבלות של תמונות מצב של טבלאות.

בנוסף, יצירת תמונת מצב של טבלה כפופה למגבלות הבאות, שחלות על כל המשימות להעתקת טבלאות:

  • כשיוצרים תמונת מצב של טבלה, השם שלה צריך לעמוד באותם כללי מתן שמות כמו כשיוצרים טבלה.
  • יצירת תמונת מצב של טבלה כפופה למגבלות של BigQuery על משימות העתקה.
  • מערך הנתונים של תמונת המצב של הטבלה צריך להיות באותו אזור ובאותו ארגון כמו מערך הנתונים שמכיל את הטבלה שממנה אתם יוצרים תמונת מצב. לדוגמה, אי אפשר ליצור קובץ snapshot של טבלה במערך נתונים שמבוסס על ארה"ב, אם הטבלה נמצאת במערך נתונים שמבוסס על האיחוד האירופי. במקום זאת, צריך ליצור עותק של הטבלה.
  • הזמן שלוקח ל-BigQuery ליצור תמונות מצב של טבלאות יכול להשתנות באופן משמעותי בין הרצות שונות, כי האחסון הבסיסי מנוהל באופן דינמי.
  • כשיוצרים תמונת מצב של טבלה באמצעות BigQuery CLI, לתמונת המצב יש את מפתח ההצפנה שמוגדר כברירת מחדל במערך הנתונים של היעד. כשיוצרים קובץ Snapshot של טבלה באמצעות SQL, לקובץ ה-Snapshot יש את אותו מפתח הצפנה כמו לטבלת המקור.

יצירת תמונת מצב של טבלה

השיטה המומלצת היא ליצור קובץ snapshot של טבלה במערך נתונים שונה מזה של טבלת הבסיס. כך אפשר לשחזר את מסד הנתונים הטבלאי מתמונת המצב של הטבלה, גם אם קבוצת הנתונים של מסד הנתונים הטבלאי נמחקה בטעות.

כשיוצרים תמונת מצב של טבלה, מציינים את הטבלה שרוצים ליצור לה תמונת מצב ואת השם הייחודי של תמונת המצב של הטבלה. אפשר גם לציין את השעה של קובץ ה-snapshot ואת תאריך התפוגה של קובץ ה-snapshot של הטבלה.

יצירת תמונת מצב של טבלה עם תאריך תפוגה

כדי ליצור תמונת מצב של טבלה שתוקפה יפוג אחרי 24 שעות, אתם יכולים להשתמש באחת מהאפשרויות הבאות:

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז על מערך הנתונים.

  4. לוחצים על Overview > Tables, ואז על שם הטבלה שרוצים ליצור לה תמונת מצב.

  5. בחלונית הפרטים, לוחצים על More > Create snapshot.

  6. בחלונית Create table snapshot שמופיעה, מזינים את פרטי Project,‏ Dataset ו-Table של קובץ ה-snapshot החדש של הטבלה.

  7. בשדה Expiration time, מזינים את התאריך והשעה של 24 שעות מעכשיו.

  8. לוחצים על Save.

SQL

משתמשים בהצהרת ה-DDL‏ CREATE SNAPSHOT TABLE:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
      OPTIONS (
        expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SNAPSHOT_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
    • ‫SNAPSHOT_DATASET_NAME: השם של מערך הנתונים שבו רוצים ליצור את קובץ ה-snapshot.
    • ‫SNAPSHOT_NAME: השם של קובץ ה-snapshot שאתם יוצרים.
    • ‫TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
    • ‫TABLE_DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
    • ‫TABLE_NAME: שם הטבלה שממנה יוצרים את קובץ ה-snapshot.
    • TIMESTAMP_VALUE: ערך של חותמת זמן שמייצג את התאריך והשעה בעוד 24 שעות.

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

מזינים את הפקודה הבאה ב-Cloud Shell:

כניסה ל-Cloud Shell

bq cp \
--snapshot \
--no_clobber \
--expiration=86400 \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_NAME: שם הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫SNAPSHOT_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_DATASET_NAME: השם של מערך הנתונים שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_NAME: השם של קובץ ה-snapshot שאתם יוצרים.

חובה להשתמש בדגל --no_clobber.

API

מפעילים את השיטה jobs.insert עם הפרמטרים הבאים:

פרמטר ערך
projectId מזהה הפרויקט לחיוב על הפעולה הזו.
גוף הבקשה
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY",
      "destinationExpirationTime":"TIMESTAMP_VALUE"
    }
  }
}

מחליפים את מה שכתוב בשדות הבאים:

  • ‫TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_NAME: שם הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫SNAPSHOT_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_DATASET_NAME: השם של מערך הנתונים שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_NAME: השם של קובץ ה-snapshot שאתם יוצרים.
  • TIMESTAMP_VALUE: ערך של חותמת זמן שמייצג את התאריך והשעה בעוד 24 שעות.

כמו בטבלאות, אם לא מציינים תאריך תפוגה, תמונת המצב של הטבלה תפוג אחרי זמן התפוגה שמוגדר כברירת מחדל לטבלה או למערך הנתונים שמכיל את תמונת המצב של הטבלה.

יצירת קובץ snapshot של טבלה באמצעות נסיעה בזמן

כדי ליצור תמונת מצב של טבלה כפי שהייתה לפני שעה, אפשר להשתמש באחת מהאפשרויות הבאות:

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז על מערך הנתונים.

  4. לוחצים על Overview > Tables, ואז על שם הטבלה שרוצים ליצור לה תמונת מצב.

  5. בחלונית הפרטים, לוחצים על More > Create snapshot.

  6. בחלונית Create table snapshot שמופיעה, מזינים את פרטי Project,‏ Dataset ו-Table של קובץ ה-snapshot החדש של הטבלה.

  7. בשדה Snapshot time, מזינים את התאריך והשעה של לפני שעה.

  8. לוחצים על Save.

SQL

משתמשים בהצהרת ה-DDL‏ CREATE SNAPSHOT TABLE עם סעיף FOR SYSTEM_TIME AS OF:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
    FOR SYSTEM_TIME AS OF
      TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SNAPSHOT_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
    • ‫SNAPSHOT_DATASET_NAME: השם של מערך הנתונים שבו רוצים ליצור את קובץ ה-snapshot.
    • ‫SNAPSHOT_NAME: השם של קובץ ה-snapshot שאתם יוצרים.
    • ‫TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
    • ‫TABLE_DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
    • ‫TABLE_NAME: שם הטבלה שממנה יוצרים את קובץ ה-snapshot.

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

מזינים את הפקודה הבאה ב-Cloud Shell:

כניסה ל-Cloud Shell

bq cp \
--no_clobber \
--snapshot \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_NAME: שם הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫SNAPSHOT_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_DATASET_NAME: השם של מערך הנתונים שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_NAME: השם של קובץ ה-snapshot שאתם יוצרים.

חובה להשתמש בדגל --no_clobber.

API

מפעילים את ה-method‏ jobs.insert עם הפרמטרים הבאים:

פרמטר ערך
projectId מזהה הפרויקט לחיוב על הפעולה הזו.
גוף הבקשה
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME@-360000"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

מחליפים את מה שכתוב בשדות הבאים:

  • ‫TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫TABLE_NAME: שם הטבלה שממנה יוצרים את קובץ ה-snapshot.
  • ‫SNAPSHOT_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_DATASET_NAME: השם של מערך הנתונים שבו רוצים ליצור את קובץ ה-snapshot.
  • ‫SNAPSHOT_NAME: השם של קובץ ה-snapshot שאתם יוצרים.

למידע נוסף על ציון גרסה קודמת של טבלה, קראו את המאמר גישה לנתונים היסטוריים באמצעות נסיעה בזמן.

בקרת גישה לטבלאות

כדי לשלוט בגישה לטבלאות ב-BigQuery, קראו את המאמר בקרת גישה למשאבים באמצעות IAM.

כשיוצרים תמונת מצב של טבלה, הגישה ברמת הטבלה לתמונת המצב של הטבלה מוגדרת באופן הבא:

  • אם קובץ ה-snapshot של הטבלה מחליף טבלה קיימת, הגישה ברמת הטבלה לטבלה הקיימת נשמרת. התגים לא מועתקים ממסד הנתונים הטבלאי.
  • אם תמונת המצב של הטבלה היא משאב חדש, הגישה ברמת הטבלה לתמונת המצב של הטבלה נקבעת לפי כללי מדיניות הגישה של מערך הנתונים שבו נוצרה תמונת המצב של הטבלה. בנוסף, התגים מועתקים ממסד הנתונים הטבלאי לתמונת המצב של הטבלה.

המאמרים הבאים