Ansichten erstellen

In diesem Dokument erfahren Sie, wie Sie Ansichten in BigQuery erstellen.

Sie haben folgende Möglichkeiten, um eine Ansicht in BigQuery zu erstellen:

  • Google Cloud Console verwenden
  • Den Befehl bq mk des bq-Befehlszeilentools verwenden
  • Durch Aufruf der API-Methode tables.insert
  • Mithilfe der Clientbibliotheken
  • Durch Senden einer CREATE VIEW-DDL-Anweisung (Data Definition Language, Datendefinitionssprache).

Beschränkungen von Ansichten

BigQuery-Ansichten unterliegen den folgenden Beschränkungen:

  • Ansichten sind schreibgeschützt. Sie können beispielsweise keine Abfragen ausführen, die Daten einfügen, aktualisieren oder löschen.
  • Das Dataset, in dem die Ansicht enthalten ist, und das Dataset mit den Tabellen, auf die in der Ansicht verwiesen wird, müssen sich am selben Standort befinden.
  • Ein Verweis innerhalb einer Ansicht muss mit einem Dataset qualifiziert sein. Das Standard-Dataset hat keinen Einfluss auf einen Ansichtstext.
  • Die JSON API-Methode TableDataList kann nicht zum Abrufen von Daten aus einer Ansicht verwendet werden. Weitere Informationen finden Sie unter Tabledata: list.
  • Bei Verwendung von Ansichten können GoogleSQL- und Legacy-SQL-Abfragen nicht kombiniert werden. Eine GoogleSQL-Abfrage kann nicht auf eine Ansicht verweisen, die mit der Legacy-SQL-Syntax definiert ist.
  • Sie können in Ansichten keine Abfrageparameter referenzieren.
  • Die Schemas der zugrunde liegenden Tabellen werden beim Erstellen der Ansicht mit dieser gespeichert. Wenn Spalten nach dem Erstellen der Ansicht hinzugefügt, gelöscht oder geändert werden, ist das gemeldete Schema bis zur Aktualisierung der Ansicht ungenau. Auch wenn das gemeldete Schema ungenau sein könnte, geben die übermittelten Abfragen doch genaue Ergebnisse zurück.
  • Sie können eine Legacy-SQL-Ansicht nicht automatisch auf die GoogleSQL-Syntax aktualisieren. Zum Ändern der Abfrage zum Definieren einer Ansicht verwenden Sie Folgendes:
  • Es ist nicht möglich, eine temporäre benutzerdefinierte Funktion oder eine temporäre Tabelle in die SQL-Abfrage aufzunehmen, die eine Ansicht definiert.
  • In der Abfrage einer Platzhaltertabelle kann keine Ansicht referenziert werden.

Informationen zu Kontingenten und Beschränkungen von Ansichten finden Sie unter Limits von Ansichten.

Hinweis

Erteilen Sie IAM-Rollen (Identity and Access Management), die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument geben.

Erforderliche Berechtigungen

Ansichten werden in BigQuery als Tabellenressourcen behandelt. Daher sind für das Erstellen einer Ansicht dieselben Berechtigungen erforderlich wie für das Erstellen einer Tabelle. Sie benötigen außerdem Berechtigungen zum Abfragen aller Tabellen, auf die die SQL-Abfrage der Ansicht verweist.

Sie benötigen die IAM-Berechtigung bigquery.tables.create, um eine Ansicht zu erstellen. Die vordefinierte IAM-Rolle roles/bigquery.dataEditor enthält die Berechtigungen, die Sie zum Erstellen einer Konfiguration benötigen.

Wenn Sie die Berechtigung bigquery.datasets.create haben, können Sie außerdem Ansichten in den von Ihnen erstellten Datasets erstellen. Wenn Sie eine Ansicht für Daten erstellen möchten, deren Inhaber Sie nicht sind, benötigen Sie die Berechtigung bigquery.tables.getData für diese Tabelle.

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

Benennung anzeigen

Wenn Sie eine Ansicht in BigQuery erstellen, muss der Name der Ansicht im jeweiligen Dataset eindeutig sein. Der Name der Ansicht kann:

  • Enthält Zeichen mit insgesamt bis zu 1.024 UTF-8-Byte.
  • Unicode-Zeichen in Kategorie L (Buchstabe), M (Zeichen), N (Zahl), Pc (Verbindungselement, einschließlich Unterstrich), Pd (Strich), Zs (Leerzeichen) enthalten Weitere Informationen finden Sie unter Allgemeine Kategorie.

Beispiele für gültige Ansichtsnamen: view 01, ग्राहक, 00_お客様, étudiant-01.

Vorsichtsmaßnahmen:

  • Bei Tabellennamen wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden. mytable und MyTable können im selben Dataset gleichzeitig vorhanden sein, es sei denn, sie sind Teil eines Datasets mit deaktivierter Berücksichtigung der Groß-/Kleinschreibung.
  • Einige Ansichtsnamen und Ansichtsnamenspräfixe sind reserviert. Wenn Ihnen eine Fehlermeldung angezeigt wird, dass der Ansichtsname oder das Präfix reserviert ist, wählen Sie einen anderen Namen aus und versuchen Sie es noch einmal.
  • Wenn Sie mehrere Punktoperatoren (.) in eine Sequenz aufnehmen, werden die doppelten Operatoren implizit entfernt.

    Beispiel: project_name....dataset_name..table_name

    Dieses Tag wird folgendermaßen geändert: project_name.dataset_name.table_name

Ansicht erstellen

Sie können eine Ansicht erstellen, indem Sie eine SQL-Abfrage verfassen, mit der die für die Ansicht zugänglichen Daten definiert werden. Die SQL-Abfrage muss aus einer SELECT-Anweisung bestehen. Andere Anweisungstypen (z. B. DML-Anweisungen) und Abfragen mit mehreren Anweisungen sind in Ansichtsabfragen nicht zulässig.

So erstellen Sie eine Ansicht:

Console

  1. Klicken Sie nach dem Ausführen einer Abfrage auf die Schaltfläche Ansicht speichern über dem Fenster mit den Abfrageergebnissen, um die Abfrage als Ansicht zu speichern.

    Ansicht speichern

  2. Gehen Sie im Dialogfeld Ansicht speichern so vor:

    • Wählen Sie für Projektname ein Projekt zum Speichern der Ansicht aus.
    • Wählen Sie für Dataset-Name ein Dataset zum Speichern der Ansicht aus. Das Dataset mit der Ansicht und das Dataset mit den Tabellen, auf die in der Ansicht verwiesen wird, müssen sich am selben Standort befinden.
    • Geben Sie für Tabellenname den Namen der Ansicht ein.
    • Klicken Sie auf Speichern.

SQL

Verwenden Sie die Anweisung CREATE VIEW. Mit der folgenden Anweisung wird eine Ansicht mit dem Namen usa_male_names aus dem öffentlichen Dataset "USA" erstellt.

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE VIEW mydataset.usa_male_names(name, number) AS (
      SELECT
        name,
        number
      FROM
        bigquery-public-data.usa_names.usa_1910_current
      WHERE
        gender = 'M'
      ORDER BY
        number DESC
    );
    

  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 mk mit dem Flag --view aus. Fügen Sie für GoogleSQL-Abfragen das Flag --use_legacy_sql hinzu und setzen Sie es auf false. Optionale Parameter sind --expiration, --description und --label.

Wenn die Abfrage auf externe, benutzerdefinierte Funktionsressourcen verweist, die in Cloud Storage oder lokalen Dateien gespeichert sind, geben Sie diese Ressourcen mit dem Flag --view_udf_resource an. Das Flag --view_udf_resource wird hier nicht erläutert. Weitere Informationen zur Verwendung von benutzerdefinierten Funktionen (UDFs) finden Sie unter UDFs.

Wenn Sie eine Ansicht in einem anderen Projekt als Ihrem Standardprojekt erstellen, geben Sie die Projekt-ID mit dem Flag --project_id an.

bq mk \
--use_legacy_sql=false \
--view_udf_resource=PATH_TO_FILE \
--expiration INTEGER \
--description "DESCRIPTION" \
--label KEY:VALUE \
--view 'QUERY' \
--project_id PROJECT_ID \
DATASET.VIEW

Dabei gilt:

  • PATH_TO_FILE ist der URI oder der Pfad zu einer lokalen Codedatei, die sofort als UDF-Ressource geladen und ausgewertet und dann von der Ansicht verwendet wird. Wiederholen Sie das Flag, um mehrere Dateien anzugeben.
  • INTEGER legt die Lebensdauer für die Ansicht in Sekunden fest. Wenn der Wert für INTEGER 0 ist, läuft die Ansicht nicht ab. Wenn Sie das Flag --expiration nicht angeben, erstellt BigQuery die Ansicht mit der Standardlebensdauer des Datasets.
  • DESCRIPTION ist eine Beschreibung der Ansicht in Anführungszeichen.
  • KEY:VALUE ist das Schlüssel/Wert-Paar für ein Label. Wiederholen Sie das Flag --label, um mehrere Labels anzugeben.
  • QUERY ist eine gültige Abfrage.
  • PROJECT_ID ist Ihre Projekt-ID (wenn Sie kein Standardprojekt konfiguriert haben).
  • DATASET ist ein Dataset in Ihrem Projekt.
  • VIEW ist der Name der Ansicht, die Sie erstellen möchten.

Beispiele:

Geben Sie den folgenden Befehl ein, um eine Ansicht mit dem Namen myview in mydataset in Ihrem Standardprojekt zu erstellen. Die Ablaufzeit wird auf 3.600 Sekunden (1 Stunde), die Beschreibung auf This is my view und das Label auf organization:development festgelegt. Mit der zum Erstellen der Ansicht verwendeten Abfrage werden Daten aus dem öffentlichen Dataset USA Name Data abgefragt.

bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Geben Sie den folgenden Befehl ein, um eine Ansicht mit dem Namen myview in mydataset in myotherproject zu erstellen. Die Beschreibung ist auf This is my view, das Label auf organization:development und der Ablauf der Ansicht auf den Standardtabellenablauf des Datasets gesetzt. Mit der zum Erstellen der Ansicht verwendeten Abfrage werden Daten aus dem öffentlichen Dataset USA Name Data abgefragt.

bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Nachdem die Ansicht erstellt wurde, können Sie die Ablaufzeit, Beschreibung und Labels der Ansicht aktualisieren. Weitere Informationen finden Sie unter Ansichtsattribute aktualisieren.

Terraform

Verwenden Sie die Ressource google_bigquery_table:

Im folgenden Beispiel wird eine Ansicht mit dem Namen myview erstellt:

resource "google_bigquery_dataset" "default" {
  dataset_id                      = "mydataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  labels = {
    billing_group = "accounting",
    pii           = "sensitive"
  }
}

resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "myview"
  deletion_protection = false # set to "true" in production

  view {
    query          = "SELECT global_id, faa_identifier, name, latitude, longitude FROM `bigquery-public-data.faa.us_airports`"
    use_legacy_sql = false
  }

}

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

API

Rufen Sie die Methode tables.insert mit einer Tabellenressource auf, die ein view-Attribut enthält.

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"

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

// createView demonstrates creation of a BigQuery logical view.
func createView(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydatasetid"
	// tableID := "mytableid"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	meta := &bigquery.TableMetadata{
		// This example shows how to create a view of the shakespeare sample dataset, which
		// provides word frequency information.  This view restricts the results to only contain
		// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
	}
	if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); err != nil {
		return err
	}
	return nil
}

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;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to create a view
public class CreateView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String query =
        String.format(
            "SELECT TimestampField, StringField, BooleanField FROM %s.%s", datasetName, tableName);
    createView(datasetName, viewName, query);
  }

  public static void createView(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();

      TableId tableId = TableId.of(datasetName, viewName);

      ViewDefinition viewDefinition =
          ViewDefinition.newBuilder(query).setUseLegacySql(false).build();

      bigquery.create(TableInfo.of(tableId, viewDefinition));
      System.out.println("View created successfully");
    } catch (BigQueryException e) {
      System.out.println("View was not created. \n" + e.toString());
    }
  }
}

Node.js

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

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

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

async function createView() {
  // Creates a new view named "my_shared_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const myDatasetId = "my_table"
  // const myTableId = "my_table"
  // const projectId = "bigquery-public-data";
  // const sourceDatasetId = "usa_names"
  // const sourceTableId = "usa_1910_current";
  const myDataset = await bigquery.dataset(myDatasetId);

  // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
  const options = {
    view: `SELECT name
    FROM \`${projectId}.${sourceDatasetId}.${sourceTableId}\`
    LIMIT 10`,
  };

  // Create a new view in the dataset
  const [view] = await myDataset.createTable(myTableId, options);

  console.log(`View ${view.id} created.`);
}

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

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 'W'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'W%'"

# Make an API request to create the view.
view = client.create_table(view)
print(f"Created {view.table_type}: {str(view.reference)}")

Nachdem Sie eine Ansicht erstellen, fragen Sie diese genauso wie eine Tabelle ab.

Sicherheit ansehen

Informationen zum Steuern des Zugriffs auf Ansichten in BigQuery finden Sie unter Autorisierte Ansichten.

Nächste Schritte