Materialisierte Ansichten verwalten

In diesem Dokument wird beschrieben, wie Sie materialisierte Ansichten in BigQuery verwalten können.

Die BigQuery-Verwaltung von materialisierten Ansichten umfasst die folgenden Vorgänge:

Weitere Informationen zu materialisierten Ansichten finden Sie hier:

Hinweis

Weisen Sie IAM-Rollen (Identity and Access Management) zu, die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument gewähren. Die Berechtigungen, die zum Ausführen einer Aufgabe erforderlich sind (sofern zutreffend), werden im Abschnitt „Erforderliche Berechtigungen“ der Aufgabe aufgelistet.

Materialisierte Ansichten ändern

Sie können eine materialisierte Ansicht über die Google Cloud Console oder das bq-Befehlszeilentool ändern. Verwenden Sie dafür die Datendefinitionssprache (DDL, Data Definition Language) mit ALTER MATERIALIZED VIEW und SET OPTIONS. Eine Liste der Optionen für die materialisierte Ansicht finden Sie unter materialized_view_set_options_list.

Im folgenden Beispiel wird enable_refresh auf true gesetzt. Passen Sie dies nach Bedarf an Ihren Fall an.

Erforderliche Berechtigungen

Zum Ändern von materialisierten Ansichten benötigen Sie die IAM-Berechtigungen bigquery.tables.get und bigquery.tables.update.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Ändern einer materialisierten Ansicht benötigen:

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

Weitere Informationen zu BigQuery Identity and Access Management (IAM) finden Sie unter Vordefinierte Rollen und Berechtigungen.

SQL

Verwenden Sie die DDL-Anweisung ALTER MATERIALIZED VIEW SET OPTIONS, um eine materialisierte Ansicht zu ändern:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

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

    Dabei gilt:

    • PROJECT: der Name des Projekts, das die materialisierte Ansicht enthält
    • DATASET: der Name des Datasets, das die materialisierte Ansicht enthält
    • MATERIALIZED_VIEW: der Name der materialisierten Ansicht, die Sie ändern möchten

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Führen Sie den Befehl bq update aus:

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

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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());
    }
  }
}

Materialisierte Ansichten auflisten

Sie können materialisierte Ansichten über die Google Cloud Console, das bq-Befehlszeilentool oder die BigQuery API auflisten.

Erforderliche Berechtigungen

Zum Auflisten von materialisierten Ansichten in einem Dataset benötigen Sie die IAM-Berechtigung bigquery.tables.list.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Auflisten von materialisierten Ansichten in einem Dataset benötigen:

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

Weitere Informationen zu IAM-Rollen und Berechtigungen in IAM finden Sie unter Vordefinierte Rollen und Berechtigungen.

Der Vorgang zum Auflisten von materialisierten Ansichten ist mit dem Vorgang zum Auflisten von Tabellen identisch. So listen Sie die Ansichten in einem Dataset auf:

Console

  1. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.

  2. Scrollen Sie durch die Liste, um die Tabellen im Dataset aufzurufen. Tabellen, Ansichten und materialisierte Ansichten werden durch unterschiedliche Symbole gekennzeichnet.

    Tabellen- und Ansichtssymbole

bq

Führen Sie den Befehl bq ls aus. Mit dem Flag --format kann die Ausgabe gesteuert werden. Wenn Sie materialisierte Ansichten eines anderen Projekts als Ihres Standardprojekts auflisten möchten, fügen Sie dem Dataset die Projekt-ID im folgenden Format hinzu: project_id:dataset.

bq ls --format=pretty project_id:dataset

Dabei gilt:

  • project_id ist die Projekt-ID.
  • dataset ist der Name des Datasets.

Wenn Sie den Befehl ausführen, wird im Type-Feld der Tabellentyp angezeigt. Beispiel:

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

Beispiele:

Geben Sie den folgenden Befehl ein, um materialisierte Ansichten im Dataset mydataset in Ihrem Standardprojekt aufzulisten:

bq ls --format=pretty mydataset

Geben Sie den folgenden Befehl ein, um materialisierte Ansichten im Dataset mydataset im Projekt myotherproject aufzulisten.

bq ls --format=pretty myotherproject:mydataset

API

Zum Auflisten von materialisierten Ansichten über die API rufen Sie die Methode tables.list auf.

Go

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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))

Informationen zu materialisierten Ansichten abrufen

Sie können Informationen zu einer materialisierten Ansicht mit SQL, dem bq-Befehlszeilentool oder der BigQuery API abrufen.

Erforderliche Berechtigungen

Zum Abfragen von Informationen zu einer materialisierten Ansicht benötigen Sie die folgenden IAM-Berechtigungen (Identity and Access Management):

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

Die folgenden vordefinierten IAM-Rollen enthalten jeweils die vorherigen Berechtigungen:

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

Weitere Informationen zu BigQuery-Berechtigungen finden Sie unter Zugriffssteuerung mit IAM.

So rufen Sie Informationen zu einer materialisierten Ansicht ab, einschließlich aller abhängigen Replikate der materialisierten Ansicht:

SQL

Fragen Sie die Ansicht INFORMATION_SCHEMA.TABLES ab, um Informationen zu materialisierten Ansichten abzurufen:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

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

    Dabei gilt:

    • PROJECT_ID: der Name des Projekts, das die materialisierten Ansichten enthält
    • DATASET_ID: der Name des Datasets, das die materialisierten Ansichten enthält

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Führen Sie den Befehl bq show aus:

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

Ersetzen Sie Folgendes:

  • project_id: Projekt-ID. Sie müssen dieses Flag nur angeben, um Informationen zu einer materialisierten Ansicht in einem anderen Projekt als dem Standardprojekt abzurufen.
  • dataset: Der Name des Datasets, das die materialisierte Ansicht enthält.
  • materialized_view: der Name der materialisierte Ansicht, zu dem Sie Informationen benötigen.

Beispiel:

Geben Sie den folgenden Befehl ein, um Informationen zu der materialisierte Ansichtmy_mv im Dataset report_views im Projekt myproject aufzurufen.

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

API

Rufen Sie die Methode tables.get auf, um Informationen zu materialisierten Ansichten mithilfe der API abzurufen.

Materialisierte Ansichten löschen

Sie können eine materialisierte Ansicht über die Google Cloud Console, das bq-Befehlszeilentool oder die API löschen.

Beim Löschen einer materialisierten Ansicht werden auch alle mit dieser materialisierten Ansicht verknüpften Berechtigungen gelöscht. Wenn Sie eine gelöschte materialisierte Ansicht neu erstellen, müssen Sie auch zuvor alle Zugriffsberechtigungen neu konfigurieren.

Erforderliche Berechtigungen

Zum Erstellen von materialisierten Ansichten benötigen Sie die IAM-Berechtigung bigquery.tables.delete.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie für das Löschen einer Tabelle benötigen:

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

Weitere Informationen zu BigQuery Identity and Access Management (IAM) finden Sie unter Vordefinierte Rollen und Berechtigungen.

SQL

Verwenden Sie die DDL-Anweisung DROP MATERIALIZED VIEW, um eine materialisierte Ansicht zu löschen:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;

    Dabei gilt:

    • PROJECT: der Name des Projekts, das die materialisierte Ansicht enthält
    • DATASET: der Name des Datasets, das die materialisierte Ansicht enthält
    • MATERIALIZED_VIEW: der Name der materialisierten Ansicht, die Sie löschen möchten

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Verwenden Sie den bq rm-Befehl, um die materialisierte Ansicht zu löschen.

API

Rufen Sie die Methode tables.delete auf und geben Sie Werte für die Parameter projectId, datasetId und tableId an:

  • Weisen Sie Ihrer Projekt-ID den Parameter projectId zu.
  • Weisen Sie Ihrer Dataset-ID den Parameter datasetId zu.
  • Weisen Sie der Tabellen-ID der materialisierten Ansicht, die Sie löschen möchten, den Parameter tableId zu.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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());
    }
  }
}

Materialisierte Ansichten aktualisieren

Durch Aktualisieren einer materialisierten Ansicht werden die im Cache gespeicherten Daten der Ansicht aktualisiert, um den aktuellen Status ihrer Basistabellen widerzuspiegeln.

Wenn Sie eine materialisierte Ansicht abfragen, gibt BigQuery Ergebnisse sowohl aus den im Cache gespeicherten Daten der materialisierten Ansicht als auch aus den Daten zurück, die aus der Basistabelle abgerufen wurden. Nach Möglichkeit liest BigQuery nur die Änderungen seit der letzten Aktualisierung der Ansicht. Obwohl kürzlich gestreamte Daten während der Aktualisierung der materialisierten Ansicht möglicherweise nicht enthalten sind, lesen Abfragen immer gestreamte Daten, unabhängig davon, ob eine materialisierte Ansicht verwendet wird.

Wenn Abfrageergebnisse direkt aus der Basistabelle zurückgegeben werden, sind die Rechenkosten höher als bei der Rückgabe von Ergebnissen aus im Cache gespeicherten Daten der materialisierten Ansicht. Wenn Sie die im Cache gespeicherten Daten einer materialisierten Ansicht regelmäßig aktualisieren, wird die Menge der direkt aus der Basistabelle zurückgegebenen Daten reduziert. Dadurch sinken die Rechenkosten.

In diesem Abschnitt wird Folgendes beschrieben:

Automatische Aktualisierung

Sie können die automatische Aktualisierung jederzeit aktivieren oder deaktivieren. Der automatische Aktualisierungsjob wird vom Dienstkonto bigquery-adminbot@system.gserviceaccount.com ausgeführt und im Jobverlauf des Projekts mit der materialisierten Ansicht angezeigt.

Standardmäßig werden im Cache einer materialisierten Ansicht gespeicherte Daten innerhalb von 5 bis 30 Minuten nach einer Änderung an der Basistabelle, z. B. nach Einfügen oder Löschen von Zeilen, automatisch aus der Basistabelle aktualisiert.

Mit der Aktualisierungshäufigkeitsbegrenzung können Sie die Häufigkeit der automatischen Aktualisierung von im Cache gespeicherten Daten verwalten und so die Kosten und die Abfrageleistung von materialisierten Ansichten verwalten.

Automatische Aktualisierung aktivieren und deaktivieren

Wenn Sie die automatische Aktualisierung beim Erstellen einer materialisierten Ansicht deaktivieren möchten, setzen Sie enable_refresh auf false.

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

Bei einer vorhandenen materialisierten Ansicht können Sie den Wert enable_refresh mit ALTER MATERIALIZED VIEW ändern.

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

Frequency Capping festlegen

Sie können festlegen, wie häufig die automatische Aktualisierung durchgeführt wird. Standardmäßig werden materialisierte Ansichten nicht häufiger als alle 30 Minuten aktualisiert.

Die Aktualisierungshäufigkeit kann jederzeit geändert werden.

Wenn Sie beim Erstellen einer materialisierten Ansicht eine Häufigkeitsbegrenzung festlegen möchten, setzen Sie refresh_interval_minutes in DDL (oder refresh_interval_ms in der API und im bq-Befehlszeilentool) auf den von Ihnen erstellten Wert.

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

Ebenso können Sie die Häufigkeitsbegrenzung beim Ändern einer materialisierten Ansicht festlegen. In diesem Beispiel wird davon ausgegangen, dass Sie die automatische Aktualisierung bereits aktiviert haben und nur die Häufigkeitsbegrenzung ändern möchten:

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

Die Mindesthäufigkeit der Aktualisierungen beträgt 1 Minute. Die maximale Häufigkeit für Aktualisierungen beträgt sieben Tage.

Sie können eine materialisierte Ansicht jederzeit manuell aktualisieren. Dies unterliegt nicht der Häufigkeitsbegrenzung.

Best-Effort-Ansatz

Die automatische Aktualisierung erfolgt auf Best-Effort-Basis. BigQuery versucht, innerhalb von fünf Minuten nach einer Änderung an der Basistabelle eine Aktualisierung zu starten (vorausgesetzt, die vorherige Aktualisierung wurde vor über 30 Minuten durchgeführt). Es wird jedoch nicht garantiert, dass die Aktualisierung zu diesem Zeitpunkt gestartet wird oder dass der Vorgang abgeschlossen wird.

Die automatische Aktualisierung wird ähnlich behandelt wie eine Abfrage mit der Batch-Priorität. Wenn das Projekt der materialisierten Ansicht derzeit nicht über die Kapazität verfügt, erfolgt die Aktualisierung verzögert. Wenn das Projekt viele Ansichten enthält, deren Aktualisierung teuer ist, kann jede einzelne Ansicht im Verhältnis zu den Basistabellen erheblich verzögert sein.

Manuelle Aktualisierung

Sie können eine materialisierte Ansicht jederzeit manuell aktualisieren.

Erforderliche Berechtigungen

Zum manuellen Aktualisieren materialisierter Ansichten benötigen Sie die IAM-Berechtigungen bigquery.tables.getData, bigquery.tables.update und bigquery.tables.updateData.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum manuellen Aktualisieren einer materialisierten Ansicht benötigen:

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

Weitere Informationen zu BigQuery Identity and Access Management (IAM) finden Sie unter Vordefinierte Rollen und Berechtigungen.

Rufen Sie das Systemverfahren BQ.REFRESH_MATERIALIZED_VIEW auf, um die Daten in der materialisierten Ansicht zu aktualisieren. Beim Aufruf dieses Systemvorgangs identifiziert BigQuery die Änderungen, die in den Basistabellen stattgefunden haben, und wendet diese Änderungen auf die materialisierte Ansicht an. Die Abfrage zum Ausführen von BQ.REFRESH_MATERIALIZED_VIEW ist beendet, wenn die Aktualisierung abgeschlossen ist.

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

Materialisierte Ansichten überwachen

Mit der BigQuery API können Sie Informationen zu materialisierten Ansichten und Aktualisierungsjobs zu materialisierten Ansichten abrufen. Weitere Informationen finden Sie unter Materialisierte Ansichten überwachen.