Ansichten erstellen

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

Sie haben dazu folgende Möglichkeiten:

  • Mit der Cloud Console oder der klassischen BigQuery-Web-UI
  • Mit dem Befehl bq mk des Befehlszeilentools
  • Durch Aufrufen der API-Methode tables.insert
  • Mit den Clientbibliotheken
  • Durch Senden einer CREATE VIEW-DDL-Anweisung (Data Definition Language, Datendefinitionssprache)

Benennung von Ansichten

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

  • bis zu 1.024 Zeichen enthalten
  • Groß- und Kleinbuchstaben, Ziffern und Unterstriche enthalten

Beschränkungen von Ansichten

BigQuery-Ansichten unterliegen den folgenden Beschränkungen:

  • 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.
  • Es ist nicht möglich, einen BigQuery-Job auszuführen, der Daten aus einer Ansicht exportiert.
  • 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 Standard-SQL- und Legacy-SQL-Abfragen nicht kombiniert werden. Eine Standard-SQL-Abfrage kann keine Ansichten referenzieren, die unter Verwendung der Legacy-SQL-Syntax definiert wurden.
  • 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 usw. werden, bleibt das gemeldete Schema so lange ungenau, bis die Ansicht aktualisiert wird. Selbst wenn das gemeldete Schema möglicherweise ungenau ist, geben alle gesendeten Abfragen genaue Ergebnisse zurück.
  • Sie können eine Legacy-SQL-Ansicht nicht automatisch auf die Standard-SQL-Syntax aktualisieren. Um eine Abfrage zu ändern, die für die Definition einer Ansicht verwendet wurde, nutzen Sie die Option Abfrage bearbeiten in der Cloud Console oder der klassischen BigQuery-Web-UI, den Befehlszeilenbefehl bq update --view, die Clientbibliotheken oder die API-Methode update bzw. patch.
  • Es ist nicht möglich, eine benutzerdefinierte Funktion 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.

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. Zum Erstellen einer Ansicht benötigen Sie mindestens Berechtigungen des Typs bigquery.tables.create. Die folgenden vordefinierten Cloud IAM-Rollen enthalten bigquery.tables.create-Berechtigungen:

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

Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, hat er dafür außerdem bigquery.dataOwner-Zugriff. Mit bigquery.dataOwner-Zugriff haben Nutzer die Möglichkeit, Ansichten im Dataset zu erstellen.

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

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.

In der Standard-SQL-Abfrage, die zum Erstellen einer Ansicht verwendet wird, muss die Projekt-ID in Tabellen- und Ansichtsreferenzen in der Form `project_id.dataset.table` angegeben sein. Standard-SQL erfordert explizite Projekt-IDs, um Mehrdeutigkeiten beim Abfragen von Ansichten aus verschiedenen Projekten zu vermeiden.

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 das Projekt aus, in dem die Ansicht gespeichert werden soll.
    • Wählen Sie für Dataset-Name das Dataset aus, in dem die Ansicht enthalten sein soll. 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.

Klassische UI

  1. Klicken Sie nach dem Ausführen einer Abfrage im Abfrageergebnisfenster auf die Schaltfläche Ansicht speichern, um die Abfrage als Ansicht zu speichern.

    Ansicht speichern

  2. Gehen Sie im Dialogfeld Ansicht speichern so vor:

    • Wählen Sie für Projekt das Projekt aus, in dem die Ansicht gespeichert werden soll.
    • Wählen Sie für Dataset das Dataset aus, das die Ansicht enthalten soll. 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 im Feld Tabellen-ID den Namen der Ansicht ein.
    • Klicken Sie auf OK.

bq

Führen Sie den Befehl mk mit dem Flag --view aus. Fügen Sie für Standard-SQL-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 zum Verwenden von benutzerdefinierten Funktionen finden Sie unter Benutzerdefinierte Standard-SQL-Funktionen.

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 lokale Dateisystempfad zu einer Codedatei. Dieser wird sofort als benutzerdefinierte Funktionsressource, die von der Ansicht verwendet werden kann, geladen und ausgewertet. Wiederholen Sie das Flag, um mehrere Dateien anzugeben.
  • integer ist die Standardlebensdauer (in Sekunden) für die Ansicht. Der Mindestwert beträgt 3.600 Sekunden bzw. eine Stunde. Die Ablaufzeit entspricht der aktuellen Zeit plus dem ganzzahligen Wert. Wenn Sie beim Erstellen einer Ansicht die Ablaufzeit festlegen, wird die Standardeinstellung für die Ablaufzeit der Tabelle ignoriert.
  • 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. Für Standard-SQL-Ansichten muss die Abfrage die Projekt-ID in Tabellen- und Ansichtsreferenzen in der Form `[PROJECT_ID].[DATASET].[TABLE]` enthalten.
  • 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 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-Namensdaten abgefragt.

bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--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.

API

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

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Go API.

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
}

Node.js

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

// 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: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Python API.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to create a shared view of a source table of
# US States. The source table contains all 50 states, while the view will
# contain only states with names starting with 'W'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "W%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

print("Successfully created view at {}".format(view.full_table_id))

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

Weitere Informationen