ניהול טבלאות

אתם יכולים לנהל את הטבלאות ב-BigQuery כדי לשלוט במחזור החיים שלהן, לייעל את עלויות האחסון ולוודא שמשילות המידע (data governance) תקינה. ניהול טבלאות כולל משימות כמו עדכון מאפיינים, שינוי שם, העתקה ומחיקה של טבלאות. כשמעדכנים את מאפייני הטבלה ב-BigQuery, אפשר לשנות את זמן התפוגה, התיאור, הגדרת הסכימה, התוויות ומצב העיגול שמוגדר כברירת מחדל.

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

לפני שמתחילים

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

עדכון מאפייני הטבלה

אפשר לעדכן את הרכיבים הבאים בטבלה:

ההרשאות הנדרשות

כדי לקבל את ההרשאות שנדרשות לעדכון מאפייני הטבלה, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכת נתונים (roles/bigquery.dataEditor) בטבלה. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

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

  • bigquery.tables.update
  • bigquery.tables.get

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

בנוסף, אם יש לכם את ההרשאה bigquery.datasets.create, אתם יכולים לעדכן את המאפיינים של הטבלאות במערכי הנתונים שאתם יוצרים.

עדכון תיאור של טבלה

אפשר לעדכן תיאור של טבלה בדרכים הבאות:

  • באמצעות מסוף Google Cloud .
  • שימוש בהצהרה של שפת הגדרת נתונים (DDL) ALTER TABLE.
  • באמצעות הפקודה bq update של כלי שורת הפקודה של BigQuery.
  • שליחת קריאה ל-method ‏tables.patch ב-API.
  • שימוש בספריות הלקוח.
  • יצירת תיאור באמצעות Gemini ב-BigQuery.

כדי לעדכן את התיאור של טבלה:

המסוף

אי אפשר להוסיף תיאור כשיוצרים טבלה באמצעות מסוףGoogle Cloud . אחרי שיוצרים את הטבלה, אפשר להוסיף תיאור בדף Details.

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

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

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

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

  3. לוחצים על סקירה כללית > טבלאות ובוחרים טבלה.

  4. בחלונית הפרטים, לוחצים על עריכה > עריכת הפרטים.

  5. בקטע Description, מוסיפים תיאור חדש או עורכים תיאור קיים.

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

SQL

משתמשים בהצהרה ALTER TABLE SET OPTIONS. בדוגמה הבאה מעדכנים את התיאור של טבלה בשם mytable:

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

    כניסה ל-BigQuery

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

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        description = 'Description of mytable');

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

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

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מריצים את הפקודה bq update עם הדגל --description. אם אתם מעדכנים טבלה בפרויקט שהוא לא פרויקט ברירת המחדל, הוסיפו את מזהה הפרויקט לשם של מערך הנתונים בפורמט הבא: project_id:dataset.

    bq update \
    --description "description" \
    project_id:dataset.table

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

    • ‫description: הטקסט שמתאר את הטבלה במירכאות
    • ‫project_id: מזהה הפרויקט
    • ‫dataset: שם קבוצת הנתונים שמכילה את הטבלה שמעדכנים
    • ‫table: שם הטבלה שמעדכנים

    דוגמאות:

    כדי לשנות את התיאור של הטבלה mytable במערך הנתונים mydataset ל-"Description of mytable", מזינים את הפקודה הבאה. מערך הנתונים mydataset נמצא בפרויקט ברירת המחדל.

    bq update --description "Description of mytable" mydataset.mytable
    

    כדי לשנות את התיאור של הטבלה mytable במערך הנתונים mydataset ל-"Description of mytable", מזינים את הפקודה הבאה. מערך הנתונים mydataset נמצא בפרויקט myotherproject, ולא בפרויקט ברירת המחדל.

    bq update \
    --description "Description of mytable" \
    myotherproject:mydataset.mytable
    

API

מפעילים את ה-method‏ tables.patch ומשתמשים במאפיין description במשאב הטבלה כדי לעדכן את תיאור הטבלה. מכיוון שה-method‏ tables.update מחליפה את כל משאב הטבלה, עדיף להשתמש ב-method‏ tables.patch.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
func updateTableDescription(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		Description: "Updated description.",
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;

public class UpdateTableDescription {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String newDescription = "this is the new table description";
    updateTableDescription(datasetName, tableName, newDescription);
  }

  public static void updateTableDescription(
      String datasetName, String tableName, String newDescription) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Table table = bigquery.getTable(datasetName, tableName);
      bigquery.update(table.toBuilder().setDescription(newDescription).build());
      System.out.println("Table description updated successfully to " + newDescription);
    } catch (BigQueryException e) {
      System.out.println("Table description was not updated \n" + e.toString());
    }
  }
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

מגדירים את המאפיין Table.description וקוראים ל-Client.update_table() כדי לשלוח את העדכון ל-API.
# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

Gemini

אתם יכולים ליצור תיאור של טבלה באמצעות Gemini ב-BigQuery, על סמך תובנות מהנתונים. תובנות מנתונים הן דרך אוטומטית לחקור, להבין ולנהל את הנתונים.

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

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

    כניסה ל-BigQuery

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

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

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

  4. בחלונית הפרטים, לוחצים על הכרטיסייה פרטים.

  5. ליד פרטי הטבלה, לוחצים על תיאור הנתונים.

    ‫Gemini יוצר תיאור של הטבלה ותובנות לגביה. המידע יופיע תוך כמה דקות. ניתן להציג את התובנות שנוצרו על ידי AI בכרטיסייה Insights של הטבלה.

  6. כדי לערוך ולשמור את תיאור הטבלה שנוצר:

    1. לצד פרטי הטבלה, לוחצים על הצגת התיאורים.

      התיאור הנוכחי של הטבלה והתיאור שנוצר מוצגים.

    2. בקטע Table description, לוחצים על Save to details.

    3. כדי להחליף את התיאור הנוכחי בתיאור שנוצר, לוחצים על העתקת התיאור שהוצע.

    4. עורכים את תיאור הטבלה לפי הצורך ולוחצים על Save to details.

      תיאור הטבלה מתעדכן באופן מיידי.

    5. כדי לסגור את החלונית Preview descriptions, לוחצים על Close.

עדכון מועד התפוגה של טבלה

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

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

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

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

  • באמצעות מסוף Google Cloud .
  • שימוש בהצהרה של שפת הגדרת נתונים (DDL) ALTER TABLE.
  • באמצעות הפקודה bq update של כלי שורת הפקודה של BigQuery.
  • שליחת קריאה ל-method ‏tables.patch ב-API.
  • שימוש בספריות הלקוח.

כדי לעדכן את זמן התפוגה של טבלה:

המסוף

אי אפשר להוסיף זמן תפוגה כשיוצרים טבלה באמצעות מסוףGoogle Cloud . אחרי שיוצרים טבלה, אפשר להוסיף או לעדכן את תאריך התפוגה שלה בדף Table Details.

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

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

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

  3. לוחצים על סקירה כללית > טבלאות ובוחרים טבלה.

  4. בחלונית הפרטים, לוחצים על עריכה > עריכת הפרטים.

  5. בקטע Expiration time, בוחרים באפשרות Specify date. אחר כך בוחרים את תאריך התפוגה באמצעות הווידג'ט של היומן.

  6. לוחצים על Save. זמן התפוגה המעודכן מופיע בקטע Table info.

SQL

משתמשים בהצהרה ALTER TABLE SET OPTIONS. בדוגמה הבאה מעדכנים את זמן התפוגה של טבלה בשם mytable:

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

    כניסה ל-BigQuery

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

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        -- Sets table expiration to timestamp 2025-02-03 12:34:56
        expiration_timestamp = TIMESTAMP '2025-02-03 12:34:56');

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

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

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מריצים את הפקודה bq update עם הדגל --expiration. אם אתם מעדכנים טבלה בפרויקט שהוא לא פרויקט ברירת המחדל, הוסיפו את מזהה הפרויקט לשם של מערך הנתונים בפורמט הבא: project_id:dataset.

    bq update \
    --expiration integer \
    project_id:dataset.table

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

    • integer: משך החיים שמוגדר כברירת מחדל (בשניות) לטבלה. הערך המינימלי הוא 3,600 שניות (שעה אחת). זמן התפוגה מחושב לפי השעה הנוכחית בתוספת הערך של המספר השלם. אם מציינים את הערך 0, תאריך התפוגה של הטבלה מוסר והיא לא תפוג אף פעם. טבלאות ללא תאריך תפוגה צריך למחוק באופן ידני.
    • project_id: מזהה הפרויקט.
    • ‫dataset: שם מערך הנתונים שמכיל את הטבלה שמעדכנים.
    • ‫table: שם הטבלה שמעדכנים.

    דוגמאות:

    כדי לעדכן את זמן התפוגה של הטבלה mytable במערך הנתונים mydataset ל-5 ימים (432,000 שניות), מזינים את הפקודה הבאה. מערך הנתונים mydataset נמצא בפרויקט ברירת המחדל.

    bq update --expiration 432000 mydataset.mytable
    

    כדי לעדכן את זמן התפוגה של הטבלה mytable במערך הנתונים mydataset ל-5 ימים (432,000 שניות), מזינים את הפקודה הבאה. מערך הנתונים mydataset נמצא בפרויקט myotherproject, ולא בפרויקט ברירת המחדל.

    bq update --expiration 432000 myotherproject:mydataset.mytable
    

API

מפעילים את השיטה tables.patch ומשתמשים במאפיין expirationTime במשאב הטבלה כדי לעדכן את תפוגת הטבלה באלפיות השנייה. השיטה tables.update מחליפה את כל משאב הטבלה, ולכן עדיף להשתמש בשיטה tables.patch.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
// in the future, at which time it will be deleted.
func updateTableExpiration(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;
import java.util.concurrent.TimeUnit;

public class UpdateTableExpiration {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    // Update table expiration to one day.
    Long newExpiration =
        TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS) + System.currentTimeMillis();
    updateTableExpiration(datasetName, tableName, newExpiration);
  }

  public static void updateTableExpiration(
      String datasetName, String tableName, Long newExpiration) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Table table = bigquery.getTable(datasetName, tableName);
      bigquery.update(table.toBuilder().setExpirationTime(newExpiration).build());

      System.out.println("Table expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Table expiration was not updated \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableExpiration() {
  // Updates a table's expiration.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset', // Existing dataset
  // const tableId = 'my_table', // Existing table
  // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table expiration to 5 days from current time
  metadata.expirationTime = expirationTime.toString();
  const [apiResponse] = await table.setMetadata(metadata);

  const newExpirationTime = apiResponse.expirationTime;
  console.log(`${tableId} expiration: ${newExpirationTime}`);
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

מגדירים את המאפיין Table.expires וקוראים ל-Client.update_table() כדי לשלוח את העדכון ל-API.
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import datetime


def update_table_expiration(table_id, expiration):
    orig_table_id = table_id
    orig_expiration = expiration

    from google.cloud import bigquery

    client = bigquery.Client()

    # TODO(dev): Change table_id to the full name of the table you want to update.
    table_id = "your-project.your_dataset.your_table_name"

    # TODO(dev): Set table to expire for desired days days from now.
    expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
        days=5
    )

    table_id = orig_table_id
    expiration = orig_expiration

    table = client.get_table(table_id)  # Make an API request.
    table.expires = expiration
    table = client.update_table(table, ["expires"])  # API request

    print(f"Updated {table_id}, expires {table.expires}.")

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

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.concurrent.TimeUnit;

// Sample to update partition expiration on a dataset.
public class UpdateDatasetPartitionExpiration {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Set the default partition expiration (applies to new tables, only) in
    // milliseconds. This example sets the default expiration to 90 days.
    Long newExpiration = TimeUnit.MILLISECONDS.convert(90, TimeUnit.DAYS);
    updateDatasetPartitionExpiration(datasetName, newExpiration);
  }

  public static void updateDatasetPartitionExpiration(String datasetName, Long newExpiration) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultPartitionExpirationMs(newExpiration).build());
      System.out.println(
          "Dataset default partition expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset partition expiration was not updated \n" + e.toString());
    }
  }
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


def update_dataset_default_partition_expiration(dataset_id: str) -> None:

    from google.cloud import bigquery

    # Construct a BigQuery client object.
    client = bigquery.Client()

    # TODO(developer): Set dataset_id to the ID of the dataset to fetch.
    # dataset_id = 'your-project.your_dataset'

    dataset = client.get_dataset(dataset_id)  # Make an API request.

    # Set the default partition expiration (applies to new tables, only) in
    # milliseconds. This example sets the default expiration to 90 days.
    dataset.default_partition_expiration_ms = 90 * 24 * 60 * 60 * 1000

    dataset = client.update_dataset(
        dataset, ["default_partition_expiration_ms"]
    )  # Make an API request.

    print(
        "Updated dataset {}.{} with new default partition expiration {}".format(
            dataset.project, dataset.dataset_id, dataset.default_partition_expiration_ms
        )
    )

עדכון מצב העיגול של טבלה

אפשר לעדכן את מצב העיגול שמוגדר כברירת מחדל בטבלה באמצעות הצהרת ה-DDL‏ ALTER TABLE SET OPTIONS. בדוגמה הבאה, מצב העיגול שמוגדר כברירת מחדל ב-mytable מתעדכן ל-ROUND_HALF_EVEN:

ALTER TABLE mydataset.mytable
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

כשמוסיפים שדה NUMERIC או BIGNUMERIC לטבלה ולא מציינים מצב עיגול, מצב העיגול מוגדר באופן אוטומטי למצב העיגול שמוגדר כברירת מחדל בטבלה. שינוי מצב העיגול שמוגדר כברירת מחדל בטבלה לא משנה את מצב העיגול של השדות הקיימים.

עדכון הגדרת הסכימה של טבלה

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

שינוי שם של טבלה

אפשר לשנות את השם של טבלה אחרי שהיא נוצרה באמצעות ההצהרה ALTER TABLE RENAME TO. בדוגמה הבאה, השם של mytable משתנה ל-mynewtable:

ALTER TABLE mydataset.mytable
RENAME TO mynewtable;

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

מגבלות על שינוי שמות של טבלאות

  • אם רוצים לשנות שם של טבלה שמוזרמים אליה נתונים, צריך לעצור את ההזרמה, לאשר את כל ההזרמות בהמתנה ולהמתין עד ש-BigQuery יציין שההזרמה לא בשימוש.
  • בדרך כלל אפשר לשנות את השם של טבלה 5 שעות אחרי פעולת הסטרימינג האחרונה, אבל לפעמים זה לוקח יותר זמן. במקרים מסוימים, זמן ההמתנה יכול להיות עד 8 ימים.
  • רשימות ה-ACL הקיימות של הטבלה וכללי מדיניות הגישה לשורות נשמרים, אבל עדכונים של רשימות ה-ACL של הטבלה ושל כללי מדיניות הגישה לשורות שבוצעו במהלך שינוי השם של הטבלה לא נשמרים.
  • אי אפשר לשנות שם של טבלה ולהריץ פקודת DML על אותה טבלה בו-זמנית.
  • שינוי שם של טבלה מסיר את כל ההיבטים של Knowledge Catalog בטבלה.
  • כל אינדקס חיפוש או אינדקס וקטורי שנוצר בטבלה נמחק כשמשנים את שם הטבלה.
  • אי אפשר לשנות את השם של טבלאות חיצוניות.

העתקת טבלה

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

אפשר להעתיק טבלה בדרכים הבאות:

  • משתמשים במסוף Google Cloud .
  • משתמשים בפקודה bq cp.
  • להשתמש בהצהרה של שפת הגדרת נתונים (DDL) CREATE TABLE COPY.
  • מפעילים את ה-method‏ jobs.insert ב-API ומגדירים משימת copy.
  • משתמשים בספריות הלקוח.

מגבלות על העתקת טבלאות

משימות העתקה של טבלאות כפופות למגבלות הבאות:

  • אי אפשר לעצור פעולת העתקה של טבלה אחרי שהיא מתחילה. פעולת העתקת טבלה פועלת באופן אסינכרוני ולא נעצרת גם כשמבטלים את המשימה. בנוסף, תחויבו על העברת נתונים של העתקת טבלה בין אזורים ועל אחסון באזור היעד.
  • כשמעתיקים טבלה, שם טבלת היעד צריך לעמוד באותן מוסכמות למתן שמות כמו כשיוצרים טבלה.
  • עותקי טבלאות כפופים למגבלות של BigQuery על משימות העתקה.
  • במסוף Google Cloud אפשר להעתיק רק טבלה אחת בכל פעם. אי אפשר להחליף טבלה קיימת במערך הנתונים של היעד. הטבלה צריכה להיות עם שם ייחודי במערך הנתונים של היעד.
  • אי אפשר להעתיק כמה טבלאות מקור לטבלת יעד באמצעות מסוף Google Cloud .
  • כשמעתיקים כמה טבלאות מקור לטבלת יעד באמצעות ה-API, כלי שורת הפקודה של BigQuery או ספריות הלקוח, לכל טבלאות המקור צריכות להיות סכימות זהות, כולל חלוקה למחיצות או סידור באשכולות.

    עדכונים מסוימים בסכימה של הטבלה, כמו הסרה של עמודות או שינוי השם שלהן, יכולים לגרום לכך שלטבלאות יהיו סכימות זהות לכאורה אבל ייצוגים פנימיים שונים. זה עלול לגרום לכך שמשימת העתקת טבלה תיכשל עם השגיאה Maximum limit on diverging physical schemas reached. במקרה כזה, אפשר להשתמש בהצהרת CREATE TABLE LIKE כדי לוודא שהסכימה של טבלת המקור תואמת בדיוק לסכימה של טבלת היעד.

  • הזמן שלוקח ל-BigQuery להעתיק טבלאות יכול להשתנות באופן משמעותי בין הרצות שונות, כי האחסון הבסיסי מנוהל באופן דינמי.

  • אי אפשר להעתיק טבלת מקור ולהוסיף אותה לטבלת יעד שיש בה יותר עמודות מאשר בטבלת המקור, ולעמודות הנוספות יש ערכי ברירת מחדל. במקום זאת, אפשר להריץ את הפקודה INSERT destination_table SELECT * FROM source_table כדי להעתיק את הנתונים.

  • אם פעולת ההעתקה מחליפה טבלה קיימת, הגישה ברמת הטבלה לטבלה הקיימת נשמרת. התגים מטבלת המקור לא מועתקים לטבלה שהוחלפה, והתגים בטבלה הקיימת נשמרים. עם זאת, כשמעתיקים טבלאות בין אזורים, התגים בטבלה הקיימת מוסרים.

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

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

התפקידים הנדרשים

כדי לבצע את המשימות שבמסמך הזה, אתם צריכים את ההרשאות הבאות.

תפקידים להעתקת טבלאות ומחיצות

כדי לקבל את ההרשאות שנדרשות להעתקת טבלאות ומחיצות, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכת נתונים (roles/bigquery.dataEditor) בקבוצות הנתונים של המקור והיעד. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

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

  • ‫bigquery.tables.getData בקבוצות הנתונים של המקור והיעד
  • ‫bigquery.tables.get בקבוצות הנתונים של המקור והיעד
  • ‫bigquery.tables.create במערך הנתונים של היעד
  • ‫bigquery.tables.update במערך הנתונים של היעד

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

הרשאה להפעיל משימת העתקה

כדי לקבל את ההרשאה שנדרשת להפעלת משימת העתקה, צריך לבקש מהאדמין להקצות לכם את התפקיד משתמש במשימות (roles/bigquery.jobUser) ב-IAM בקבוצות הנתונים של המקור והיעד. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

התפקיד המוגדר מראש הזה כולל את ההרשאה bigquery.jobs.create, שנדרשת כדי להריץ משימת העתקה.

יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים מוגדרים מראש.

העתקה של טבלת מקור אחת

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

  • באמצעות מסוף Google Cloud .
  • באמצעות הפקודה bq cp של כלי שורת הפקודה של BigQuery.
  • שימוש בהצהרה של שפת הגדרת נתונים (DDL) CREATE TABLE COPY.
  • שליחת קריאה ל-method של ה-API‏ jobs.insert, הגדרת משימה ב-copy וציון המאפיין sourceTable.
  • שימוש בספריות הלקוח.

מסוף Google Cloud וההצהרה CREATE TABLE COPY תומכים רק בטבלת מקור אחת ובטבלת יעד אחת במשימת העתקה. כדי להעתיק כמה קובצי מקור לטבלת יעד, צריך להשתמש בכלי שורת הפקודה של BigQuery או ב-API.

כדי להעתיק טבלת מקור אחת:

המסוף

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

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

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

  3. לוחצים על סקירה כללית > טבלאות ובוחרים טבלה.

  4. בחלונית הפרטים, לוחצים על סמל האפשרויות הנוספות > יצירת עותק של הטבלה.

  5. בתיבת הדו-שיח Copy table, בקטע Destination:

    • בשדה Project, בוחרים את הפרויקט שבו תאוחסן הטבלה שהועתקה.
    • בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים לאחסן את הטבלה שהועתקה. מערכי הנתונים של המקור והיעד צריכים להיות באותו מיקום.
    • בקטע Table, מזינים שם לטבלה החדשה. השם חייב להיות ייחודי במערך הנתונים של היעד. אי אפשר להחליף טבלה קיימת במערך הנתונים של היעד באמצעות מסוף Google Cloud . למידע נוסף על הדרישות לשמות של טבלאות, ראו מתן שמות לטבלאות.
  6. לוחצים על העתקה כדי להתחיל את משימת ההעתקה.

SQL

משתמשים בהצהרה CREATE TABLE COPY כדי להעתיק טבלה בשם table1 לטבלה חדשה בשם table1copy:

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

    כניסה ל-BigQuery

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

    CREATE TABLE myproject.mydataset.table1copy
    COPY myproject.mydataset.table1;

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

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

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מריצים את הפקודה bq cp. אפשר להשתמש בדגלים אופציונליים כדי לשלוט בנטיית הכתיבה של טבלת היעד:

    • ‫-a או --append_table מוסיפים את הנתונים מטבלת המקור לטבלה קיימת במערך הנתונים של היעד.
    • ‫-f או --force מחליפים טבלה קיימת במערך הנתונים של היעד, בלי לבקש אישור.
    • אם הטבלה קיימת בקבוצת הנתונים של היעד, הפקודה -n או --no_clobber מחזירה את הודעת השגיאה הבאה: Table 'project_id:dataset.table' already exists, skipping. אם לא מציינים את -n, פעולת ברירת המחדל היא לבקש מכם לבחור אם להחליף את טבלת היעד.
    • ‫--destination_kms_key הוא מפתח Cloud KMS בניהול הלקוח שמשמש להצפנת טבלת היעד.

    הדוגמה הזו לא ממחישה את --destination_kms_key. למידע נוסף, קראו את המאמר הגנה על נתונים באמצעות מפתחות של Cloud Key Management Service.

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

    (אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום שלכם.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table \
    project_id:dataset.destination_table

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

    • ‫location: שם המיקום. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ .bigqueryrc.
    • project_id: מזהה הפרויקט.
    • ‫dataset: השם של מערך הנתונים של המקור או היעד.
    • ‫source_table: הטבלה שמעתיקים.
    • ‫destination_table: שם הטבלה במערך הנתונים של היעד.

    דוגמאות:

    כדי להעתיק את הטבלה mydataset.mytable לטבלה mydataset2.mytable2, מזינים את הפקודה הבאה. שני מערכי הנתונים נמצאים בפרויקט ברירת המחדל שלכם.

    bq cp mydataset.mytable mydataset2.mytable2
    

    כדי להעתיק את הטבלה mydataset.mytable ולהחליף טבלת יעד עם אותו שם, מזינים את הפקודה הבאה. מערך הנתונים של המקור נמצא בפרויקט ברירת המחדל. מערך הנתונים של היעד נמצא בפרויקט myotherproject. קיצור הדרך -f משמש להחלפת טבלת היעד בלי להציג בקשה.

    bq cp -f \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    כדי להעתיק את הטבלה mydataset.mytable ולהחזיר שגיאה אם מערך הנתונים של היעד מכיל טבלה עם אותו שם, מזינים את הפקודה הבאה. מערך הנתונים של המקור נמצא בפרויקט ברירת המחדל. מערך הנתונים של היעד נמצא בפרויקט myotherproject. קיצור הדרך -n משמש למניעת החלפה של טבלה עם אותו שם.

    bq cp -n \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    כדי להעתיק את הטבלה mydataset.mytable ולהוסיף את הנתונים לטבלת יעד עם אותו שם, מזינים את הפקודה הבאה. מערך הנתונים של המקור נמצא בפרויקט שמוגדר כברירת מחדל. מערך הנתונים של היעד נמצא בפרויקט myotherproject. קיצור הדרך - a משמש להוספה לטבלת היעד.

    bq cp -a mydataset.mytable myotherproject:myotherdataset.mytable
    

API

כדי להעתיק טבלה קיימת באמצעות ה-API, מפעילים את ה-method‏ bigquery.jobs.insert ומגדירים משימת copy. מציינים את המיקום במאפיין location בקטע jobReference של משאב המשימה.

צריך לציין את הערכים הבאים בהגדרות האישיות של המשימה:

"copy": {
      "sourceTable": {       // Required
        "projectId": string, // Required
        "datasetId": string, // Required
        "tableId": string    // Required
      },
      "destinationTable": {  // Required
        "projectId": string, // Required
        "datasetId": string, // Required
        "tableId": string    // Required
      },
      "createDisposition": string,  // Optional
      "writeDisposition": string,   // Optional
    },

כאשר sourceTable מספק מידע על הטבלה שצריך להעתיק, destinationTable מספק מידע על הטבלה החדשה, createDisposition מציין אם ליצור את הטבלה אם היא לא קיימת, ו-writeDisposition מציין אם להחליף טבלה קיימת או להוסיף לה.

C#‎

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery C# API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryCopyTable
{
    public void CopyTable(
        string projectId = "your-project-id",
        string destinationDatasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference sourceTableRef = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        TableReference destinationTableRef = client.GetTableReference(
            destinationDatasetId, "destination_table");
        BigQueryJob job = client.CreateCopyJob(
            sourceTableRef, destinationTableRef)
            .PollUntilCompleted() // Wait for the job to complete.
            .ThrowOnAnyError();

        // Retrieve destination table
        BigQueryTable destinationTable = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Copied {destinationTable.Resource.NumRows} rows from table "
            + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
            + $"to {destinationTable.FullyQualifiedId}."
        );
    }
}

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// copyTable demonstrates copying a table from a source to a destination, and
// allowing the copy to overwrite existing data by using truncation.
func copyTable(projectID, datasetID, srcID, dstID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// srcID := "sourcetable"
	// dstID := "destinationtable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	dataset := client.Dataset(datasetID)
	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

public class CopyTable {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
    String destinationTableId = "MY_DESTINATION_TABLE_NAME";
    String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
    String sourceTableId = "MY_SOURCE_TABLE_NAME";

    copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
  }

  public static void copyTable(
      String sourceDatasetName,
      String sourceTableId,
      String destinationDatasetName,
      String destinationTableId) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table copying job was interrupted. \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function copyTable() {
  // Copies src_dataset:src_table to dest_dataset:dest_table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample
   */
  // const srcDatasetId = "my_src_dataset";
  // const srcTableId = "my_src_table";
  // const destDatasetId = "my_dest_dataset";
  // const destTableId = "my_dest_table";

  // Copy the table contents into another table
  const [job] = await bigquery
    .dataset(srcDatasetId)
    .table(srcTableId)
    .copy(bigquery.dataset(destDatasetId).table(destTableId));

  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery PHP API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $sourceTableId   = 'The BigQuery table ID to copy from';
// $destinationTableId = 'The BigQuery table ID to copy to';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$sourceTable = $dataset->table($sourceTableId);
$destinationTable = $dataset->table($destinationTableId);
$copyConfig = $sourceTable->copy($destinationTable);
$job = $sourceTable->runJob($copyConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Table copied successfully' . PHP_EOL);
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set source_table_id to the ID of the original table.
# source_table_id = "your-project.source_dataset.source_table"

# TODO(developer): Set destination_table_id to the ID of the destination table.
# destination_table_id = "your-project.destination_dataset.destination_table"

job = client.copy_table(source_table_id, destination_table_id)
job.result()  # Wait for the job to complete.

print("A copy of the table created.")

העתקה של כמה טבלאות מקור

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

  • באמצעות הפקודה bq cp של כלי שורת הפקודה של BigQuery.
  • שליחת קריאה ל-method‏ jobs.insert, הגדרת משימת copy וציון המאפיין sourceTables.
  • שימוש בספריות הלקוח.

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

צריך לציין את טבלאות המקור כרשימה מופרדת בפסיקים. אי אפשר להשתמש בתווים כלליים לחיפוש כשמעתיקים כמה טבלאות מקור.

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

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מפעילים את הפקודה bq cp וכוללים כמה טבלאות מקור כרשימה מופרדת בפסיקים. אפשר להשתמש בדגלים אופציונליים כדי לשלוט בנטיית הכתיבה של טבלת היעד:

    • ‫-a או --append_table מוסיפים את הנתונים מטבלאות המקור לטבלה קיימת במערך הנתונים של היעד.
    • ‫-f או --force מחליפים טבלת יעד קיימת במערך הנתונים של היעד, בלי לבקש אישור.
    • אם הטבלה קיימת במערך הנתונים של היעד, הפקודה -n או --no_clobber מחזירה את הודעת השגיאה הבאה: Table 'project_id:dataset.table' already exists, skipping. אם לא מציינים את -n, כברירת מחדל תתבקשו לבחור אם להחליף את טבלת היעד.
    • ‫--destination_kms_key הוא המפתח של Cloud Key Management Service בניהול הלקוח, שמשמש להצפנת טבלת היעד.

    הדוגמה הזו לא ממחישה את --destination_kms_key. למידע נוסף, קראו את המאמר הגנה על נתונים באמצעות מפתחות של Cloud Key Management Service.

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

    (אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום שלכם.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table,project_id:dataset.source_table \
    project_id:dataset.destination_table

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

    • ‫location: שם המיקום. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ .bigqueryrc.
    • project_id: מזהה הפרויקט.
    • ‫dataset: השם של מערך הנתונים של המקור או היעד.
    • ‫source_table: הטבלה שמעתיקים.
    • ‫destination_table: שם הטבלה במערך הנתונים של היעד.

    דוגמאות:

    כדי להעתיק את הטבלה mydataset.mytable ואת הטבלה mydataset.mytable2 לטבלה mydataset2.tablecopy, מזינים את הפקודה הבאה . כל מערכי הנתונים נמצאים בפרויקט שמוגדר כברירת מחדל.

    bq cp \
    mydataset.mytable,mydataset.mytable2 \
    mydataset2.tablecopy

    כדי להעתיק את הטבלה mydataset.mytable ואת הטבלה mydataset.mytable2 לטבלה myotherdataset.mytable, ולהחליף טבלת יעד עם אותו שם, מזינים את הפקודה הבאה. מערך הנתונים של היעד נמצא בפרויקט myotherproject, ולא בפרויקט ברירת המחדל. קיצור הדרך -f משמש להחלפת טבלת היעד בלי להציג בקשה.

    bq cp -f \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    כדי להעתיק את הטבלה myproject:mydataset.mytable ואת הטבלה myproject:mydataset.mytable2, ולהחזיר שגיאה אם קבוצת הנתונים של היעד מכילה טבלה עם אותו שם, מזינים את הפקודה הבאה. מערך הנתונים של היעד נמצא בפרויקט myotherproject. קיצור הדרך -n משמש למניעת החלפה של טבלה עם אותו שם.

    bq cp -n \
    myproject:mydataset.mytable,myproject:mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    כדי להעתיק את הטבלה mydataset.mytable ואת הטבלה mydataset.mytable2 ולהוסיף את הנתונים לטבלת יעד עם אותו שם, מזינים את הפקודה הבאה. מערך הנתונים של המקור נמצא בפרויקט ברירת המחדל. מערך הנתונים של היעד נמצא בפרויקט myotherproject. קיצור הדרך -a משמש להוספה לטבלת היעד.

    bq cp -a \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

API

כדי להעתיק כמה טבלאות באמצעות ה-API, מפעילים את ה-method‏ jobs.insert, מגדירים משימת copy של טבלה ומציינים את המאפיין sourceTables.

מציינים את האזור במאפיין location בקטע jobReference של משאב המשימה.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// copyMultiTable demonstrates using a copy job to copy multiple source tables into a single destination table.
func copyMultiTable(projectID, srcDatasetID string, srcTableIDs []string, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// srcDatasetID := "sourcedataset"
	// srcTableIDs := []string{"table1","table2"}
	// dstDatasetID = "destinationdataset"
	// dstTableID = "destinationtable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	srcDataset := client.Dataset(srcDatasetID)
	dstDataset := client.Dataset(dstDatasetID)
	var tableRefs []*bigquery.Table
	for _, v := range srcTableIDs {
		tableRefs = append(tableRefs, srcDataset.Table(v))
	}
	copier := dstDataset.Table(dstTableID).CopierFrom(tableRefs...)
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;
import java.util.Arrays;

public class CopyMultipleTables {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DATASET_NAME";
    String destinationTableId = "MY_TABLE_NAME";
    String sourceTable1Id = "MY_SOURCE_TABLE_1";
    String sourceTable2Id = "MY_SOURCE_TABLE_2";
    copyMultipleTables(destinationDatasetName, destinationTableId, sourceTable1Id, sourceTable2Id);
  }

  public static void copyMultipleTables(
      String destinationDatasetName,
      String destinationTableId,
      String sourceTable1Id,
      String sourceTable2Id) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
      TableId sourceTable1 = TableId.of(destinationDatasetName, sourceTable1Id);
      TableId sourceTable2 = TableId.of(destinationDatasetName, sourceTable2Id);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(
                  destinationTable, Arrays.asList(sourceTable1, sourceTable2))
              .build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy tables due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table copying job was interrupted. \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function copyTableMultipleSource() {
  // Copy multiple source tables to a given destination.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // sourceTable = 'my_table';
  // destinationTable = 'testing';

  // Create a client
  const dataset = bigquery.dataset(datasetId);

  const metadata = {
    createDisposition: 'CREATE_NEVER',
    writeDisposition: 'WRITE_TRUNCATE',
  };

  // Create table references
  const table = dataset.table(sourceTable);
  const yourTable = dataset.table(destinationTable);

  // Copy table
  const [apiResponse] = await table.copy(yourTable, metadata);
  console.log(apiResponse.configuration.copy);
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dest_table_id to the ID of the destination table.
# dest_table_id = "your-project.your_dataset.your_table_name"

# TODO(developer): Set table_ids to the list of the IDs of the original tables.
# table_ids = ["your-project.your_dataset.your_table_name", ...]

job = client.copy_table(table_ids, dest_table_id)  # Make an API request.
job.result()  # Wait for the job to complete.

print("The tables {} have been appended to {}".format(table_ids, dest_table_id))

העתקת טבלאות בין אזורים

אתם יכולים להעתיק טבלה, תמונת מצב של טבלה או שכפול של טבלה מאזור או ממספר אזורים ב-BigQuery לאזור אחר. זה כולל טבלאות שמופעל בהן מפתח הצפנה בניהול הלקוח (CMEK) ב-Cloud KMS.

העתקת טבלה בין אזורים כרוכה בחיובים נוספים על העברת נתונים, בהתאם לתמחור של BigQuery. חיובים נוספים יחולו גם אם תבטלו את משימת העתקת הטבלה בין אזורים לפני שהיא הושלמה.

כדי להעתיק טבלה בין אזורים, בוחרים באחת מהאפשרויות הבאות:

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מריצים את הפקודה bq cp:

   bq cp \
   -f -n \
   SOURCE_PROJECT:SOURCE_DATASET.SOURCE_TABLE \
   DESTINATION_PROJECT:DESTINATION_DATASET.DESTINATION_TABLE
   

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

  • ‫SOURCE_PROJECT: מזהה הפרויקט של המקור. אם מערך הנתונים של המקור נמצא בפרויקט אחר ולא בפרויקט ברירת המחדל, צריך להוסיף את מזהה הפרויקט לשם של מערך הנתונים של המקור.

  • ‫DESTINATION_PROJECT: מזהה פרויקט היעד. אם מערך הנתונים של היעד נמצא בפרויקט אחר מהפרויקט שמוגדר כברירת מחדל, צריך להוסיף את מזהה הפרויקט לשם של מערך הנתונים של היעד.

  • ‫SOURCE_DATASET: השם של מערך הנתונים המקורי.

  • ‫DESTINATION_DATASET: השם של מערך הנתונים המקבל.

  • ‫SOURCE_TABLE: הטבלה שמעתיקים.

  • ‫DESTINATION_TABLE: שם הטבלה במערך הנתונים של היעד.

בדוגמה הבאה מוצגת פקודה שמעתיקה את הטבלה mydataset_us.mytable ממיקום us במספר אזורים לטבלה mydataset_eu.mytable2 במיקום eu במספר אזורים. שני מערכי הנתונים נמצאים בפרויקט ברירת המחדל.

bq cp --sync=false mydataset_us.mytable mydataset_eu.mytable2

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

bq cp source-project-id:source-dataset-id.source-table-id destination-project-id:destination-dataset-id.destination-table-id

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

bq cp --destination_kms_key=projects/project_id/locations/eu/keyRings/eu_key/cryptoKeys/eu_region mydataset_us.mytable mydataset_eu.mytable2

API

כדי להעתיק טבלה בין אזורים באמצעות ה-API, מפעילים את ה-method‏ jobs.insert ומגדירים משימת copy בטבלה.

מציינים את האזור במאפיין location בקטע jobReference של משאב המשימה.

C#‎

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery C# API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryCopyTable
{
    public void CopyTable(
        string projectId = "your-project-id",
        string destinationDatasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference sourceTableRef = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        TableReference destinationTableRef = client.GetTableReference(
            destinationDatasetId, "destination_table");
        BigQueryJob job = client.CreateCopyJob(
            sourceTableRef, destinationTableRef)
            .PollUntilCompleted() // Wait for the job to complete.
            .ThrowOnAnyError();

        // Retrieve destination table
        BigQueryTable destinationTable = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Copied {destinationTable.Resource.NumRows} rows from table "
            + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
            + $"to {destinationTable.FullyQualifiedId}."
        );
    }
}

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// copyTable demonstrates copying a table from a source to a destination, and
// allowing the copy to overwrite existing data by using truncation.
func copyTable(projectID, datasetID, srcID, dstID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// srcID := "sourcetable"
	// dstID := "destinationtable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	dataset := client.Dataset(datasetID)
	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

public class CopyTable {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
    String destinationTableId = "MY_DESTINATION_TABLE_NAME";
    String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
    String sourceTableId = "MY_SOURCE_TABLE_NAME";

    copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
  }

  public static void copyTable(
      String sourceDatasetName,
      String sourceTableId,
      String destinationDatasetName,
      String destinationTableId) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table copying job was interrupted. \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function copyTable() {
  // Copies src_dataset:src_table to dest_dataset:dest_table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample
   */
  // const srcDatasetId = "my_src_dataset";
  // const srcTableId = "my_src_table";
  // const destDatasetId = "my_dest_dataset";
  // const destTableId = "my_dest_table";

  // Copy the table contents into another table
  const [job] = await bigquery
    .dataset(srcDatasetId)
    .table(srcTableId)
    .copy(bigquery.dataset(destDatasetId).table(destTableId));

  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery PHP API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $sourceTableId   = 'The BigQuery table ID to copy from';
// $destinationTableId = 'The BigQuery table ID to copy to';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$sourceTable = $dataset->table($sourceTableId);
$destinationTable = $dataset->table($destinationTableId);
$copyConfig = $sourceTable->copy($destinationTable);
$job = $sourceTable->runJob($copyConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Table copied successfully' . PHP_EOL);
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set source_table_id to the ID of the original table.
# source_table_id = "your-project.source_dataset.source_table"

# TODO(developer): Set destination_table_id to the ID of the destination table.
# destination_table_id = "your-project.destination_dataset.destination_table"

job = client.copy_table(source_table_id, destination_table_id)
job.result()  # Wait for the job to complete.

print("A copy of the table created.")

מגבלות

העתקת טבלה בין אזורים כפופה למגבלות הבאות:

  • אי אפשר להעתיק טבלה באמצעות מסוף Google Cloud או ההצהרה TABLE COPY DDL.
  • אי אפשר להעתיק טבלה אם יש תגי מדיניות בטבלת המקור.
  • אי אפשר להעתיק את מדיניות ה-IAM שמשויכת לטבלאות. אחרי שההעתקה תסתיים, תוכלו להחיל את אותם כללי מדיניות על היעד.
  • אי אפשר להעתיק טבלה אם יש תגי טבלה בטבלת המקור.
  • אם פעולת ההעתקה מחליפה טבלה קיימת, התגים בטבלה הקיימת יוסרו.
  • אי אפשר להעתיק כמה טבלאות מקור לטבלת יעד אחת.
  • אי אפשר להעתיק טבלאות במצב הוספה. אם משתמשים במצב write_empty, טבלת היעד לא יכולה להיות קיימת.
  • מידע על Time Travel לא מועתק לאזור היעד.
  • כשמעתיקים שכפול או קובץ snapshot של טבלה לאזור חדש, נוצר עותק מלא של הטבלה. הפעולה הזו כרוכה בעלויות אחסון נוספות.
  • רוחב הפס של הרפליקציה הוא 2GiBps פיזיים לכל אזור בכל פרויקט.
  • זמן התפוגה מטבלת המקור מועתק לטבלת היעד.

איך בודקים את ניצול המכסות הנוכחי

כדי לראות את השימוש הנוכחי במשימות של שאילתות, טעינה, חילוץ או העתקה, אפשר להריץ שאילתת INFORMATION_SCHEMA כדי לראות מטא-נתונים על המשימות שהופעלו בתקופה מסוימת. כדי לקבוע את השימוש במכסה לסוג מסוים של משימה, אתם יכולים להשוות את השימוש הנוכחי למגבלת המכסה. בשאילתה לדוגמה הבאה, משתמשים בתצוגה INFORMATION_SCHEMA.JOBS כדי להציג את מספר המשימות של שאילתות, טעינות, חילוצים והעתקות לפי פרויקט:

SELECT
  sum(case  when job_type="QUERY" then 1 else 0 end) as QRY_CNT,
  sum(case  when job_type="LOAD" then 1 else 0 end) as LOAD_CNT,
  sum(case  when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT,
  sum(case  when job_type="COPY" then 1 else 0 end) as CPY_CNT
FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

שגיאות במכסה של המספר המקסימלי של משימות העתקה ליום בכל פרויקט

השגיאה הזו מופיעה ב-BigQuery כשמספר משימות ההעתקה שפועלות בפרויקט חורג מהמגבלה היומית. מידע נוסף על המגבלה של משימות העתקה ליום זמין במאמר משימות העתקה.

הודעת שגיאה

Your project exceeded quota for copies per project

אבחון

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

  • אם משימות ההעתקה נמצאות באזור אחד או בכמה אזורים, אפשר לנסות לשלוח שאילתה לטבלה INFORMATION_SCHEMA.JOBS לגבי אזורים ספציפיים. לדוגמה:

    SELECT
    creation_time, job_id, user_email, destination_table.project_id, destination_table.dataset_id, destination_table.table_id
    FROM `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 DAY) AND CURRENT_TIMESTAMP()
    AND job_type = "COPY"
    order by creation_time DESC

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

  • כדי לראות את כל משימות ההעתקה בכל האזורים, אפשר להשתמש במסנן הבא ב-Cloud Logging:

    resource.type="bigquery_resource"
    protoPayload.methodName="jobservice.insert"
    protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.tableCopy:*
    

רזולוציה

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

מחיקת טבלאות

אתם יכולים למחוק טבלה בדרכים הבאות:

  • באמצעות מסוף Google Cloud .
  • שימוש בהצהרה של שפת הגדרת נתונים (DDL) DROP TABLE.
  • שימוש בפקודה bq rm של כלי שורת הפקודה של BigQuery.
  • שליחת קריאה ל-method ‏tables.delete ב-API.
  • שימוש בספריות הלקוח.

כדי למחוק את כל הטבלאות בקבוצת הנתונים, מוחקים את קבוצת הנתונים.

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

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות למחיקת טבלה, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכת נתונים (roles/bigquery.dataEditor) בקבוצת הנתונים. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

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

  • bigquery.tables.delete
  • bigquery.tables.get

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

מחיקת טבלה

כדי למחוק טבלה:

המסוף

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

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

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

  3. לוחצים על סקירה כללית > טבלאות ובוחרים טבלה.

  4. בחלונית הפרטים, לוחצים על סמל האפשרויות הנוספות > מחיקה.

  5. מקלידים "delete" בתיבת הדו-שיח ולוחצים על Delete כדי לאשר.

SQL

משתמשים בהצהרה DROP TABLE. בדוגמה הבאה מוחקים טבלה בשם mytable:

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

    כניסה ל-BigQuery

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

    DROP TABLE mydataset.mytable;

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

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

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. כדי למחוק טבלה, משתמשים בפקודה bq rm עם הדגל --table (או קיצור הדרך -t). כשמשתמשים בכלי שורת הפקודה של BigQuery כדי להסיר טבלה, צריך לאשר את הפעולה. אפשר להשתמש בדגל --force (או בקיצור הדרך -f) כדי לדלג על האישור.

    אם הטבלה נמצאת במערך נתונים בפרויקט שהוא לא פרויקט ברירת המחדל, צריך להוסיף את מזהה הפרויקט לשם של מערך הנתונים בפורמט הבא: project_id:dataset.

    bq rm \
    -f \
    -t \
    project_id:dataset.table

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

    • ‫project_id: מזהה הפרויקט
    • ‫dataset: השם של מערך הנתונים שמכיל את הטבלה
    • ‫table: שם הטבלה שמוחקים

    דוגמאות:

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

    bq rm -t mydataset.mytable
    

    כדי למחוק את הטבלה mytable ממערך הנתונים mydataset, מזינים את הפקודה הבאה. מערך הנתונים mydataset נמצא בפרויקט myotherproject, ולא בפרויקט ברירת המחדל.

    bq rm -t myotherproject:mydataset.mytable
    

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

    bq rm -f -t mydataset.mytable
    

API

מפעילים את ה-method ‏tables.delete ב-API ומציינים את הטבלה שרוצים למחוק באמצעות הפרמטר tableId.

C#‎

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery C# API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteTable demonstrates deletion of a BigQuery table.
func deleteTable(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	if err := table.Delete(ctx); err != nil {
		return err
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

public class DeleteTable {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    deleteTable(datasetName, tableName);
  }

  public static void deleteTable(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
      boolean success = bigquery.delete(TableId.of(datasetName, tableName));
      if (success) {
        System.out.println("Table deleted successfully");
      } else {
        System.out.println("Table was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Table was not deleted. \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

PHP

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery PHP API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$table->delete();
printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

Ruby

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Ruby API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

פתרון בעיות שקשורות לטבלאות שנמחקו

יש שלוש סיבות עיקריות למחיקת טבלה: מחיקה ידנית של הטבלה, תפוגה ומחיקה של מערך הנתונים.

מחיקת טבלה

בודקים ביומני הביקורת של Cloud אם יש אירוע google.cloud.bigquery.v2.TableService.DeleteTable. כדי לראות טבלאות שנמחקו, בוחרים באחת מהאפשרויות הבאות:

המסוף

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

    כניסה לדף Logs Explorer

  2. בקטע Filter, משתמשים במסנן הבא של Cloud Logging ולוחצים על Run Query:

    resource.type="bigquery_dataset"
    protoPayload.methodName="google.cloud.bigquery.v2.TableService.DeleteTable"
    protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID"
    

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. משתמשים בפקודה gcloud logging read עם המסננים הבאים:

    gcloud logging read '
    resource.type="bigquery_dataset"
    protoPayload.methodName="google.cloud.bigquery.v2.TableService.DeleteTable"
    protoPayload.resourceName=~"projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID"
    '
    

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

    • ‫PROJECT_ID: מזהה הפרויקט
    • ‫DATASET_ID: השם של מערך הנתונים שמכיל את הטבלה
    • ‫TABLE_ID: שם הטבלה שנמחקה

תפוגת תוקף של טבלה

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

המסוף

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

    כניסה לדף Logs Explorer

  2. בקטע Filter, משתמשים במסנן הבא של Cloud Logging ולוחצים על Run Query.

    protoPayload.methodName="InternalTableExpired"
      protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID"
    

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. משתמשים בפקודה gcloud logging read עם המסננים הבאים:

    gcloud logging read '
        protoPayload.methodName="InternalTableExpired"
        protoPayload.resourceName=~"projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID"
        '
    

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

    • ‫PROJECT_ID: מזהה הפרויקט
    • ‫DATASET_ID: השם של מערך הנתונים שמכיל את הטבלה
    • ‫TABLE_ID: שם הטבלה שנמחקה

אתם יכולים לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.TABLE_OPTIONS כדי לבדוק את העמודה expiration_timestamp בטבלאות קיימות.

מחיקת מערך נתונים

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

המסוף

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

    כניסה לדף Logs Explorer

  2. בקטע Filter, משתמשים במסנן הבא של Cloud Logging ולוחצים על Run Query.

    resource.type="bigquery_dataset"
    protoPayload.methodName="google.cloud.bigquery.v2.DatasetService.DeleteDataset"
    protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID"
    

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. משתמשים בפקודה gcloud logging read עם המסננים הבאים:

    gcloud logging read '
    resource.type="bigquery_dataset"
    protoPayload.methodName="google.cloud.bigquery.v2.DatasetService.DeleteDataset"
    protoPayload.resourceName=~"projects/PROJECT_ID/datasets/DATASET_ID"
    '
    

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

    • ‫PROJECT_ID: מזהה הפרויקט
    • ‫DATASET_ID: השם של מערך הנתונים שמכיל את הטבלה

שחזור טבלאות שנמחקו

במאמר שחזור טבלאות שנמחקו מוסבר איך לשחזר טבלאות שנמחקו.

אבטחת טבלאות

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

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