Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) in Google Standard-SQL

Mithilfe von DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) können Sie BigQuery-Ressourcen mit der Google Standard-SQL-Abfragesyntax erstellen und ändern. Mit DDL-Befehlen können Sie Ressourcen erstellen, ändern und löschen, z. B.:Tabellen ,Tabellenklone ,Tabellen-Snapshots ,Ansichten ,benutzerdefinierte Funktionen (UDFs) undZugriffsrichtlinien auf Zeilenebene.

Erforderliche Berechtigungen

Zum Erstellen eines Jobs, der eine DDL-Anweisung ausführt, benötigen Sie die Berechtigung bigquery.jobs.create für das Projekt, in dem Sie den Job ausführen. Jede DDL-Anweisung erfordert außerdem bestimmte Berechtigungen für die betroffenen Ressourcen, die unter jeder Anweisung dokumentiert sind.

IAM-Rollen

Die vordefinierten IAM-Rollen bigquery.user, bigquery.jobUser und bigquery.admin enthalten die erforderliche bigquery.jobs.create-Berechtigung.

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

DDL-Anweisungen ausführen

Sie können DDL-Anweisungen mit der Google Cloud Console, dem bq-Befehlszeilentool oder der REST API jobs.query oder programmatisch mithilfe der BigQuery API-Clientbibliotheken ausführen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite "BigQuery" auf.

    BigQuery aufrufen

  2. Klicken Sie auf Neue Abfrage erstellen.

    Grafik: Neue Abfrage erstellen

  3. Geben Sie die DDL-Anweisung in den Textbereich des Abfrageeditors ein. Beispiel:

     CREATE TABLE mydataset.newtable ( x INT64 )
     

  4. Klicken Sie auf Ausführen.

bq

Geben Sie den Befehl bq query ein und legen Sie die DDL-Anweisung als Suchparameter fest. Legen Sie das Flag use_legacy_sql auf false fest.

bq query --use_legacy_sql=false \
  'CREATE TABLE mydataset.newtable ( x INT64 )'

API

Rufen Sie die Methode jobs.query auf und geben Sie die DDL-Anweisung im Attribut query des Anfragetextes an.

Die DDL-Funktionalität erweitert die von einer Jobressource zurückgegebenen Informationen. statistics.query.statementType enthält die folgenden zusätzlichen Werte zur DDL-Unterstützung:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query hat zwei zusätzliche Felder:

  • ddlOperationPerformed: Der DDL-Vorgang wurde ausgeführt, möglicherweise abhängig davon, ob das DDL-Ziel vorhanden ist. Zu den aktuellen Werten gehören:
    • CREATE: Die Abfrage hat das DDL-Ziel erstellt.
    • SKIP: Managementfrei. Beispiele: CREATE TABLE IF NOT EXISTS wurde gesendet und die Tabelle ist vorhanden. Oder DROP TABLE IF EXISTS wurde gesendet und die Tabelle ist nicht vorhanden.
    • REPLACE: Die Abfrage hat das DDL-Ziel ersetzt. Beispiel: CREATE OR REPLACE TABLE wurde gesendet und die Tabelle ist bereits vorhanden.
    • DROP: Die Abfrage hat das DDL-Ziel gelöscht.
  • ddlTargetTable: Wenn Sie die Anweisung CREATE TABLE/VIEW oder DROP TABLE/VIEW senden, wird die Zieltabelle als Objekt mit drei Feldern zurückgegeben:
    • „projectId“: String
    • „datasetId“: String
    • „tableId“: String

Java

Rufen Sie die Methode BigQuery.create() auf, um einen Abfragejob zu starten. Rufen Sie die Methode Job.waitFor() auf, um auf den Abschluss der DDL-Abfrage zu warten.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;

// Sample to create a view using DDL
public class DDLCreateView {

  public static void runDDLCreateView() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String tableId = "MY_VIEW_ID";
    String ddl =
        "CREATE VIEW "
            + "`"
            + projectId
            + "."
            + datasetId
            + "."
            + tableId
            + "`"
            + " OPTIONS("
            + " expiration_timestamp=TIMESTAMP_ADD("
            + " CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),"
            + " friendly_name=\"new_view\","
            + " description=\"a view that expires in 2 days\","
            + " labels=[(\"org_unit\", \"development\")]"
            + " )"
            + " AS SELECT name, state, year, number"
            + " FROM `bigquery-public-data.usa_names.usa_1910_current`"
            + " WHERE state LIKE 'W%'`";
    ddlCreateView(ddl);
  }

  public static void ddlCreateView(String ddl) {
    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();

      QueryJobConfiguration config = QueryJobConfiguration.newBuilder(ddl).build();

      // create a view using query and it will wait to complete job.
      Job job = bigquery.create(JobInfo.of(config));
      job = job.waitFor();
      if (job.isDone()) {
        System.out.println("View created successfully");
      } else {
        System.out.println("View was not created");
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("View was not created. \n" + e.toString());
    }
  }
}

Node.js

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

async function ddlCreateView() {
  // Creates a view via a DDL query

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const projectId = "my_project"
  // const datasetId = "my_dataset"
  // const tableId = "my_new_view"

  const query = `
  CREATE VIEW \`${projectId}.${datasetId}.${tableId}\`
  OPTIONS(
      expiration_timestamp=TIMESTAMP_ADD(
          CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
      friendly_name="new_view",
      description="a view that expires in 2 days",
      labels=[("org_unit", "development")]
  )
  AS SELECT name, state, year, number
      FROM \`bigquery-public-data.usa_names.usa_1910_current\`
      WHERE state LIKE 'W%'`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);

  job.on('complete', metadata => {
    console.log(`Created new view ${tableId} via job ${metadata.id}`);
  });
}

Python

Rufen Sie die Methode Client.query() auf, um einen Abfragejob zu starten. Rufen Sie die Methode QueryJob.result() auf, um auf den Abschluss der DDL-Abfrage zu warten.

# from google.cloud import bigquery
# project = 'my-project'
# dataset_id = 'my_dataset'
# table_id = 'new_view'
# client = bigquery.Client(project=project)

sql = """
CREATE VIEW `{}.{}.{}`
OPTIONS(
    expiration_timestamp=TIMESTAMP_ADD(
        CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
    friendly_name="new_view",
    description="a view that expires in 2 days",
    labels=[("org_unit", "development")]
)
AS SELECT name, state, year, number
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state LIKE 'W%'
""".format(
    project, dataset_id, table_id
)

job = client.query(sql)  # API request.
job.result()  # Waits for the query to finish.

print(
    'Created new view "{}.{}.{}".'.format(
        job.destination.project,
        job.destination.dataset_id,
        job.destination.table_id,
    )
)

CREATE SCHEMA-Anweisung

Erstellt ein neues Dataset.

Syntax

CREATE SCHEMA [ IF NOT EXISTS ]
[project_name.]dataset_name
[DEFAULT COLLATE collate_specification]
[OPTIONS(schema_option_list)]

Argumente

  • IF NOT EXISTS: Wenn ein Dataset mit demselben Namen vorhanden ist, hat die Anweisung CREATE keine Auswirkungen. Kann nicht mit OR REPLACE angezeigt werden.

  • DEFAULT COLLATE collate_specification: Wenn eine neue Tabelle im Dataset erstellt wird, übernimmt die Tabelle eine Standard-Sortierspezifikation, sofern nicht explizit eine Sortierspezifikation für eine Spalte angegeben ist.

    Wenn Sie diese Sortierspezifikation später mit der Anweisung ALTER SCHEMA entfernen oder ändern, wirkt sich dies nicht auf die vorhandenen Sortierspezifikationen in diesem Dataset aus. Wenn Sie eine vorhandene Sortierspezifikation in einem Dataset aktualisieren möchten, müssen Sie die Spalte ändern, die die Spezifikation enthält.

  • project_name: Der Name des Projekts, in dem Sie das Dataset erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Anweisung ausführt.

  • dataset_name: Der Name des zu erstellenden Datasets.

  • schema_option_list: Eine Liste von Optionen zum Erstellen des Datasets.

Details

Das Dataset wird an dem Ort erstellt, den Sie in den Abfrageeinstellungen angeben. Weitere Informationen finden Sie unter Standort angeben.

Weitere Informationen zum Erstellen eines Datasets finden Sie unter Datasets erstellen. Informationen zu Kontingenten finden Sie unter Dataset-Limits.

schema_option_list

Mit der Optionsliste legen Sie Optionen für das Dataset fest. Geben Sie die Optionen im folgenden Format an: NAME=VALUE, ...

Die folgenden Optionen werden unterstützt:

NAME VALUE Details
default_kms_key_name STRING Gibt den standardmäßigen Cloud KMS-Schlüssel zum Verschlüsseln von Tabellendaten in diesem Dataset an. Sie können diesen Wert beim Erstellen einer Tabelle überschreiben.
default_partition_expiration_days FLOAT64 Gibt die Standardablaufzeit in Tagen für Tabellenpartitionen in diesem Dataset an. Sie können diesen Wert beim Erstellen einer Tabelle überschreiben.
default_table_expiration_days FLOAT64 Gibt die Standardablaufzeit in Tagen für Tabellen in diesem Dataset an. Sie können diesen Wert beim Erstellen einer Tabelle überschreiben.
description STRING Die Beschreibung des Datasets.
friendly_name STRING Ein aussagekräftiger Name für das Dataset.
is_case_insensitive BOOL

In der Vorschau. Verfügbar für CREATE SCHEMA, aber nicht für ALTER SCHEMA.

TRUE, wenn bei den Dataset- und Tabellennamen die Groß-/Kleinschreibung nicht berücksichtigt wird, andernfalls FALSE. Wenn nicht bereits festgelegt, wird bei den Dataset- und Tabellennamen die Groß-/Kleinschreibung berücksichtigt.

labels <ARRAY<STRUCT<STRING, STRING>>> Ein Array von Labels für das Dataset, ausgedrückt als Schlüssel/Wert-Paare.
location STRING Der Standort, an dem das Dataset erstellt werden soll. Wenn Sie diese Option nicht angeben, wird das Dataset an dem Standort erstellt, an dem die Abfrage ausgeführt wird. Wenn Sie diese Option angeben und auch den Standort für den Abfragejob explizit festlegen, müssen die beiden Werte übereinstimmen. Andernfalls schlägt die Abfrage fehl.
max_time_travel_hours SMALLINT

In der Vorschau.

Gibt die Dauer des Zeitreisefensters für das neue Dataset in Stunden an. Der Wert max_time_travel_hours muss eine Ganzzahl zwischen 48 (2 Tage) und 168 (7 Tage) sein. Wenn diese Option nicht angegeben ist, wird als Standardeinstellung 168 Stunden verwendet.

Weitere Informationen zum Zeitfenster finden Sie unter Zeitfenster konfigurieren.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.datasets.create Das Projekt, in dem Sie das Dataset erstellen.

Beispiele

Neues Schema erstellen

Im folgenden Beispiel wird ein Dataset mit einem Standardtabellenablauf und einem Satz von Labels erstellt.

CREATE SCHEMA mydataset
OPTIONS(
  location="us",
  default_table_expiration_days=3.75,
  labels=[("label1","value1"),("label2","value2")]
  )

Dataset ohne Berücksichtigung der Groß-/Kleinschreibung erstellen

Im folgenden Beispiel wird ein Dataset erstellt, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird. Bei Dataset- und Tabellennamen im Dataset wird die Groß-/Kleinschreibung nicht berücksichtigt.

CREATE SCHEMA mydataset
OPTIONS(
  is_case_insensitive=TRUE
)

Schema mit Unterstützung für die Sortierung erstellen

Im folgenden Beispiel wird ein Dataset mit einer Sortierspezifikation erstellt.

CREATE SCHEMA mydataset
DEFAULT COLLATE 'und:ci'

CREATE TABLE-Anweisung

: Erstellt eine neue Tabelle.

Syntax

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] TABLE [ IF NOT EXISTS ]
table_name
[(
  column[, ...]
)]
[DEFAULT COLLATE collate_specification]
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]

Argumente

  • OR REPLACE: Ersetzt jede Tabelle mit demselben Namen, sofern vorhanden. Kann nicht mit IF NOT EXISTS angezeigt werden.

  • TEMP | TEMPORARY: Erstellt eine temporäre Tabelle.

  • IF NOT EXISTS: Wenn eine Tabelle mit demselben Namen vorhanden ist, hat die Anweisung CREATE keine Auswirkungen. Kann nicht mit OR REPLACE angezeigt werden.

  • table_name: Der Name der zu erstellenden Tabelle. Siehe Tabellenpfadsyntax. Geben Sie für temporäre Tabellen nicht den Projektnamen oder den Dataset-Namen an.

  • column: Die Schemainformationen der Tabelle.

  • collation_specification: Wenn eine neue Spalte ohne explizite Sortierspezifikation zur Tabelle hinzugefügt wird, übernimmt die Spalte diese Sortierspezifikation für STRING-Typen.

    Wenn Sie diese Sortierspezifikation später mit der Anweisung ALTER TABLE entfernen oder ändern, wirkt sich dies nicht auf die vorhandenen Sortierspezifikationen in dieser Tabelle aus. Wenn Sie eine vorhandene Sortierspezifikation in einer Tabelle aktualisieren möchten, müssen Sie die Spalte ändern, die die Spezifikation enthält.

    Wenn die Tabelle Teil eines Datasets ist, überschreibt die Standardsortierspezifikation für diese Tabelle die Standardsortierspezifikation für das Dataset.

  • partition_expression: Ein Ausdruck, der festlegt, wie die Tabelle partitioniert wird.

  • clustering_column_list: Eine durch Kommas getrennte Liste mit Spaltenreferenzen, die bestimmen, wie die Tabelle geclustert wird. Eine Sortierung nach Spalten in dieser Liste ist nicht möglich.

  • table_option_list: Eine Liste von Optionen zum Erstellen der Tabelle.

  • query_statement: Die Abfrage, aus der die Tabelle erstellt werden soll. Informationen zur Abfragesyntax finden Sie in der Referenz zur SQL-Syntax. Wenn in dieser Tabelle eine Sortierspezifikation verwendet wird, durchläuft die Sortierung diese Abfrageanweisung.

Details

Für CREATE TABLE-Anweisungen gelten die folgenden Regeln:

  • Nur eine CREATE-Anweisung ist zulässig.
  • Es muss entweder die Spaltenliste, die as query_statement-Klausel oder beides vorhanden sein.
  • Sind sowohl die Spaltenliste als auch die as query_statement-Klausel vorhanden, ignoriert BigQuery die Namen in der as query_statement-Klausel und gleicht die Spalten mit der Spaltenliste nach Position ab.
  • Ist nur die as query_statement-Klausel und keine Spaltenliste vorhanden, ermittelt BigQuery die Spaltennamen und -typen über die as query_statement-Klausel.
  • Spaltennamen müssen entweder über die Spaltenliste, die as query_statement-Klausel oder das Schema der Tabelle in der LIKE-Klausel angegeben werden.
  • Identische Spaltennamen sind nicht zulässig.
  • Wenn sowohl die LIKE- als auch die as query_statement-Klausel vorhanden sind, muss die Spaltenliste in der Abfrageanweisung mit den Spalten der Tabelle übereinstimmen, auf die die LIKE-Klausel verweist.

Beschränkungen:

  • Eine nach Aufnahmezeit partitionierte Tabelle kann nicht aus dem Ergebnis einer Abfrage erstellt werden. Erstellen Sie die Tabelle stattdessen mit der DDL-Anweisung CREATE TABLE und fügen Sie anschließend die Daten mithilfe der DML-Anweisung INSERT ein.
  • Eine Tabelle kann nicht mit dem Modifikator OR REPLACE durch eine andere Art der Partitionierung ersetzt werden. Löschen Sie stattdessen die Tabelle mit dem Befehl DROP und verwenden Sie anschließend die Anweisung CREATE TABLE ... AS SELECT ..., um sie neu zu erstellen.

Diese Anweisung unterstützt die folgenden Varianten, für die dieselben Einschränkungen gelten:

  • CREATE TABLE LIKE: Erstellen Sie eine Tabelle mit demselben Schema wie eine vorhandene Tabelle.
  • CREATE TABLE COPY: Erstellen Sie eine Tabelle. Kopieren Sie dazu Schema und Daten aus einer vorhandenen Tabelle.

column

(column_name column_schema[, ...]) enthält die Schemainformationen der Tabelle in einer durch Kommas getrennten Liste.

column :=
  column_name column_schema

column_schema :=
   {
     simple_type
     | STRUCT<field_list>
     | ARRAY<array_element_schema>
   }
   [DEFAULT default_expression]
   [NOT NULL]
   [OPTIONS(column_option_list)]

field_list :=
  field_name column_schema [, ...]

array_element_schema :=
  { simple_type | STRUCT<field_list> }
  [NOT NULL]

simple_type :=
  { data_type | STRING COLLATE collate_specification }
  • column_name ist der Name der Spalte. Ein Spaltenname:

    • darf nur Buchstaben (a–z, A–Z), Ziffern (0–9) und Unterstriche (_) enthalten
    • Er muss mit einem Buchstaben oder Unterstrich beginnen.
    • Er kann bis zu 300 Zeichen enthalten.
  • column_schema: Entspricht einem Datentyp, unterstützt aber eine optionale NOT NULL-Einschränkung für andere Typen als ARRAY. column_schema unterstützt auch Optionen für Spalten auf der obersten Ebene und STRUCT-Felder.

    column_schema kann nur in der Spaltendefinitionsliste von CREATE TABLE-Anweisungen und nicht als Typ in Ausdrücken verwendet werden.

  • simple_type: Kann ein beliebiger unterstützter Datentyp außer STRUCT und ARRAY sein.

    Wenn simple_type ein STRING ist, wird eine zusätzliche Klausel für die Sortierung unterstützt, die definiert, wie ein resultierender STRING verglichen und sortiert werden kann. Die Syntax sieht so aus:

    STRING COLLATE collate_specification
    

    Wenn Sie der Tabelle DEFAULT COLLATE collate_specification zugewiesen haben, überschreibt die Sortierspezifikation für eine Spalte die Spezifikation für die Tabelle.

  • default_expression: Der Standardwert, der der Spalte zugewiesen ist.

  • field_list: Stellt die Felder in einem Struct dar.

  • field_name: Der Name des Struct-Felds. Für Namen von STRUCT-Feldern gelten die gleichen Einschränkungen wie für Spaltennamen.

  • NOT NULL: Wenn für eine Spalte oder ein Feld die Einschränkung NOT NULL gilt, wird die Spalte bzw. das Feld mit dem Modus REQUIRED erstellt. Ist hingegen die Einschränkung NOT NULL nicht vorhanden, wird die Spalte bzw. das Feld mit dem Modus NULLABLE erstellt.

    Spalten und Felder vom Typ ARRAY unterstützen nicht den Modifikator NOT NULL. Ein column_schema vom Typ ARRAY<INT64> NOT NULL ist beispielsweise ungültig, da ARRAY-Spalten den Modus REPEATED haben und leer sein, aber nicht NULL sein können. Ein Arrayelement in einer Tabelle kann nicht NULL sein, unabhängig davon, ob die Einschränkung NOT NULL angegeben ist. ARRAY<INT64> entspricht beispielsweise ARRAY<INT64 NOT NULL>.

    Das Attribut NOT NULL von column_schema einer Tabelle wird nicht durch Abfragen über die Tabelle weitergegeben. Wenn die Tabelle T zum Beispiel eine Spalte enthält, die als x INT64 NOT NULL deklariert ist, erstellt CREATE TABLE dataset.newtable AS SELECT x FROM T eine Tabelle mit dem Namen dataset.newtable, in der x den Wert NULLABLE hat.

partition_expression

PARTITION BY ist eine optionale Klausel, die die Tabellenpartitionierung steuert. partition_expression ist ein Ausdruck, der festlegt, wie die Tabelle partitioniert wird. Der Partitionsausdruck kann die folgenden Werte enthalten:

  • _PARTITIONDATE. Nach Aufnahmezeit mit täglichen Partitionen partitionieren. Diese Syntax kann nicht mit der AS query_statement-Klausel verwendet werden.
  • DATE(_PARTITIONTIME). Entspricht _PARTITIONDATE. Diese Syntax kann nicht mit der AS query_statement-Klausel verwendet werden.
  • <date_column>. Partitioniert nach einer Spalte vom Typ DATE mit täglichen Partitionen.
  • DATE({ <timestamp_column> | <datetime_column> }). Partitioniert nach einer Spalte vom Typ TIMESTAMP oder DATETIME mit täglichen Partitionen.
  • DATETIME_TRUNC(<datetime_column>, { DAY | HOUR | MONTH | YEAR }). Partitioniert nach einer Spalte vom Typ DATETIME mit dem angegebenen Partitionierungstyp.
  • TIMESTAMP_TRUNC(<timestamp_column>, { DAY | HOUR | MONTH | YEAR }). Partitioniert nach einer Spalte vom Typ TIMESTAMP mit dem angegebenen Partitionierungstyp.
  • TIMESTAMP_TRUNC(_PARTITIONTIME, { DAY | HOUR | MONTH | YEAR }). Partitioniert nach dem Aufnahmezeitpunkt mit dem angegebenen Partitionierungstyp. Diese Syntax kann nicht mit der AS query_statement-Klausel verwendet werden.
  • DATE_TRUNC(<date_column>, { MONTH | YEAR }). Partitioniert nach einer Spalte vom Typ DATE mit dem angegebenen Partitionierungstyp.
  • RANGE_BUCKET(<int64_column>, GENERATE_ARRAY(<start>, <end>[, <interval>])). Partitioniert nach einer Ganzzahlspalte mit dem angegebenen Bereich, wobei:

    • start ist der Anfang der Bereichspartitionierung (einschließlich).
    • end ist das Ende der Bereichspartitionierung (ausschließlich).
    • interval ist die Breite des jeweiligen Bereichs in der Partition. Der Standardfaktor ist 1.

clustering_column_list

CLUSTER BY ist eine optionale Klausel, die das Tabellen-Clustering steuert. clustering_column_list ist eine durch Kommas getrennte Liste, mit der festgelegt wird, wie die Tabelle geclustert wird. Die Liste der Clustering-Spalten kann eine Liste mit bis zu vier Clustering-Spalten enthalten.

table_option_list

Mit der Optionsliste können Sie Tabellenoptionen wie ein Label oder eine Ablaufzeit festlegen. Sie haben auch die Möglichkeit, mehrere Optionen mithilfe einer durch Kommas getrennten Liste anzugeben.

Eine Tabellenoptionsliste muss im folgenden Format angegeben werden:

NAME=VALUE, ...

NAME und VALUE müssen eine der folgenden Kombinationen sein:

NAME VALUE Details
expiration_timestamp TIMESTAMP

Beispiel: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Dieses Attribut entspricht dem Attribut expirationTime der Tabellenressource.

partition_expiration_days

FLOAT64

Beispiel: partition_expiration_days=7

Legt den Partitionsablauf in Tagen fest. Weitere Informationen finden Sie unter Partitionsablauf festlegen. Standardmäßig laufen Partitionen nicht ab.

Dieses Attribut entspricht dem Attribut timePartitioning.expirationMs der Tabellenressource, verwendet jedoch Tage anstelle von Millisekunden. Ein Tag entspricht 86.400.000 Millisekunden oder 24 Stunden.

Dieses Attribut kann nur festgelegt werden, wenn die Tabelle partitioniert ist.

require_partition_filter

BOOL

Beispiel: require_partition_filter=true

Gibt an, ob Abfragen für diese Tabelle einen Prädikatfilter enthalten müssen, der nach der Partitionierungsspalte filtert. Weitere Informationen finden Sie unter Anforderungen an Partitionsfilter festlegen. Der Standardwert ist false.

Dieses Attribut entspricht dem Attribut timePartitioning.requirePartitionFilter der Tabellenressource.

Dieses Attribut kann nur festgelegt werden, wenn die Tabelle partitioniert ist.

kms_key_name

STRING

Beispiel: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

Dieses Attribut entspricht dem Attribut encryptionConfiguration.kmsKeyName der Tabellenressource.

Weitere Informationen finden Sie unter Daten mit Cloud KMS-Schlüsseln schützen.

friendly_name

STRING

Beispiel: friendly_name="my_table"

Dieses Attribut entspricht dem Attribut friendlyName der Tabellenressource.

description

STRING

Beispiel: description="a table that expires in 2025"

Dieses Attribut entspricht dem Attribut description der Tabellenressource.

labels

ARRAY<STRUCT<STRING, STRING>>

Beispiel: labels=[("org_unit", "development")]

Dieses Attribut entspricht dem Attribut labels der Tabellenressource.

VALUE ist ein konstanter Ausdruck, der nur Literale, Abfrageparameter und Skalarfunktionen enthält.

Der konstante Ausdruck darf Folgendes nicht enthalten:

  • Einen Verweis auf eine Tabelle
  • Unterabfragen oder SQL-Anweisungen wie SELECT, CREATE oder UPDATE
  • Benutzerdefinierte Funktionen, Aggregatfunktionen oder Analysefunktionen
  • Die folgenden Skalarfunktionen:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Wenn VALUE als NULL ausgewertet wird, wird die entsprechende Option NAME in der CREATE TABLE-Anweisung ignoriert.

column_option_list

Mit column_option_list in column_schema können Sie optionale Spalten- oder Feldoptionen angeben. Für Spalten- und Feldoptionen sind Syntax und Anforderungen identisch. Sie unterscheiden sich aber in den Listen für NAME und VALUE:

NAME VALUE Details
description

STRING

Beispiel: description="a unique id"

Dieses Attribut entspricht dem Attribut der Tabellenressource schema.fields[].description.

rounding_mode

STRING

In der Vorschau.

Beispiel: rounding_mode = "ROUND_HALF_EVEN"

Dies gibt den Rundungsmodus an, der für Werte verwendet wird, die in eine parametrisierte Spalte vom Typ NUMERIC oder BIGNUMERIC oder in ein STRUCT-Feld geschrieben werden. Folgende Werte werden unterstützt:

  • "ROUND_HALF_AWAY_FROM_ZERO": Halbe Zahlen werden von null weggerundet. Beispiel: 2,5 wird auf 3,0 gerundet und -2,5 auf -3.
  • "ROUND_HALF_EVEN": Halbe Zahlen werden auf die nächste gerade Zahl gerundet. Beispiel: 2,5 wird auf 2,0 gerundet und -2,5 auf -2,0.

Dieses Attribut entspricht dem Attribut roundingMode der Tabellenressource.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create Das Dataset, in dem Sie die Tabelle erstellen.

Darüber hinaus erfordert die Klausel OR REPLACE die Berechtigungen bigquery.tables.update und bigquery.tables.updateData.

Wenn die Klausel OPTIONS Ablaufoptionen enthält, ist auch die Berechtigung bigquery.tables.delete erforderlich.

Beispiele

Neue Tabellen erstellen

Im folgenden Beispiel wird in mydataset eine partitionierte Tabelle mit dem Namen newtable erstellt.

CREATE TABLE mydataset.newtable
(
  x INT64 OPTIONS(description="An optional INTEGER field"),
  y STRUCT<
    a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
    b BOOL
  >
)
PARTITION BY _PARTITIONDATE
OPTIONS(
  expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
  partition_expiration_days=1,
  description="a table that expires in 2025, with each partition living for 24 hours",
  labels=[("org_unit", "development")]
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.newtable` anstelle von mydataset.newtable lauten.

Wenn der Tabellenname im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: project_id:dataset.table

Die Tabelle verwendet den folgenden partition_expression-Ausdruck zum Partitionieren der Tabelle: PARTITION BY _PARTITIONDATE. Dieser Ausdruck partitioniert die Tabelle anhand des Datums in der Pseudospalte _PARTITIONDATE.

Das Tabellenschema enthält zwei Spalten:

  • x: Ganzzahlspalte mit der Beschreibung „An optional INTEGER field“ (Optionales INTEGER-Feld)
  • y: STRUCT mit zwei Spalten:

    • a: Stringarray mit der Beschreibung „A repeated STRING field“ (Wiederkehrendes STRING-Feld)
    • b: boolescher Wert

Die Tabellenoptionsliste gibt Folgendes an:

  • Tabellenablaufzeit: 1. Januar 2025 um 00:00:00 UTC
  • Partitionsablaufzeit: 1 Tag
  • Beschreibung: A table that expires in 2025
  • Label: org_unit = development

Neue Tabelle aus einer vorhandenen Tabelle erstellen

Im folgenden Beispiel wird eine Tabelle mit dem Namen top_words in mydataset aus einer Abfrage erstellt:

CREATE TABLE mydataset.top_words
OPTIONS(
  description="Top ten words per Shakespeare corpus"
) AS
SELECT
  corpus,
  ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
FROM bigquery-public-data.samples.shakespeare
GROUP BY corpus;

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.top_words` anstelle von mydataset.top_words lauten.

Wenn der Tabellenname im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: project_id:dataset.table

Das Tabellenschema enthält zwei Spalten:

  • corpus: Name eines Shakespeare-Korpus
  • top_words: ARRAY mit STRUCT-Werten, das zwei Felder enthält: word (ein STRING) und word_count (ein INT64-Wert mit der Anzahl der Wörter)

Die Tabellenoptionsliste gibt Folgendes an:

  • Beschreibung: Top ten words per Shakespeare corpus

Tabelle nur erstellen, wenn die Tabelle nicht vorhanden ist

Im folgenden Beispiel wird nur dann in mydataset eine Tabelle namens newtable erstellt, wenn in mydataset keine Tabelle mit dem Namen newtable vorhanden ist. Ist der Tabellenname im Dataset vorhanden, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
OPTIONS(
  expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
  description="a table that expires in 2025",
  labels=[("org_unit", "development")]
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.newtable` anstelle von mydataset.newtable lauten.

Das Tabellenschema enthält zwei Spalten:

  • x: Ganzzahl
  • y: STRUCT-Wert mit a (Stringarray) und b (boolescher Wert)

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablaufzeit: 1. Januar 2025 um 00:00:00 UTC
  • Beschreibung: A table that expires in 2025
  • Label: org_unit = development

Tabellen erstellen oder ersetzen

Im folgenden Beispiel wird in mydataset eine Tabelle mit dem Namen newtable erstellt. Wenn newtable bereits in mydataset vorhanden ist, wird diese Tabelle mit einer leeren Tabelle überschrieben.

CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
OPTIONS(
  expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
  description="a table that expires in 2025",
  labels=[("org_unit", "development")]
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.newtable` anstelle von mydataset.newtable lauten.

Das Tabellenschema enthält zwei Spalten:

  • x: Ganzzahl
  • y: STRUCT-Wert mit a (Stringarray) und b (boolescher Wert)

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablaufzeit: 1. Januar 2025 um 00:00:00 UTC
  • Beschreibung: A table that expires in 2025
  • Label: org_unit = development

Tabellen mit REQUIRED-Spalten erstellen

Im folgenden Beispiel wird in mydataset eine Tabelle mit dem Namen newtable erstellt. Der Modifikator NOT NULL in der Spaltendefinitionsliste einer CREATE TABLE-Anweisung gibt an, dass eine Spalte oder ein Feld im Modus REQUIRED erstellt wird.

CREATE TABLE mydataset.newtable (
  x INT64 NOT NULL,
  y STRUCT<
    a ARRAY<STRING>,
    b BOOL NOT NULL,
    c FLOAT64
  > NOT NULL,
  z STRING
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.newtable` anstelle von mydataset.newtable lauten.

Wenn der Tabellenname im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: project_id:dataset.table

Das Tabellenschema enthält drei Spalten:

  • x: REQUIRED-Ganzzahl
  • y – Einen REQUIRED-STRUCT-Wert mit a (ein Stringarray), b (ein boolescher REQUIRED-Wert) und c (eine NULLABLE-Gleitkommazahl)
  • z: NULLABLE-String

Tabelle mit Sortierungsunterstützung erstellen

In den folgenden Beispielen wird eine Tabelle mit dem Namen newtable in mydataset mit den Spalten a, b, c und einem Struct mit den Feldern x und y erstellt.

Alle Spaltenschemas vom Typ STRING in dieser Tabelle werden mit 'und:ci' sortiert:

CREATE TABLE mydataset.newtable (
  a STRING,
  b STRING,
  c STRUCT<
    x FLOAT64
    y ARRAY<STRING>
  >
)
DEFAULT COLLATE 'und:ci';

Nur b und y werden mit 'und:ci' sortiert:

CREATE TABLE mydataset.newtable (
  a STRING,
  b STRING COLLATE 'und:ci',
  c STRUCT<
    x FLOAT64
    y ARRAY<STRING COLLATE 'und:ci'>
  >
);

Tabelle mit parametrisierten Datentypen erstellen

Im folgenden Beispiel wird in mydataset eine Tabelle mit dem Namen newtable erstellt. Die Parameter in Klammern geben an, dass die Spalte einen parametrisierten Datentyp enthält. Weitere Informationen zu parametrisierten Typen finden Sie unter Parametrisierte Datentypen.

CREATE TABLE mydataset.newtable (
  x STRING(10),
  y STRUCT<
    a ARRAY<BYTES(5)>,
    b NUMERIC(15, 2) OPTIONS(rounding_mode = 'ROUND_HALF_EVEN'),
    c FLOAT64
  >,
  z BIGNUMERIC(35)
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Anstelle von mydataset.newtable sollte der Tabellen-Qualifier `myproject.mydataset.newtable` lauten.

Wenn der Tabellenname im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: project_id:dataset.table

Das Tabellenschema enthält drei Spalten:

  • x: Ein parametrisierter String mit einer maximalen Länge von 10
  • y: Ein STRUCT mit a (ein Array von parametrisierten Byte mit einer maximalen Länge von 5), b (ein parametrisierter NUMERIC-Wert mit einer maximalen Genauigkeit von 15, einer maximalen Skalierung von 2 und dem Rundungsmodus „ROUND_HALF_EVEN“) und c (eine Gleitkommazahl)
  • z: Ein parametrisierter BIGNUMERIC mit einer maximalen Genauigkeit von 35 und einer maximalen Skalierung von 0

Partitionierte Tabelle erstellen

Im folgenden Beispiel wird in mydataset mithilfe einer DATE-Spalte eine partitionierte Tabelle mit dem Namen newtable erstellt.

CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY transaction_date
OPTIONS(
  partition_expiration_days=3,
  description="a table partitioned by transaction_date"
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.newtable` anstelle von mydataset.newtable lauten.

Das Tabellenschema enthält zwei Spalten:

  • transaction_id: Ganzzahl
  • transaction_date: Datum

Die Tabellenoptionsliste gibt Folgendes an:

  • Partitionsablauf: drei Tage
  • Beschreibung: A table partitioned by transaction_date

Partitionierte Tabelle aus dem Ergebnis einer Abfrage erstellen

Im folgenden Beispiel wird in mydataset mithilfe einer DATE-Spalte eine partitionierte Tabelle mit dem Namen days_with_rain erstellt.

CREATE TABLE mydataset.days_with_rain
PARTITION BY date
OPTIONS (
  partition_expiration_days=365,
  description="weather stations with precipitation, partitioned by day"
) AS
SELECT
  DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
  (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
   WHERE stations.usaf = stn) AS station_name,  -- Stations can have multiple names
  prcp
FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
WHERE prcp != 99.9  -- Filter unknown values
  AND prcp > 0      -- Filter stations/days with no precipitation

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn die project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.days_with_rain` anstelle von mydataset.days_with_rain lauten.

Das Tabellenschema enthält zwei Spalten:

  • date: Datum (DATE) der Datenerfassung
  • station_name: Name der Wetterstation als STRING
  • prcp: Niederschlagsmenge in Zoll als FLOAT64-Gleitkommazahl

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablauf der Partition: ein Jahr
  • Beschreibung: Weather stations with precipitation, partitioned by day

Geclusterte Tabellen erstellen

Beispiel 1

Im folgenden Beispiel wird in mydataset eine geclusterte Tabelle namens myclusteredtable erstellt. Die Tabelle ist eine partitionierte Tabelle, die nach einer Spalte vom Typ TIMESTAMP partitioniert und nach einer STRING-Spalte namens customer_id geclustert wird.

CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.myclusteredtable` anstelle von mydataset.myclusteredtable lauten.

Das Tabellenschema enthält drei Spalten:

  • timestamp: Zeitpunkt der Datenerfassung (Typ TIMESTAMP)
  • customer_id: Kundennummer (Typ STRING)
  • transaction_amount: Anzahl der Transaktionen (Typ NUMERIC)

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablauf der Partition: 3 Tage
  • Beschreibung: A table clustered by customer_id
Beispiel 2

Im folgenden Beispiel wird in mydataset eine geclusterte Tabelle namens myclusteredtable erstellt. Die Tabelle ist eine nach Aufnahmezeit partitionierte Tabelle.

CREATE TABLE mydataset.myclusteredtable
(
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.myclusteredtable` anstelle von mydataset.myclusteredtable lauten.

Das Tabellenschema enthält zwei Spalten:

  • customer_id: Kundennummer (Typ STRING)
  • transaction_amount: Anzahl der Transaktionen (Typ NUMERIC)

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablauf der Partition: 3 Tage
  • Beschreibung: A table clustered by customer_id
Beispiel 3

Im folgenden Beispiel wird in mydataset eine geclusterte Tabelle namens myclusteredtable erstellt. Die Tabelle ist nicht partitioniert.

CREATE TABLE mydataset.myclusteredtable
(
  customer_id STRING,
  transaction_amount NUMERIC
)
CLUSTER BY
  customer_id
OPTIONS (
  description="a table clustered by customer_id"
)

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.myclusteredtable` anstelle von mydataset.myclusteredtable lauten.

Das Tabellenschema enthält zwei Spalten:

  • customer_id: Kundennummer (Typ STRING)
  • transaction_amount: Anzahl der Transaktionen (Typ NUMERIC)

Die Tabellenoptionsliste gibt Folgendes an:

  • Beschreibung: A table clustered by customer_id

Geclusterte Tabellen aus dem Ergebnis einer Abfrage erstellen

Beispiel 1

Im folgenden Beispiel wird mithilfe des Ergebnisses einer Abfrage in mydataset eine geclusterte Tabelle namens myclusteredtable erstellt. Die Tabelle ist eine partitionierte Tabelle, die nach einer Spalte vom Typ TIMESTAMP partitioniert ist.

CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.myclusteredtable` anstelle von mydataset.myclusteredtable lauten.

Das Tabellenschema enthält drei Spalten:

  • timestamp: Zeitpunkt der Datenerfassung (Typ TIMESTAMP)
  • customer_id: Kundennummer (Typ STRING)
  • transaction_amount: Anzahl der Transaktionen (Typ NUMERIC)

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablauf der Partition: 3 Tage
  • Beschreibung: A table clustered by customer_id
Beispiel 2

Im folgenden Beispiel wird mithilfe des Ergebnisses einer Abfrage in mydataset eine geclusterte Tabelle namens myclusteredtable erstellt. Die Tabelle ist nicht partitioniert.

CREATE TABLE mydataset.myclusteredtable
(
  customer_id STRING,
  transaction_amount NUMERIC
)
CLUSTER BY
  customer_id
OPTIONS (
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Dataset-Namen in der Beispiel-SQL eine Projekt-ID voran und schließen Sie den Namen in Backticks ein, wenn project_id Sonderzeichen enthält: `project_id.dataset.table`. Daher kann der Tabellen-Qualifier `myproject.mydataset.myclusteredtable` anstelle von mydataset.myclusteredtable lauten.

Das Tabellenschema enthält zwei Spalten:

  • customer_id: Kundennummer (Typ STRING)
  • transaction_amount: Anzahl der Transaktionen (Typ NUMERIC)

Die Tabellenoptionsliste gibt Folgendes an:

  • Beschreibung: A table clustered by customer_id

Temporäre Tabelle erstellen

Im folgenden Beispiel wird eine temporäre Tabelle mit dem Namen Example erstellt und Werte in diese Tabelle eingefügt.

CREATE TEMP TABLE Example
(
  x INT64,
  y STRING
);

INSERT INTO Example
VALUES (5, 'foo');

INSERT INTO Example
VALUES (6, 'bar');

SELECT *
FROM Example;

Dieses Skript gibt Folgendes zurück:

+-----+---+-----+
| Row | x | y   |
+-----+---|-----+
| 1   | 5 | foo |
| 2   | 6 | bar |
+-----+---|-----+

CREATE TABLE LIKE-Anweisung

Erstellt eine neue Tabelle mit allen Metadaten einer anderen Tabelle.

Syntax

CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ]
table_name
LIKE [[project_name.]dataset_name.]source_table_name
...
[OPTIONS(table_option_list)]

Details

Diese Anweisung ist eine Variante der CREATE TABLE-Anweisung und hat dieselben Einschränkungen. Abgesehen von der Verwendung der LIKE-Klausel anstelle einer Spaltenliste ist die Syntax mit der CREATE TABLE-Syntax identisch.

Mit der CREATE TABLE LIKE-Anweisung werden nur die Metadaten der Quelltabelle kopiert. Sie können die as query_statement-Klausel verwenden, um Daten in die neue Tabelle aufzunehmen.

Die neue Tabelle hat nach der Erstellung keine Beziehung mehr zur Quelltabelle. Daher werden Änderungen an der Quelltabelle nicht an die neue Tabelle weitergegeben.

Standardmäßig übernimmt die neue Tabelle Partitionierungs-, Clustering- und Optionsmetadaten aus der Quelltabelle. Sie können Metadaten in der neuen Tabelle anpassen, indem Sie die optionalen Klauseln in der SQL-Anweisung verwenden. Wenn Sie beispielsweise andere Optionen für die neue Tabelle angeben möchten, fügen Sie die OPTIONS-Klausel mit einer Liste von Optionen und Werten ein. Dieses Verhalten entspricht dem Verhalten von ALTER TABLE SET OPTIONS.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create Das Dataset, in dem Sie die Tabelle erstellen.
bigquery.tables.get Die Quelltabelle.

Darüber hinaus erfordert die Klausel OR REPLACE die Berechtigungen bigquery.tables.update und bigquery.tables.updateData.

Wenn die Klausel OPTIONS Ablaufoptionen enthält, ist auch die Berechtigung bigquery.tables.delete erforderlich.

Beispiele

Beispiel 1

Im folgenden Beispiel wird in mydataset eine neue Tabelle mit dem Namen newtable mit denselben Metadaten wie bei sourcetable erstellt:

CREATE TABLE mydataset.newtable
LIKE mydataset.sourcetable

Beispiel 2

Im folgenden Beispiel wird in mydataset eine neue Tabelle mit dem Namen newtable mit denselben Metadaten wie bei sourcetable und den Daten aus der Anweisung SELECT erstellt:

CREATE TABLE mydataset.newtable
LIKE mydataset.sourcetable
AS SELECT * FROM mydataset.myothertable

CREATE TABLE COPY-Anweisung

Erstellt eine Tabelle mit denselben Metadaten und Daten wie eine andere Tabelle. Die Quelltabelle kann eine Tabelle, ein Tabellenklon oder ein Tabellen-Snapshot sein.

Syntax

CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] table_name
COPY source_table_name
...
[OPTIONS(table_option_list)]

Details

Diese Anweisung ist eine Variante der CREATE TABLE-Anweisung und hat dieselben Einschränkungen. Abgesehen von der Verwendung der COPY-Klausel anstelle einer Spaltenliste ist die Syntax mit der CREATE TABLE-Syntax identisch.

Mit der CREATE TABLE COPY-Anweisung werden sowohl die Metadaten als auch die Daten aus der Quelltabelle kopiert.

Die Partitionierung und das Clustering werden von der neuen Tabelle aus der Quelltabelle übernommen. Standardmäßig werden die Metadaten der Tabellenoptionen aus der Quelltabelle ebenfalls übernommen. Sie können die Tabellenoptionen jedoch mit der OPTIONS-Klausel überschreiben. Das Verhalten entspricht dem Ausführen von ALTER TABLE SET OPTIONS nach dem Kopieren der Tabelle.

Die neue Tabelle hat nach der Erstellung keine Beziehung zur Quelltabelle. Änderungen an der Quelltabelle werden nicht an die neue Tabelle weitergegeben.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create Das Dataset, in dem Sie den Tabellen-Snapshot erstellen.
bigquery.tables.get Die Quelltabelle.
bigquery.tables.getData Die Quelltabelle.

Darüber hinaus erfordert die Klausel OR REPLACE die Berechtigungen bigquery.tables.update und bigquery.tables.updateData.

Wenn die Klausel OPTIONS Ablaufoptionen enthält, ist auch die Berechtigung bigquery.tables.delete erforderlich.

CREATE SNAPSHOT TABLE-Anweisung

Erstellt einen Tabellen-Snapshot basierend auf einer Quelltabelle. Die Quelltabelle kann eine Tabelle, ein Tabellenklon oder ein Tabellen-Snapshot sein.

Syntax

CREATE SNAPSHOT TABLE [ IF NOT EXISTS ] table_snapshot_name
CLONE source_table_name
[FOR SYSTEM_TIME AS OF time_expression]
[OPTIONS(snapshot_option_list)]

Argumente

  • IF NOT EXISTS: Wenn ein Tabellen-Snapshot oder eine andere Tabellenressource mit demselben Namen vorhanden ist, hat die Anweisung CREATE keine Auswirkungen.

  • table_snapshot_name: Der Name des Tabellen-Snapshots, den Sie erstellen möchten. Der Name des Tabellen-Snapshots muss pro Dataset eindeutig sein. Siehe Tabellenpfadsyntax.

  • source_table_name: Der Name der Tabelle, die Sie erstellen möchten, oder des Tabellen-Snapshots, den Sie kopieren möchten. Siehe Tabellenpfadsyntax.

    Wenn die Quelltabelle eine Standardtabelle ist, erstellt BigQuery einen Tabellen-Snapshot der Quelltabelle. Wenn die Quelltabelle ein Tabellen-Snapshot ist, erstellt BigQuery eine Kopie des Tabellen-Snapshots.

  • FOR SYSTEM_TIME AS OF: Ermöglicht die Auswahl der Version der Tabelle, die zu dem durch timestamp_expression angegebenen Zeitpunkt aktuell war. Die Klausel kann nur verwendet werden, wenn ein Snapshot einer Tabelle erstellt wird. Sie kann nicht beim Erstellen einer Kopie eines Tabellen-Snapshots verwendet werden.

  • snapshot_option_list: Zusätzliche Optionen zum Erstellen von Tabellen-Snapshots wie ein Label und eine Ablaufzeit.

Details

Für CREATE SNAPSHOT TABLE-Anweisungen gelten die folgenden Regeln:

  • Nur eine CREATE-Anweisung ist zulässig.
  • Folgende Optionen sind für die Quelltabelle zulässig:
    • Eine Tabelle
    • Ein Tabellenklon
    • Ein Tabellen-Snapshot
  • Die FOR SYSTEM_TIME AS OF-Klausel kann nur verwendet werden, wenn ein Snapshot einer Tabelle oder eines Tabellenklons erstellt wird. Sie kann nicht beim Erstellen einer Kopie eines Tabellen-Snapshots verwendet werden.

snapshot_option_list

Mit der Optionsliste können Sie Tabellen-Snapshot-Optionen wie ein Label und eine Ablaufzeit festlegen. Sie haben auch die Möglichkeit, mehrere Optionen mithilfe einer durch Kommas getrennten Liste anzugeben.

Geben Sie eine Liste mit Tabellen-Snapshot-Optionen im folgenden Format an:

NAME=VALUE, ...

NAME und VALUE müssen eine der folgenden Kombinationen sein:

NAME VALUE Details
expiration_timestamp TIMESTAMP

Beispiel: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Dieses Attribut entspricht dem Attribut expirationTime der Tabellenressource.

friendly_name

STRING

Beispiel: friendly_name="my_table_snapshot"

Dieses Attribut entspricht dem Attribut friendlyName der Tabellenressource.

description

STRING

Beispiel: description="A table snapshot that expires in 2025"

Dieses Attribut entspricht dem Attribut description der Tabellenressource.

labels

ARRAY<STRUCT<STRING, STRING>>

Beispiel: labels=[("org_unit", "development")]

Dieses Attribut entspricht dem Attribut labels der Tabellenressource.

VALUE ist ein konstanter Ausdruck, der nur Literale, Abfrageparameter und Skalarfunktionen enthält.

Der konstante Ausdruck darf Folgendes nicht enthalten:

  • Einen Verweis auf eine Tabelle
  • Unterabfragen – SQL-Anweisungen wie SELECT, CREATE und UPDATE
  • Benutzerdefinierte Funktionen, Aggregatfunktionen oder Analysefunktionen
  • Die folgenden Skalarfunktionen:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Wenn VALUE als NULL ausgewertet wird, wird die entsprechende Option NAME in der CREATE SNAPSHOT TABLE-Anweisung ignoriert.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create Das Dataset, in dem Sie den Tabellen-Snapshot erstellen.
bigquery.tables.createSnapshot Die Quelltabelle.
bigquery.tables.get Die Quelltabelle.
bigquery.tables.getData Die Quelltabelle.

Beispiele

Tabellen-Snapshot erstellen: Fehler, wenn er bereits vorhanden ist

Im folgenden Beispiel wird ein Tabellen-Snapshot der Tabelle myproject.mydataset.mytable erstellt. Der Tabellen-Snapshot wird im Dataset mydataset erstellt und heißt mytablesnapshot:

CREATE SNAPSHOT TABLE `myproject.mydataset.mytablesnapshot`
CLONE `myproject.mydataset.mytable`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="my_table_snapshot",
  description="A table snapshot that expires in 2 days",
  labels=[("org_unit", "development")]
)

Wenn der Tabellen-Snapshot-Name bereits im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: myproject.mydataset.mytablesnapshot

In der Liste der Tabellen-Snapshot-Optionen ist Folgendes angegeben:

  • Ablaufzeit: 48 Stunden nach der Erstellung des Tabellen-Snapshots
  • Anzeigename: my_table_snapshot
  • Beschreibung: A table snapshot that expires in 2 days
  • Label: org_unit = development

Tabellen-Snapshot erstellen: Ignorieren, wenn er bereits vorhanden ist

Im folgenden Beispiel wird ein Tabellen-Snapshot der Tabelle myproject.mydataset.mytable erstellt. Der Tabellen-Snapshot wird im Dataset mydataset erstellt und heißt mytablesnapshot:

CREATE SNAPSHOT TABLE IF NOT EXISTS `myproject.mydataset.mytablesnapshot`
CLONE `myproject.mydataset.mytable`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="my_table_snapshot",
  description="A table snapshot that expires in 2 days"
  labels=[("org_unit", "development")]
)

In der Liste der Tabellen-Snapshot-Optionen ist Folgendes angegeben:

  • Ablaufzeit: 48 Stunden nach der Erstellung des Tabellen-Snapshots
  • Anzeigename: my_table_snapshot
  • Beschreibung: A table snapshot that expires in 2 days
  • Label: org_unit = development

Wenn der Name des Tabellen-Snapshots bereits im Dataset vorhanden ist, wird keine Aktion ausgeführt und kein Fehler zurückgegeben.

Informationen zum Wiederherstellen von Tabellen-Snapshots finden Sie unter CREATE TABLE CLONE.

Informationen zum Entfernen von Tabellen-Snapshots finden Sie unter DROP SNAPSHOT TABLE.

CREATE TABLE CLONE-Anweisung

Erstellt einen Tabellenklon auf Basis einer Quelltabelle. Die Quelltabelle kann eine Tabelle, ein Tabellenklon oder ein Tabellen-Snapshot sein.

Syntax

CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ]
destination_table_name
CLONE source_table_name [FOR SYSTEM_TIME AS OF time_expression]
...
[OPTIONS(table_option_list)]

Details

Abgesehen von der Verwendung der CLONE-Klausel anstelle einer Spaltenliste ist die Syntax mit der CREATE TABLE-Syntax identisch.

Argumente

  • OR REPLACE: Ersetzt eine Tabelle mit demselben Namen, sofern vorhanden. Kann nicht mit IF NOT EXISTS angezeigt werden.

  • IF NOT EXISTS: Wenn der angegebene Zieltabellenname bereits vorhanden ist, hat die Anweisung CREATE keine Auswirkungen. Kann nicht mit OR REPLACE angezeigt werden.

destination_table_name ist der Name der Tabelle, die Sie erstellen möchten. Der Tabellenname muss pro Dataset eindeutig sein. Der Name des Datasets kann Folgendes enthalten:

  • Bis zu 1.024 Zeichen
  • Buchstaben (groß- oder kleingeschrieben), Ziffern und Unterstriche

Mit OPTIONS(table_option_list) können Sie zusätzliche Optionen zum Erstellen von Ansichten angeben, beispielsweise ein Label und eine Ablaufzeit.

source_table_name ist der Name der Quelltabelle.

Für CREATE TABLE CLONE-Anweisungen gelten die folgenden Regeln:

  • Nur eine CREATE-Anweisung ist zulässig.
  • Die geklonte Tabelle muss eine Tabelle, ein Tabellenklon oder ein Tabellen-Snapshot sein.

OPTIONS

CREATE TABLE CLONE-Optionen sind dieselben wie CREATE TABLE-Optionen.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create Das Dataset, in dem Sie den Tabellenklon erstellen.
bigquery.tables.get Die Quelltabelle.
bigquery.tables.getData Die Quelltabelle.
bigquery.tables.restoreSnapshot Die Quelltabelle (nur erforderlich, wenn die Quelltabelle ein Tabellen-Snapshot ist).

Darüber hinaus erfordert die Klausel OR REPLACE die Berechtigungen bigquery.tables.update und bigquery.tables.updateData.

Wenn die Klausel OPTIONS Ablaufoptionen enthält, ist auch die Berechtigung bigquery.tables.delete erforderlich.

Beispiele

Tabellen-Snapshot wiederherstellen: Fehler, wenn die Zieltabelle bereits vorhanden ist

Im folgenden Beispiel wird die Tabelle myproject.mydataset.mytable aus dem Tabellen-Snapshot myproject.mydataset.mytablesnapshot erstellt:

CREATE TABLE `myproject.mydataset.mytable`
CLONE `myproject.mydataset.mytablesnapshot`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY),
  friendly_name="my_table",
  description="A table that expires in 1 year",
  labels=[("org_unit", "development")]
)

Wenn der Tabellenname im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: myproject.mydataset.mytable.

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablaufzeit: 365 Tage nach dem Erstellen der Tabelle
  • Anzeigename: my_table
  • Beschreibung: A table that expires in 1 year
  • Label: org_unit = development

Klon einer Tabelle erstellen: Ignorieren, wenn die Zieltabelle bereits vorhanden ist

Im folgenden Beispiel wird der Tabellenklon myproject.mydataset.mytableclone anhand der Tabelle myproject.mydataset.mytable erstellt:

CREATE TABLE IF NOT EXISTS `myproject.mydataset.mytableclone`
CLONE `myproject.mydataset.mytable`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY),
  friendly_name="my_table",
  description="A table that expires in 1 year",
  labels=[("org_unit", "development")]
)

Die Tabellenoptionsliste gibt Folgendes an:

  • Ablaufzeit: 365 Tage nach dem Erstellen der Tabelle
  • Anzeigename: my_table
  • Beschreibung: A table that expires in 1 year
  • Label: org_unit = development

Ist der Tabellenname im Dataset vorhanden, wird keine Aktion ausgeführt und kein Fehler zurückgegeben.

Informationen zum Erstellen einer Kopie einer Tabelle finden Sie unter CREATE TABLE COPY.

Informationen zum Erstellen eines Snapshots einer Tabelle finden Sie unter CREATE SNAPSHOT TABLE.

CREATE VIEW-Anweisung

: Erstellt eine neue Ansicht.

Syntax

CREATE [ OR REPLACE ] VIEW [ IF NOT EXISTS ] view_name
[(view_column_name_list)]
[OPTIONS(view_option_list)]
AS query_expression

Argumente

  • OR REPLACE: Ersetzt jede Ansicht mit demselben Namen, sofern vorhanden. Kann nicht mit IF NOT EXISTS angezeigt werden.

  • IF NOT EXISTS: Wenn eine Ansicht oder eine andere Tabellenressource mit demselben Namen vorhanden ist, hat die Anweisung CREATE keine Auswirkungen. Kann nicht mit OR REPLACE angezeigt werden.

  • view_name: Der Name der Ansicht, die Sie erstellen möchten. Siehe Tabellenpfadsyntax.

  • Mit view_column_name_list: Ermöglicht Ihnen die explizite Angabe der Spaltennamen der Ansicht. Dabei kann es sich um Aliasse für die Spaltennamen in der zugrunde liegenden SQL-Abfrage handeln.

  • view_option_list: Zusätzliche Optionen zum Erstellen von Ansichten, z. B. ein Label und eine Ablaufzeit.

  • query_expression: Der Google Standard-SQL-Abfrageausdruck, der zur Definition der Ansicht verwendet wird.

Details

Für CREATE VIEW-Anweisungen gelten die folgenden Regeln:

  • Nur eine CREATE-Anweisung ist zulässig.

view_column_name_list

Die Liste der Spaltennamen für die Ansicht ist optional. Die Namen dürfen nur einmal vorkommen, müssen aber nicht mit den Spaltennamen der zugrunde liegenden SQL-Abfrage übereinstimmen. Beispiel: Ihre Ansicht wird mit der folgenden Anweisung erstellt:

CREATE VIEW mydataset.age_groups(age, count) AS SELECT age, COUNT(*)
FROM mydataset.people
group by age;

Dann können Sie sie folgendermaßen abfragen:

SELECT age, count from mydataset.age_groups;

Die Anzahl der Spalten in der Liste der Spaltennamen muss mit der Anzahl der Spalten in der zugrunde liegenden SQL-Abfrage übereinstimmen. Wenn die Spalten in der Tabelle der zugrunde liegenden SQL-Abfrage hinzugefügt oder verworfen werden, ist die Ansicht ungültig und muss neu erstellt werden. Beispiel: Wenn die Spalte age aus der Tabelle mydataset.people entfernt wird, wird die im vorherigen Beispiel erstellte Ansicht ungültig.

view_option_list

Mit der Optionsliste können Sie Ansichtsoptionen wie ein Label und eine Ablaufzeit festlegen. Sie haben auch die Möglichkeit, mehrere Optionen mithilfe einer durch Kommas getrennten Liste anzugeben.

Die Liste der Ansichtsoptionen müssen Sie im folgenden Format angeben:

NAME=VALUE, ...

NAME und VALUE müssen eine der folgenden Kombinationen sein:

NAME VALUE Details
expiration_timestamp TIMESTAMP

Beispiel: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Dieses Attribut entspricht dem Attribut expirationTime der Tabellenressource.

friendly_name

STRING

Beispiel: friendly_name="my_view"

Dieses Attribut entspricht dem Attribut friendlyName der Tabellenressource.

description

STRING

Beispiel: description="a view that expires in 2025"

Dieses Attribut entspricht dem Attribut description der Tabellenressource.

labels

ARRAY<STRUCT<STRING, STRING>>

Beispiel: labels=[("org_unit", "development")]

Dieses Attribut entspricht dem Attribut labels der Tabellenressource.

VALUE ist ein konstanter Ausdruck, der nur Literale, Abfrageparameter und Skalarfunktionen enthält.

Der konstante Ausdruck darf Folgendes nicht enthalten:

  • Einen Verweis auf eine Tabelle
  • Unterabfragen oder SQL-Anweisungen wie SELECT, CREATE oder UPDATE
  • Benutzerdefinierte Funktionen, Aggregatfunktionen oder Analysefunktionen
  • Die folgenden Skalarfunktionen:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Wenn VALUE als NULL ausgewertet wird, wird die entsprechende Option NAME in der CREATE VIEW-Anweisung ignoriert.

Standardprojekt im Ansichtstext

Wenn die Ansicht in dem Projekt erstellt wird, das zum Ausführen der CREATE VIEW-Anweisung verwendet wird, kann der Ansichtstext query_expression auf Entitäten verweisen, ohne das Projekt anzugeben. Das Standardprojekt ist das Projekt, zu dem die Ansicht gehört. Betrachten Sie die folgende Beispielabfrage.

CREATE VIEW myProject.myDataset.myView AS SELECT * FROM anotherDataset.myTable;

Nachdem Sie die obige CREATE VIEW-Abfrage im Projekt myProject ausgeführt haben, können Sie die Abfrage SELECT * FROM myProject.myDataset.myView ausführen. Unabhängig davon, in welchem Projekt Sie diese SELECT-Abfrage ausführen, wird die referenzierte Tabelle anotherDataset.myTable immer für das Projekt myProject aufgelöst.

Wenn die Ansicht nicht in dem Projekt erstellt wird, das zum Ausführen der CREATE VIEW-Anweisung verwendet wird, müssen alle Verweise im Ansichtstext query_expression mit Projekt-IDs qualifiziert sein. Die vorherige Beispielabfrage CREATE VIEW ist beispielsweise ungültig, wenn sie in einem anderen Projekt als myProject ausgeführt wird.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create Das Dataset, in dem Sie die Ansicht erstellen.

Darüber hinaus erfordert die Klausel OR REPLACE die Berechtigung bigquery.tables.update.

Wenn die Klausel OPTIONS eine Ablaufzeit enthält, ist auch die Berechtigung bigquery.tables.delete erforderlich.

Beispiele

Neue Ansicht erstellen

Im folgenden Beispiel wird in mydataset eine Ansicht mit dem Namen newview erstellt.

CREATE VIEW `myproject.mydataset.newview`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="newview",
  description="a view that expires in 2 days",
  labels=[("org_unit", "development")]
)
AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

Wenn der Ansichtsname im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: project_id:dataset.table

Die Ansicht wird mit der folgenden Abfrage in Google Standard-SQL definiert:

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

Die Liste der Ansichtsoptionen legt Folgendes fest:

  • Ablaufzeit: 48 Stunden ab dem Zeitpunkt, an dem die Ansicht erstellt wird
  • Anzeigename: newview
  • Beschreibung: A view that expires in 2 days
  • Label: org_unit = development

Ansicht nur erstellen, wenn sie nicht vorhanden ist

Im folgenden Beispiel wird nur dann in mydataset eine Ansicht mit dem Namen newview erstellt, wenn in mydataset keine Ansicht mit dem Namen newview vorhanden ist. Wenn der Ansichtsname im Dataset vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="newview",
  description="a view that expires in 2 days",
  labels=[("org_unit", "development")]
)
AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

Die Ansicht wird mit der folgenden Abfrage in Google Standard-SQL definiert:

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

Die Liste der Ansichtsoptionen legt Folgendes fest:

  • Ablaufzeit: 48 Stunden ab dem Zeitpunkt, an dem die Ansicht erstellt wird
  • Anzeigename: newview
  • Beschreibung: A view that expires in 2 days
  • Label: org_unit = development

Ansicht erstellen oder ersetzen

Im folgenden Beispiel wird in mydataset eine Ansicht mit dem Namen newview erstellt. Wenn newview bereits in mydataset vorhanden ist, wird diese mit dem angegebenen Abfrageausdruck überschrieben.

CREATE OR REPLACE VIEW `myproject.mydataset.newview`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="newview",
  description="a view that expires in 2 days",
  labels=[("org_unit", "development")]
)
AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

Die Ansicht wird mit der folgenden Abfrage in Google Standard-SQL definiert:

SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable

Die Liste der Ansichtsoptionen legt Folgendes fest:

  • Ablaufzeit: 48 Stunden ab dem Zeitpunkt, an dem die Ansicht erstellt wird
  • Anzeigename: newview
  • Beschreibung: A view that expires in 2 days
  • Label: org_unit = development

CREATE MATERIALIZED VIEW-Anweisung

: Erstellt eine neue materialisierte Ansicht.

Syntax

CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] materialized_view_name
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(materialized_view_option_list)]
AS query_expression

Argumente

  • IF NOT EXISTS: Wenn eine materialisierte Ansicht oder eine andere Tabellenressource mit demselben Namen vorhanden ist, hat die Anweisung CREATE keine Auswirkungen. Kann nicht mit OR REPLACE angezeigt werden.

  • materialized_view_name: Der Name der materialisierten Ansicht, die Sie erstellen. Siehe Tabellenpfadsyntax.

    Wenn project_name im Namen der materialisierten Ansicht weggelassen wird oder er mit dem Projekt übereinstimmt, das diese DDL-Abfrage ausführt, wird letzteres auch als Standardprojekt für Verweise auf Tabellen, Funktionen und andere Ressourcen in query_expression verwendet. Das Standardprojekt der Referenzen ist festgelegt und hängt nicht von den zukünftigen Abfragen ab, die die neue materialisierte Ansicht aufrufen. Andernfalls müssen alle Verweise in query_expression mit Projektnamen qualifiziert sein.

    Der Name der materialisierten Ansicht muss pro Dataset eindeutig sein.

  • partition_expression: Ein Ausdruck, der festlegt, wie die Tabelle partitioniert wird. Eine materialisierte Ansicht kann nur auf die gleiche Weise wie die Tabelle in query expression (die Basistabelle) partitioniert werden.

  • clustering_column_list: Eine durch Kommas getrennte Liste mit Spaltenreferenzen, die festlegen, wie die materialisierte Ansicht gruppiert wird.

  • Mit materialized_view_option_list** können Sie zusätzliche Optionen für die materialisierte Ansicht festlegen, beispielsweise ob die Aktualisierung aktiviert ist, das Aktualisierungsintervall, ein Label und eine Ablaufzeit.

  • query_expression: Der Google Standard-SQL-Abfrageausdruck, der zur Definition der materialisierten Ansicht verwendet wird.

Details

Für CREATE MATERIALIZED VIEW-Anweisungen gelten die folgenden Regeln:

  • Nur eine CREATE-Anweisung ist zulässig.

Standardprojekt im Text der materialisierten Ansicht

Wenn die materialisierte Ansicht in dem Projekt erstellt wird, das zum Ausführen der CREATE MATERIALIZED VIEW-Anweisung verwendet wird, kann der Text der materialisierten Ansicht query_expression auf Entitäten verweisen, ohne das Projekt anzugeben. Das Standardprojekt ist das Projekt, zu dem die materialisierte Ansicht gehört. Betrachten Sie die folgende Beispielabfrage.

CREATE MATERIALIZED VIEW myProject.myDataset.myView AS SELECT * FROM anotherDataset.myTable;

Nachdem Sie die obige CREATE MATERIALIZED VIEW-Abfrage im Projekt myProject ausgeführt haben, können Sie die Abfrage SELECT * FROM myProject.myDataset.myView ausführen. Unabhängig davon, in welchem Projekt Sie diese SELECT-Abfrage ausführen, wird die referenzierte Tabelle anotherDataset.myTable immer für das Projekt myProject aufgelöst.

Wenn die materialisierte Ansicht nicht in dem Projekt erstellt wird, das zum Ausführen der CREATE VIEW-Anweisung verwendet wird, müssen alle Verweise im Text der materialisierten Ansicht query_expression mit Projekt-IDs qualifiziert sein. Die vorherige Beispielabfrage CREATE MATERIALIZED VIEW ist beispielsweise ungültig, wenn sie in einem anderen Projekt als myProject ausgeführt wird.

materialized_view_option_list

In der Optionsliste können Sie Optionen für die materialisierte Ansicht festlegen, beispielsweise ob die Aktualisierung aktiviert ist, das Aktualisierungsintervall, ein Label und eine Ablaufzeit. Sie haben auch die Möglichkeit, mehrere Optionen mithilfe einer durch Kommas getrennten Liste anzugeben.

Geben Sie eine Optionsliste für die materialisierte Ansicht im folgenden Format an:

NAME=VALUE, ...

NAME und VALUE müssen eine der folgenden Kombinationen sein:

NAME VALUE Details
enable_refresh BOOLEAN

Beispiel: enable_refresh=false

refresh_interval_minutes FLOAT64

Beispiel: refresh_interval_minutes=20

expiration_timestamp TIMESTAMP

Beispiel: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Dieses Attribut entspricht dem Attribut expirationTime der Tabellenressource.

friendly_name

STRING

Beispiel: friendly_name="my_mv"

Dieses Attribut entspricht dem Attribut friendlyName der Tabellenressource.

description

STRING

Beispiel: description="a materialized view that expires in 2025"

Dieses Attribut entspricht dem Attribut description der Tabellenressource.

labels

ARRAY<STRUCT<STRING, STRING>>

Beispiel: labels=[("org_unit", "development")]

Dieses Attribut entspricht dem Attribut labels der Tabellenressource.

Erforderliche Berechtigungen

Diese Anweisung erfordert die folgenden IAM-Berechtigungen:

Berechtigung Ressource
bigquery.tables.create