ניהול תצוגות לוגיות

במאמר הזה מוסבר איך לנהל תצוגות ב-BigQuery. אפשר לנהל את התצוגות של BigQuery בדרכים הבאות:

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

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

עדכון תצוגה

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

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

כדי לעדכן תצוגה, אתם צריכים את הרשאות ה-IAM הבאות:

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

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

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

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

כדי לעדכן את שאילתת ה-SQL של התצוגה, צריך גם הרשאות לשאילתות של כל הטבלאות שאליהן מתייחסת שאילתת ה-SQL של התצוגה.

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

עדכון שאילתת SQL של תצוגה

כדי לעדכן את שאילתת ה-SQL שמשמשת להגדרת תצוגה:

  • שימוש במסוף Google Cloud
  • שימוש בפקודה bq update של כלי שורת הפקודה של bq
  • קריאה לשיטת ה-API‏ tables.patch
  • שימוש בספריות הלקוח

אפשר לשנות את ניב ה-SQL מ-SQL מדור קודם ל-GoogleSQL ב-API או בכלי שורת הפקודה של BigQuery. אי אפשר לעדכן תצוגת SQL מדור קודם ל-GoogleSQL במסוףGoogle Cloud .

כדי לעדכן שאילתת SQL של תצוגה:

המסוף

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

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

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

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

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

  4. לוחצים על הכרטיסייה פרטים.

  5. מעל התיבה Query (שאילתה), לוחצים על Edit query (עריכת שאילתה). השאילתה תיפתח בעורך השאילתות.

    עריכת השאילתה

  6. עורכים את שאילתת ה-SQL ולוחצים על שמירת התצוגה > שמירת התצוגה:

    שמירת תצוגה בעורך

BQ

מריצים את הפקודה bq update עם הדגל --view. כדי להשתמש ב-GoogleSQL או כדי לעדכן את דיאלקט השאילתה מ-SQL מדור קודם ל-GoogleSQL, צריך לכלול את הדגל --use_legacy_sql ולהגדיר אותו לערך false.

אם השאילתה מפנה למשאבים של פונקציות חיצוניות שהוגדרו על ידי המשתמש ואוחסנו ב-Cloud Storage או בקבצים מקומיים, צריך להשתמש בדגל --view_udf_resource כדי לציין את המשאבים האלה. הדגל --view_udf_resource לא מוסבר כאן. מידע נוסף על שימוש בפונקציות UDF זמין במאמר פונקציות מוגדרות על ידי המשתמש ב-GoogleSQL.

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

bq update \
    --use_legacy_sql=false \
    --view_udf_resource=path_to_file \
    --view='query' \
    project_id:dataset.view

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

  • path_to_file: ה-URI או הנתיב במערכת הקבצים המקומית לקובץ קוד שצריך לטעון ולהעריך באופן מיידי כמשאב של פונקציה בהגדרת המשתמש שמשמש את התצוגה. כדי לציין כמה קבצים, חוזרים על הפעולה של הוספת הדגל.
  • query: שאילתת GoogleSQL תקינה
  • project_id: מזהה הפרויקט
  • dataset: שם מערך הנתונים שמכיל את התצוגה שאתם מעדכנים
  • view: השם של התצוגה המפורטת שרוצים לעדכן

דוגמאות

מזינים את הפקודה הבאה כדי לעדכן את שאילתת ה-SQL לתצוגה שנקראת myview ב-mydataset. ‫mydataset נמצא בפרויקט ברירת המחדל שלכם. השאילתה לדוגמה שמשמשת לעדכון התצוגה שולפת נתונים ממערך הנתונים הציבורי USA Name Data.

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    mydataset.myview

מזינים את הפקודה הבאה כדי לעדכן את שאילתת ה-SQL לתצוגה שנקראת myview ב-mydataset. ‫mydataset נמצא בmyotherproject, ולא בפרויקט ברירת המחדל. השאילתה לדוגמה שמשמשת לעדכון נתוני השאילתות של התצוגה מגיעה ממערך הנתונים הציבורי USA Name Data.

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    myotherproject:mydataset.myview

API

כדי לעדכן תצוגה מפורטת, צריך להפעיל את ה-method‏ tables.patch עם משאב של טבלה שמכיל מאפיין view מעודכן. מומלץ להשתמש ב-method‏ tables.patch כי ה-method‏ tables.update מחליפה את כל משאב הטבלה.

Go

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

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

import (
	"context"
	"fmt"

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

// updateView demonstrates updating the query metadata that defines a logical view.
func updateView(projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	view := client.Dataset(datasetID).Table(viewID)
	meta, err := view.Metadata(ctx)
	if err != nil {
		return err
	}

	newMeta := bigquery.TableMetadataToUpdate{
		// This example updates a view into the shakespeare dataset to exclude works named after kings.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus NOT LIKE '%king%'",
	}

	if _, err := view.Update(ctx, newMeta, 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.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to update query on a view
public class UpdateViewQuery {

  public static void runUpdateViewQuery() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String updateQuery =
        String.format("SELECT TimestampField, StringField FROM %s.%s", datasetName, tableName);
    updateViewQuery(datasetName, viewName, updateQuery);
  }

  public static void updateViewQuery(String datasetName, String viewName, String query) {
    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();

      // Retrieve existing view metadata
      TableInfo viewMetadata = bigquery.getTable(TableId.of(datasetName, viewName));

      // Update view query
      ViewDefinition viewDefinition = viewMetadata.getDefinition();
      viewDefinition.toBuilder().setQuery(query).build();

      // Set metadata
      bigquery.update(viewMetadata.toBuilder().setDefinition(viewDefinition).build());

      System.out.println("View query updated successfully");
    } catch (BigQueryException e) {
      System.out.println("View query 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 and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateViewQuery() {
  // Updates a view named "my_existing_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_existing_dataset"
  // const tableId = "my_existing_table"
  const dataset = await bigquery.dataset(datasetId);

  // This example updates a view into the USA names dataset to include state.
  const newViewQuery = `SELECT name, state 
  FROM \`bigquery-public-data.usa_names.usa_1910_current\`
  LIMIT 10`;

  // Retrieve existing view
  const [view] = await dataset.table(tableId).get();

  // Retrieve existing view metadata
  const [metadata] = await view.getMetadata();

  // Update view query
  metadata.view = newViewQuery;

  // Set metadata
  await view.setMetadata(metadata);

  console.log(`View ${tableId} updated.`);
}

Python

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

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

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'M'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'M%'"

# Make an API request to update the query property of the view.
view = client.update_table(view, ["view_query"])
print(f"Updated {view.table_type}: {str(view.reference)}")

עדכון תאריך התפוגה של תצוגה

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

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

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

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

המסוף

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

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

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

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

  4. לוחצים על הכרטיסייה פרטים ואז על עריכת הפרטים.

  5. בתיבת הדו-שיח עריכת פרטים, בתפריט שעת התפוגה, בוחרים באפשרות ציון תאריך.

  6. בשדה Expiration time, בוחרים תאריך ושעה באמצעות הכלי לבחירת תאריך.

  7. לוחצים על Save. זמן התפוגה המעודכן מופיע בשורה View expiration בקטע View info.

SQL

משתמשים בהצהרת ה-DDL‏ ALTER VIEW SET OPTIONS:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));

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

    • DATASET_ID: המזהה של מערך הנתונים שמכיל את התצוגה
    • MY_VIEW: השם של התצוגה שרוצים לעדכן
    • NEW_TIMESTAMP: ערך חותמת זמן

  3. לוחצים על הפעלה.

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

BQ

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

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

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

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

דוגמאות

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

bq update \
    --expiration 432000 \
    mydataset.myview

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

bq update \
    --expiration 432000 \
    myotherproject:mydataset.myview

API

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

Go

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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 = 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}.")

עדכון התיאור של תצוגה מפורטת

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

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

כדי לעדכן את התיאור של תצוגה:

המסוף

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

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

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

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

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

  4. לוחצים על הכרטיסייה פרטים.

  5. בקטע הצגת פרטים, לוחצים על עריכת הפרטים.

  6. בתיבת הדו-שיח Edit detail, בשדה Description, מזינים תיאור חדש או עורכים תיאור קיים.

  7. כדי לשמור את התיאור החדש, לוחצים על שמירה.

SQL

משתמשים בהצהרת ה-DDL‏ ALTER VIEW SET OPTIONS:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      description = 'NEW_DESCRIPTION');

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

    • DATASET_ID: המזהה של מערך הנתונים שמכיל את התצוגה
    • MY_VIEW: השם של התצוגה שרוצים לעדכן
    • NEW_DESCRIPTION: התיאור החדש של התצוגה

  3. לוחצים על הפעלה.

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

BQ

מריצים את הפקודה bq update עם הדגל --description. אם אתם מעדכנים תצוגה בפרויקט שאינו פרויקט ברירת המחדל שלכם, צריך להוסיף את מזהה הפרויקט לשם מערך הנתונים בפורמט הבא: [PROJECT_ID]:[DATASET].

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

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

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

דוגמאות

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

bq update \
    --description "Description of myview" \
    mydataset.myview

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

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

API

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

Go

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

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 updateTableDescription() {
  // Updates a table's description.

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

  // Set new table description
  const description = 'New table description.';
  metadata.description = description;
  const [apiResponse] = await table.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${tableId} description: ${newDescription}`);
}

Python

תהליך העדכון של תיאור תצוגה זהה לתהליך העדכון של תיאור טבלה.

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

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

# 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."

צפיות בהעתקה

אפשר להעתיק תצוגה באמצעות מסוף Google Cloud .

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

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

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

  • במערך נתוני המקור, צריך:

    • bigquery.tables.get
    • bigquery.tables.getData (נדרש כדי לגשת לטבלאות שאליהן מתייחסת שאילתת ה-SQL של התצוגה)
  • במערך נתוני היעד צריך את הדברים הבאים:

    • bigquery.tables.create (מאפשרת ליצור עותק של התצוגה במערך הנתונים של היעד)

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

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

בנוסף, אם יש לכם הרשאת bigquery.datasets.create, אתם יכולים להעתיק תצוגות במערכי הנתונים שאתם יוצרים. צריך גם גישה למערך הנתונים של היעד, אלא אם אתם יצרתם אותו.

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

העתקת תצוגה

כדי להעתיק תצוגה, פועלים לפי השלבים הבאים:

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

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

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

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

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

  5. בתיבת הדו-שיח העתקת תצוגה:

    1. בקטע מקור, מוודאים ששם הפרויקט, שם מערך הנתונים ושם הטבלה נכונים.
    2. בקטע יעד, מבצעים את הפעולות הבאות:

      • בקטע Project, בוחרים את הפרויקט שאליו רוצים להעתיק את התצוגה.
      • בשדה Dataset, בוחרים את מערך הנתונים שיכיל את התצוגה המועתקת.
      • בשדה Table, מזינים את שם התצוגה. כדי לשנות את השם של התצוגה, מזינים שם חדש בתיבה. אם מזינים שם חדש, הוא חייב לעמוד בכללים של מתן שמות לתצוגות.
    3. לוחצים על העתקה:

      תיבת דו-שיח להעתקת תצוגה

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

שינוי השם של תצוגה

אפשר לשנות את השם של תצוגה רק כשמשתמשים במסוף Google Cloud כדי להעתיק את התצוגה. הוראות לשינוי השם של תצוגה מפורטת כשמעתיקים אותה מופיעות במאמר בנושא העתקת תצוגה מפורטת.

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

מחיקת תצוגות

כדי למחוק תצוגה:

  • שימוש במסוף Google Cloud
  • שימוש בפקודה bq rm של כלי שורת הפקודה של bq
  • קריאה לשיטת ה-API‏ tables.delete

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

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

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

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

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

כדי למחוק תצוגה, אתם צריכים את הרשאות ה-IAM הבאות:

  • bigquery.tables.delete

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

  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

בנוסף, אם יש לכם הרשאה bigquery.datasets.create, אתם יכולים למחוק תצוגות במערכי הנתונים שאתם יוצרים.

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

מחיקת תצוגה

כדי למחוק תצוגה:

המסוף

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

    כניסה ל-BigQuery

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

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

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

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

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

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

SQL

משתמשים בהצהרת ה-DDL‏ DROP VIEW:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

    DROP VIEW mydataset.myview;

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

    • DATASET_ID: המזהה של מערך הנתונים שמכיל את התצוגה
    • MY_VIEW: השם של התצוגה שרוצים לעדכן
    • NEW_DESCRIPTION: התיאור החדש של התצוגה

  3. לוחצים על הפעלה.

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

BQ

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

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

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

כאשר:

  • project_id הוא מזהה הפרויקט.
  • dataset הוא שם מערך הנתונים שמכיל את הטבלה.
  • view הוא שם התצוגה שרוצים למחוק.

דוגמאות:

אפשר להשתמש בכלי שורת הפקודה של BigQuery כדי להריץ פקודות של bq.

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

הפעלת Cloud Shell

מזינים את הפקודה הבאה כדי למחוק את myview מ-mydataset. ‫mydataset נמצא בפרויקט ברירת המחדל שלכם.

bq rm -t mydataset.myview

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

bq rm -t myotherproject:mydataset.myview

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

bq rm -f -t mydataset.myview

API

מפעילים את שיטת ה-API‏ tables.delete ומציינים את התצוגה שרוצים למחוק באמצעות הפרמטר 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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

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

שחזור תצוגה

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

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

צפייה באבטחה

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

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