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

במאמר הזה מוסבר איך לנהל תצוגות ב-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.

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

נניח שאתם מעדכנים תצוגה ב-Project A (authorized_dataset). השאילתה של התצוגה הזו מצטרפת לטבלאות מ-Project B (shared_dataset) וקוראת לפונקציה מוגדרת-משתמש ב-Project C (udf_dataset).

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

  • פרויקט א': bigquery.tables.update במשאב התצוגה הספציפי שמעדכנים.
  • פרויקט ב': bigquery.datasets.get ו-bigquery.tables.getData במשאבים המשותפים שאליהם מפנים.
  • ‫Project C: bigquery.routines.get על ה-UDF הספציפי שאתם קוראים לו.

חשוב לציין שהזהות שלכם לא צריכה את ההרשאה bigquery.datasets.update בפרויקט ב' או בפרויקט ג' כדי לבצע את העדכון הזה.

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

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

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

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

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

המסוף

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

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

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

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

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

  4. בחלונית הפרטים, לוחצים על Edit > Edit query. השאילתה תיפתח בעורך השאילתות.

  5. עורכים את שאילתת ה-SQL ולוחצים על Save view > Save view:

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

BQ

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

אם השאילתה מפנה למשאבים חיצוניים של פונקציות בהגדרת המשתמש שמאוחסנים ב-Cloud Storage או בקבצים מקומיים, צריך להשתמש בדגל --view_udf_resource כדי לציין את המשאבים האלה. הדגל --view_udf_resource לא מודגם כאן. מידע נוסף על השימוש בפונקציות בהגדרת המשתמש (UDF) זמין במאמר פונקציות בהגדרת המשתמש (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 או הנתיב של מערכת הקבצים המקומית לקובץ קוד שצריך לטעון ולהעריך מיד כמשאב של פונקציה בהגדרת המשתמש (UDF) שמשמשת את התצוגה. חוזרים על הדגל כדי לציין כמה קבצים.
  • ‫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.update מחליפה את כל משאב הטבלה, עדיף להשתמש ב-method‏ tables.patch.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של 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 של כלי שורת הפקודה של BigQuery
  • שליחת קריאה ל-method‏ tables.patch של ה-API
  • שימוש בספריות הלקוח

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

המסוף

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

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

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

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

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

  5. בחלונית Edit details, בתפריט Expiration time, בוחרים באפשרות Specify date.

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

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

SQL

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

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

    כניסה ל-BigQuery

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

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

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

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

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

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

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 במשאב הטבלה. ה-method‏ tables.update מחליפה את כל משאב הטבלה, ולכן עדיף להשתמש ב-method‏ tables.patch. כשמשתמשים ב-API בארכיטקטורת REST, תאריך התפוגה של התצוגה מבוטא באלפיות השנייה.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של 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 של כלי שורת הפקודה של BigQuery
  • שליחת קריאה ל-method‏ tables.patch של ה-API
  • שימוש בספריות הלקוח

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

המסוף

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

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

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

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

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

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

  5. בחלונית Edit details, בשדה Description, מזינים תיאור חדש או עורכים תיאור קיים.

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

SQL

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

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

    כניסה ל-BigQuery

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

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

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

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

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

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

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

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

// 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. בחלונית הימנית, לוחצים על Explorer:

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

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

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

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

  5. בתיבת הדו-שיח Copy view:

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

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

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

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

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

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

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

מחיקת תצוגות

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

  • באמצעות מסוף Google Cloud
  • שימוש בפקודה bq rm של כלי שורת הפקודה של BigQuery
  • קריאה ל-method של ה-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. בחלונית הימנית, לוחצים על Explorer:

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

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

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

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

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

SQL

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

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

    כניסה ל-BigQuery

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

    DROP VIEW mydataset.myview;

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

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

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

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

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.

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

הפעלת 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

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

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, קראו את המאמר תצוגות מורשות.

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