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

במאמר הזה מוסבר איך לנהל תצוגות חומריות ב-BigQuery.

ניהול תצוגות חומריות ב-BigQuery כולל את הפעולות הבאות:

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

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

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

שינוי תצוגות מהותיות

אפשר לשנות תצוגה חומרית באמצעות מסוף Google Cloud או כלי שורת הפקודה של BigQuery, באמצעות שפת הגדרת נתונים (DDL) עם ALTER MATERIALIZED VIEW ו-SET OPTIONS. רשימת האפשרויות של תצוגות מהותיות זמינה במאמר materialized_view_set_options_list.

בדוגמה הבאה, הערך של enable_refresh מוגדר ל-true. משנים לפי הצורך בהתאם לתרחיש השימוש.

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

כדי לשנות תצוגות חומריות, צריך את הרשאות ה-IAM‏ bigquery.tables.get ו-bigquery.tables.update.

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

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

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

SQL

כדי לשנות תצוגה חומרית, משתמשים בהצהרת ALTER MATERIALIZED VIEW SET OPTIONS DDL:

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

    כניסה ל-BigQuery

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

    ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
    SET OPTIONS (enable_refresh = true);

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

    • PROJECT: השם של הפרויקט שמכיל את התצוגה החומרית
    • DATASET: השם של מערך הנתונים שמכיל את התצוגה החומרית
    • MATERIALIZED_VIEW: השם של התצוגה החומרית שרוצים לשנות

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

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

BQ

מריצים את הפקודה bq update:

bq update \
--enable_refresh=true \
--refresh_interval_ms= \
PROJECT.DATASET.MATERIALIZED_VIEW

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.MaterializedViewDefinition;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;

// Sample to update materialized view
public class UpdateMaterializedView {

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

  public static void updateMaterializedView(String datasetName, String materializedViewName) {
    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 tableId = TableId.of(datasetName, materializedViewName);

      // Get existing materialized view
      Table table = bigquery.getTable(tableId);
      MaterializedViewDefinition materializedViewDefinition = table.getDefinition();
      // Update materialized view
      materializedViewDefinition
          .toBuilder()
          .setEnableRefresh(true)
          .setRefreshIntervalMs(1000L)
          .build();
      table.toBuilder().setDefinition(materializedViewDefinition).build().update();
      System.out.println("Materialized view updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Materialized view was not updated. \n" + e.toString());
    }
  }
}

הצגת תצוגות מהותיות

אפשר לראות את רשימת התצוגות הממומשות דרך מסוף Google Cloud , כלי שורת הפקודה של BigQuery או BigQuery API.

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

כדי להציג רשימה של תצוגות חומריות במערך נתונים, צריך את הרשאת ה-IAM‏ bigquery.tables.list.

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

  • roles/bigquery.user
  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

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

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

המסוף

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

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

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

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

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

BQ

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

bq ls --format=pretty project_id:dataset

כאשר:

  • project_id הוא מזהה הפרויקט.
  • dataset הוא שם מערך הנתונים.

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

+-------------------------+--------------------+----------------------+-------------------+
|         tableId         | Type               |        Labels        | Time Partitioning |
+-------------------------+--------------------+----------------------+-------------------+
| mytable                 | TABLE              | department:shipping  |                   |
| mymatview               | MATERIALIZED_VIEW  |                      |                   |
+-------------------------+--------------------+----------------------+-------------------+

דוגמאות:

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

bq ls --format=pretty mydataset

מזינים את הפקודה הבאה כדי להציג רשימה של תצוגות חומריות במערך הנתונים [dataset]mydataset במיקום [location]myotherproject.

bq ls --format=pretty myotherproject:mydataset

API

כדי להציג רשימה של תצוגות חומריות באמצעות ה-API, קוראים ל-method‏ tables.list.

Go

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

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

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listTables demonstrates iterating through the collection of tables in a given dataset.
func listTables(w io.Writer, projectID, datasetID 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()

	ts := client.Dataset(datasetID).Tables(ctx)
	for {
		t, err := ts.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Table: %q\n", t.TableID)
	}
	return nil
}

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 dataset_id to the ID of the dataset that contains
#                  the tables you are listing.
# dataset_id = 'your-project.your_dataset'

tables = client.list_tables(dataset_id)  # Make an API request.

print("Tables contained in '{}':".format(dataset_id))
for table in tables:
    print("{}.{}.{}".format(table.project, table.dataset_id, table.table_id))

קבלת מידע על תצוגות חומריות

אפשר לקבל מידע על תצוגה חומרית באמצעות SQL, כלי שורת הפקודה של BigQuery או BigQuery API.

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

כדי לשלוח שאילתה לגבי תצוגה חומרית, אתם צריכים את ההרשאות הבאות לניהול זהויות והרשאות גישה (IAM):

  • bigquery.tables.get
  • bigquery.tables.list
  • bigquery.routines.get
  • bigquery.routines.list

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

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.admin

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

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

SQL

כדי לקבל מידע על תצוגות מהותיות, מריצים שאילתה בתצוגה INFORMATION_SCHEMA.TABLES:

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

    כניסה ל-BigQuery

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

    SELECT * FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES
    WHERE table_type = 'MATERIALIZED VIEW';

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

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

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

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

BQ

משתמשים בפקודה bq show:

bq show --project=project_id --format=prettyjson dataset.materialized_view

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

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

דוגמה:

מזינים את הפקודה הבאה כדי להציג מידע על התצוגה החומרית my_mv במערך הנתונים report_views בפרויקט myproject.

bq show --project=myproject --format=prettyjson report_views.my_mv

API

כדי לקבל מידע על תצוגה חומרית באמצעות ה-API, מפעילים את השיטה tables.get.

מחיקת תצוגות מהותיות

אפשר למחוק תצוגה חומרית דרך מסוף Google Cloud , כלי שורת הפקודה של BigQuery או ה-API.

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

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

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

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

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

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

SQL

כדי למחוק תצוגה חומרית, משתמשים בהצהרת DROP MATERIALIZED VIEW DDL:

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

    כניסה ל-BigQuery

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

    DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;

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

    • PROJECT: השם של הפרויקט שמכיל את התצוגה החומרית
    • DATASET: השם של מערך הנתונים שמכיל את התצוגה החומרית
    • MATERIALIZED_VIEW: השם של התצוגה החומרית שרוצים למחוק

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

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

BQ

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

API

קוראים לשיטה tables.delete ומציינים ערכים לprojectId, לdatasetId ולtableId פרמטרים:

  • מקצים את הפרמטר projectId למזהה הפרויקט.
  • מקצים את הפרמטר datasetId למזהה של מערך הנתונים.
  • מקצים את הפרמטר tableId למזהה הטבלה של התצוגה החומרית שרוצים למחוק.

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;

// Sample to delete materialized view
public class DeleteMaterializedView {

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

  public static void deleteMaterializedView(String datasetName, String materializedViewName) {
    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 tableId = TableId.of(datasetName, materializedViewName);

      boolean success = bigquery.delete(tableId);
      if (success) {
        System.out.println("Materialized view deleted successfully");
      } else {
        System.out.println("Materialized view was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Materialized view was not found. \n" + e.toString());
    }
  }
}

רענון תצוגות מהותיות

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

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

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

בקטע הזה מוסבר איך:

רענון אוטומטי

אפשר להפעיל או להשבית את הרענון האוטומטי בכל שלב. עבודת הרענון האוטומטי מתבצעת על ידי חשבון השירות bigquery-adminbot@system.gserviceaccount.com ומופיעה בהיסטוריית העבודות של פרויקט התצוגה החומרית.

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

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

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

כדי להשבית את הרענון האוטומטי כשיוצרים תצוגה חומרית, מגדירים את enable_refresh ל-false.

CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
PARTITION BY RANGE_BUCKET(column_name, buckets)
OPTIONS (enable_refresh = false)
AS SELECT ...

בתצוגה חומרית קיימת, אפשר לשנות את הערך של enable_refresh באמצעות ALTER MATERIALIZED VIEW.

ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
SET OPTIONS (enable_refresh = true);

הגדרת מכסת תדירות

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

אפשר לשנות את מכסת התדירות של הרענון בכל שלב.

כדי להגדיר מכסה לתדירות הרענון כשיוצרים תצוגה חומרית, מגדירים את refresh_interval_minutes ב-DDL (או את refresh_interval_ms ב-API ובכלי שורת הפקודה של BigQuery) לערך הרצוי.

CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
OPTIONS (enable_refresh = true, refresh_interval_minutes = 60)
AS SELECT ...

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

ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
SET OPTIONS (refresh_interval_minutes = 60);

מכסת התדירות המינימלית של רענון היא דקה אחת. מכסת התדירות המקסימלית של הרענון היא 7 ימים.

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

ללא התחייבות

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

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

רענון ידני

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

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

כדי לרענן ידנית תצוגות חומריות, אתם צריכים את הרשאות ה-IAM‏ bigquery.tables.getData, bigquery.tables.update ו-bigquery.tables.updateData.

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

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

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

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

CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');

מעקב אחרי תצוגות מהותיות

אפשר לקבל מידע על תצוגות חומריות ועל עבודות רענון של תצוגות חומריות באמצעות BigQuery API. מידע נוסף זמין במאמר בנושא מעקב אחרי תצוגות חומריות.