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

Mithilfe von DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) können Sie BigQuery-Ressourcen mit der Standard-SQL-Abfragesyntax erstellen und ändern. Derzeit können DDL-Befehle in BigQuery für Folgendes verwendet werden:

Erforderliche Berechtigungen

Alle Nutzer benötigen die Berechtigung bigquery.jobs.create, um einen Job zu erstellen und DDL-Anweisungen auszuführen. Für jede Art von DDL-Anweisung sind außerdem bestimmte Berechtigungen erforderlich. In diesem Abschnitt wird erläutert, welche IAM-Rollen (Identity and Access Management) diese Berechtigungen und die erforderlichen Berechtigungen für jeden Anweisungstyp bieten.

IAM-Rollen

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

Die Rollen bigquery.admin und bigquery.dataOwner enthalten alle anderen erforderlichen Berechtigungen zum Ausführen von DDL-Anweisungen. Die Rolle bigquery.dataEditor enthält einige der erforderlichen Berechtigungen, wie in der Tabelle im nächsten Abschnitt dargestellt.

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

Berechtigungen zum Ausführen von DDL-Anweisungen

Für die verschiedenen Typen von DDL-Anweisungen sind unterschiedliche Berechtigungen erforderlich, wie in der folgenden Tabelle gezeigt:

SQL-Anweisung Berechtigungen IAM-Rollen Berechtigungsdetails
CREATE EXTERNAL TABLE bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Tabellenberechtigungen
CREATE FUNCTION bigquery.routines.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
CREATE MATERIALIZED VIEW bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
materialisierte Ansichtsberechtigungen
CREATE PROCEDURE bigquery.routines.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
CREATE SCHEMA bigquery.datasets.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Dataset-Berechtigungen
CREATE TABLE bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Tabellenberechtigungen
CREATE VIEW bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Berechtigungen aufrufen
ALTER COLUMN
DROP NOT NULL
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Tabellenberechtigungen
ALTER COLUMN
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Tabellenberechtigungen
ALTER MATERIALIZED VIEW
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
materialisierte Ansichtsberechtigungen
ALTER SCHEMA
SET OPTIONS
bigquery.datasets.get
bigquery.datasets.update
bigquery.admin
bigquery.dataOwner
Berechtigungen zum Aktualisieren von Datasets
ALTER TABLE
ADD COLUMN
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Berechtigungen zur Tabellenverwaltung
ALTER TABLE
RENAME TO
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Berechtigungen zur Tabellenverwaltung
ALTER TABLE
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Berechtigungen zur Tabellenverwaltung
ALTER TABLE
DROP COLUMN
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Berechtigungen zur Tabellenverwaltung
ALTER VIEW
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Berechtigungen zur Tabellenverwaltung
DROP EXTERNAL TABLE bigquery.tables.delete
bigquery.tables.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Drop Table-Berechtigungen
DROP FUNCTION bigquery.routines.delete bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
DROP MATERIALIZED VIEW bigquery.tables.delete
bigquery.tables.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
materialisierte Ansichtsberechtigungen
DROP PROCEDURE bigquery.routines.delete
bigquery.routines.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
DROP SCHEMA bigquery.datasets.delete
bigquery.tables.delete
*

* Nicht erforderlich für ein leeres Schema.
bigquery.admin
bigquery.dataOwner
Drop Schema-Berechtigungen
DROP TABLE bigquery.tables.delete
bigquery.tables.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Drop Table-Berechtigungen
DROP VIEW bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Drop Table-Berechtigungen

DDL-Anweisungen ausführen

Sie können DDL-Anweisungen mit der 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 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 Dataset.

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.

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

Dabei gilt:

  • IF NOT EXISTS: Wenn Sie diese Klausel einbinden und das Dataset bereits vorhanden ist, wird die Anweisung ohne Aktion erfolgreich ausgeführt. Wenn Sie diese Klausel weglassen und das Dataset bereits vorhanden ist, gibt die Anweisung einen Fehler zurück.
  • project_name ist der Name des Projekts, in dem Sie das Dataset erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Anweisung ausführt.

  • dataset_name ist der Name des zu erstellenden Datasets.

  • schema_option_list gibt eine Liste von Optionen zum Erstellen des Datasets an.

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

Beispiele

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

CREATE TABLE-Anweisung

Zum Erstellen einer Tabelle in BigQuery verwenden Sie die DDL-Anweisung CREATE TABLE.

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

Dabei gilt:

  • IF NOT EXISTS: Erstellt nur dann eine neue Tabelle, wenn die Tabelle im angegebenen Dataset derzeit nicht vorhanden ist. Kann nicht mit OR REPLACE angezeigt werden.

  • TEMP | TEMPORARY: Erstellt eine temporäre Tabelle. Weitere Informationen finden Sie unter Temporäre Tabellen.

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

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

  • Es ist nur eine CREATE-Anweisung 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.

Außerdem unterstützt diese Anweisung die folgende Variante:

  • CREATE TABLE LIKE: Tabelle mit demselben Schema wie bei einer vorhandenen Tabelle erstellen.
  • CREATE TABLE COPY: Erstellen Sie eine Tabelle, indem Sie Schema und Daten aus einer vorhandenen Tabelle kopieren.

Tabellenpfad

project_name ist der Name des Projekts, in dem Sie die Tabelle erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, in dem Sie die Tabelle erstellen. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_name ist der Name der Tabelle, die Sie erstellen.

Wenn Sie eine Tabelle in BigQuery erstellen, muss der Tabellenname pro Dataset eindeutig sein. Der Tabellenname kann:

  • bis zu 1.024 Zeichen enthalten
  • 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 Tabellennamen sind table 01, ग्राहक, 00_お客様, étudiant-01.

Einige Tabellennamen und Präfixe für Tabellennamen sind reserviert. Wenn Ihnen eine Fehlermeldung angezeigt wird, dass der Tabellenname oder das Präfix reserviert ist, wählen Sie einen anderen Namen aus und versuchen Sie es noch einmal.

column

column :=
  column_name column_schema

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

field_list :=
  field_name column_schema [, ...]

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

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

  • 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. CAST(1 AS INT64 NOT NULL) ist beispielsweise ungültig.

  • simple_type ist ein beliebiger unterstützter Datentyp außer STRUCT und ARRAY.

  • field_list stellt die Felder in einem Struct dar.

  • field_name ist 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 mit einer der folgenden Varianten kombiniert werden:

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, Suchparameter und Skalarfunktionen enthält. Wenn der konstante Ausdruck null ergibt, wird die entsprechende Option NAME ignoriert.

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

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.

query_statement

Die Klausel AS query_statement gibt die Abfrage an, über die die Tabelle erstellt werden soll. Weitere Informationen zur unterstützten Form von query_statement finden Sie in der Referenz zur SQL-Syntax.

Bekannte Einschrä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.

CREATE TABLE LIKE

Um eine neue Tabelle mit denselben Metadaten wie bei einer anderen Tabelle zu erstellen, ersetzen Sie bei Verwendung der Anweisung CREATE TABLE die Spaltenliste durch die Klausel LIKE.

Syntax

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}
[[project_name.]dataset_name.]table_name
LIKE [[project_name.]dataset_name.]source_table_name
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]

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 von ALTER TABLE SET OPTIONS.

CREATE TABLE COPY

Zum Erstellen einer neuen Tabelle mit denselben Metadaten und Daten wie bei einer anderen Tabelle ersetzen Sie die Spaltenliste durch die Klausel COPY, wenn Sie die Anweisung CREATE TABLE verwenden.

Syntax

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}
[[project_name.]dataset_name.]table_name
COPY [[project_name.]dataset_name.]source_table_name
[OPTIONS(table_option_list)]

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 neue Tabelle hat nach der Erstellung keine Beziehung mehr zur Quelltabelle. Daher werden Änderungen an der Quelltabelle nicht an die neue Tabelle weitergegeben.

Die Partitionierung und das Clustering werden von der neuen Tabelle aus der Quelltabelle übernommen. Standardmäßig werden auch die Tabellenoptions-Metadaten aus der Quelltabelle übernommen. Sie können Tabellenoptionen in der neuen Tabelle aber mithilfe der OPTIONS-Klauseln in der SQL-Anweisung anpassen. Das Verhalten entspricht dem Ausführen von ALTER TABLE SET OPTIONS nach dem Kopieren der Tabelle.

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 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),
    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-Wert mit a (einem Array mit parametrisierten Bytes mit einer maximalen Länge von 5), b (ein parametrisiertes NUMERIC mit einer maximalen Genauigkeit von 15 und einer maximalen Skalierung von 2) und c (einer 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

CREATE SNAPSHOT TABLE-Anweisung

Mit der DDL-Anweisung CREATE SNAPSHOT TABLE können Sie einen Tabellen-Snapshot einer Standardtabelle erstellen oder eine Kopie eines Tabellen-Snapshots erstellen.

{CREATE SNAPSHOT TABLE | CREATE SNAPSHOT TABLE IF NOT EXISTS}
[[snapshot_project_name.]snapshot_dataset_name.]table_snapshot_name
CLONE [[source_project_name.]source_dataset_name.]source_table_name
[FOR SYSTEM_TIME AS OF time_expression]
[OPTIONS(snapshot_option_list)]

Dabei gilt:

{CREATE SNAPSHOT TABLE | CREATE SNAPSHOT TABLE IF NOT EXISTS} ist eine der folgenden Anweisungen:

  • CREATE SNAPSHOT TABLE: Erstellt einen neuen Tabellen-Snapshot, wenn der angegebene Tabellen-Snapshot noch nicht vorhanden ist. Wenn der angegebene Tabellen-Snapshot-Name bereits vorhanden ist, wird ein Fehler zurückgegeben.
  • CREATE SNAPSHOT TABLE IF NOT EXISTS: Erstellt einen neuen Tabellen-Snapshot, wenn der angegebene Tabellen-Snapshot noch nicht vorhanden ist. Wenn der angegebene Tabellen-Snapshot-Name bereits vorhanden ist, wird keine Aktion ausgeführt und kein Fehler zurückgegeben.

snapshot_project_name ist der Name des Projekts, in dem Sie den Tabellen-Snapshot erstellen möchten. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

snapshot_dataset_name ist der Name des Datasets, in dem Sie den Tabellen-Snapshot erstellen möchten. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_snapshot_name ist der Name des Tabellen-Snapshots, den Sie erstellen möchten. Der Name des Tabellen-Snapshots muss pro Dataset eindeutig sein. Der Name des Tabellen-Snapshots kann Folgendes enthalten:

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

Mit OPTIONS(snapshot_option_list) können Sie zusätzliche Optionen zum Erstellen von Tabellen-Snapshots angeben, z. B. ein Label und eine Ablaufzeit.

CLONE gibt die Tabelle an, die Sie erstellen möchten, oder den Tabellen-Snapshot, den Sie kopieren möchten.

Mit FOR SYSTEM_TIME AS OF können Sie die Version der Tabelle auswählen, die zu der von timestamp_expression angegebenen Zeit gültig 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.

source_project_name ist der Name des Projekts der Tabelle, für die Sie einen Snapshot erstellen möchten, oder des Tabellen-Snapshots, den Sie kopieren möchten. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

source_dataset_name ist der Name des Datasets, das die Tabelle enthält, von der Sie einen Snapshot erstellen möchten, oder den Tabellen-Snapshot, den Sie kopieren möchten. Die Standardeinstellung ist defaultDataset in der Anfrage.

source_table_name ist der Name der Tabelle, die Sie erstellen möchten, oder des zu kopierenden Tabellen-Snapshots. 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.

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

  • Nur eine CREATE-Anweisung ist zulässig.
  • Die Tabelle, die geklont wird, muss eine der folgenden sein:
    • Eine Standardtabelle (keine Ansicht oder materialisierte Ansicht)
    • Ein Tabellen-Snapshot
  • Die FOR SYSTEM_TIME AS OF-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

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. Wenn der konstante Ausdruck null ergibt, wird die entsprechende Option NAME ignoriert.

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

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

Zum Wiederherstellen eines Tabellen-Snapshots in einer Standardtabelle in BigQuery verwenden Sie die DDL-Anweisung CREATE TABLE CLONE.

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}
[[destination_project_name.]destination_dataset_name.]destination_table_name
CLONE [[snapshot_project_name.]snapshot_dataset_name.]table_snapshot_name
[OPTIONS(table_option_list)]

Dabei gilt:

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE} ist eine der folgenden Anweisungen:

  • CREATE TABLE: Erstellt eine neue Tabelle aus einem Tabellen-Snapshot, wenn der angegebene Name der Zieltabelle noch nicht vorhanden ist. Wenn der angegebene Name der Zieltabelle bereits vorhanden ist, wird ein Fehler zurückgegeben.
  • CREATE TABLE IF NOT EXISTS: Erstellt eine neue Tabelle aus einem Tabellen-Snapshot, wenn der angegebene Name der Zieltabelle noch nicht vorhanden ist. Wenn der angegebene Name der Zieltabelle bereits vorhanden ist, wird keine Aktion ausgeführt und kein Fehler zurückgegeben.
  • CREATE OR REPLACE TABLE: Erstellt eine Tabelle und ersetzt eine vorhandene Tabelle mit dem gleichen Namen im angegebenen Dataset.

destination_project_name ist der Name des Datasets, in dem Sie die Tabelle erstellen möchten. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

destination_dataset_name ist der Name des Datasets, in dem Sie die Tabelle erstellen möchten. Die Standardeinstellung ist defaultDataset in der Anfrage.

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.

CLONE: Der Tabellen-Snapshot, den Sie wiederherstellen möchten.

snapshot_project_name ist der Name des Projekts, das den wiederherzustellenden Tabellen-Snapshot enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

snapshot_dataset_name ist der Name des Projekts, das den wiederherzustellenden Tabellen-Snapshot enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_snapshot_name ist der Name des Tabellen-Snapshots, den Sie wiederherstellen möchten.

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

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

OPTIONS

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

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

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.mytableshapshot erstellt:

CREATE TABLE IF NOT EXISTS `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")]
)
CLONE `myproject.mydataset.mytablesnapshot`

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 von Tabellen-Snapshots finden Sie unter CREATE SNAPSHOT TABLE.

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

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

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.newtable
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.soucetable
AS SELECT * FROM mydataset.myothertable

CREATE VIEW-Anweisung

Zum Erstellen einer Ansicht in BigQuery verwenden Sie die DDL-Anweisung CREATE VIEW.

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
[[project_name.]dataset_name.]view_name [(view_column_name_list)]
[OPTIONS(view_option_list)]
AS query_expression

Dabei gilt:

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW} ist eine der folgenden Anweisungen:

  • CREATE VIEW: Erstellt eine neue Ansicht.
  • CREATE VIEW IF NOT EXISTS: Erstellt nur dann eine neue Ansicht, wenn die Ansicht derzeit im angegebenen Dataset nicht vorhanden ist.
  • CREATE OR REPLACE VIEW: Erstellt eine Ansicht und ersetzt eine vorhandene Ansicht mit dem gleichen Namen im angegebenen Dataset.

project_name ist der Name des Projekts, in dem Sie die Ansicht erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, in dem Sie die Ansicht erstellen. Die Standardeinstellung ist defaultDataset in der Anfrage.

view_name ist der Name der Ansicht, die Sie ändern möchten.

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

  • bis zu 1.024 Zeichen enthalten
  • 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 sind view 01, ग्राहक, 00_お客様 und étudiant-01.

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.

Mit view_column_name_list können Sie explizit die Spaltennamen der Ansicht angeben. Dabei kann es sich um Aliasse für die Spaltennamen in der zugrunde liegenden SQL-Abfrage handeln.

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

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

  • Es ist nur eine CREATE-Anweisung zulässig.

query_expression ist der Standard-SQL-Abfrageausdruck, der zur Definition der Ansicht verwendet wird.

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 mit einer der folgenden Varianten kombiniert werden:

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, Suchparameter und Skalarfunktionen enthält. Wenn der konstante Ausdruck null ergibt, wird die entsprechende Option NAME ignoriert.

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

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.

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

Verwenden Sie die DDL-Anweisung CREATE MATERIALIZED VIEW, um eine materialisierte Ansicht in BigQuery zu erstellen.

{CREATE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW IF NOT EXISTS }
[[project_name.]dataset_name.]materialized_view_name
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(materialized_view_option_list)]
AS query_expression

Dabei gilt:

{CREATE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW IF NOT EXISTS } ist eine der folgenden Anweisungen:

  • CREATE MATERIALIZED VIEW: Erstellt eine neue materialisierte Ansicht.

  • CREATE MATERIALIZED VIEW IF NOT EXISTS: Erstellt eine neue materialisierte Ansicht nur, wenn die materialisierte Ansicht derzeit nicht im angegebenen Dataset vorhanden ist.

project_name ist der Name des Projekts, in dem Sie die materialisierte Ansicht erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

Wenn der project_name weggelassen wird oder mit dem Projekt übereinstimmt, das diese DDL-Abfrage ausführt, wird Letzteres auch als Standardprojekt für die Verweise auf Tabellen, Funktionen usw. in query_expression verwendet. Beachten Sie, dass das Standardprojekt der Verweise feststeht und nicht von den zukünftigen Abfragen abhängt, die die neue materialisierte Ansicht aufrufen. Andernfalls müssen alle Verweise in query_expression mit Projekten qualifiziert sein.

dataset_name ist der Name des Datasets, in dem Sie die materialisierte Ansicht erstellen. Die Standardeinstellung ist defaultDataset in der Anfrage.

materialized_view_name ist der Name der materialisierten Ansicht, die Sie erstellen. Der Name der materialisierten Ansicht muss pro Dataset eindeutig sein. Der Name der materialisierten Ansicht kann:

  • bis zu 1.024 Zeichen enthalten
  • Buchstaben (groß-/kleingeschrieben), Zahlen und Unterstriche enthalten.

Die Klauseln PARTITION BY und CLUSTER BY werden genau wie in einer CREATE TABLE-Anweisung verwendet. Eine materialisierte Ansicht kann nur auf die gleiche Weise wie die Tabelle in query expression (die Basistabelle) partitioniert werden.

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.

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

  • Es ist nur eine CREATE-Anweisung zulässig.

query_expression ist der Standard-SQL-Abfrageausdruck, der zur Definition der materialisierten Ansicht verwendet 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 mit einer der folgenden Varianten kombiniert werden:

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.

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.

Beispiele

Eine neue materialisierte Ansicht erstellen

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

CREATE MATERIALIZED VIEW `myproject.mydataset.new_mv`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="new_mv",
  description="a materialized view that expires in 2 days",
  labels=[("org_unit", "development")],
  enable_refresh=true,
  refresh_interval_minutes=20
)
AS SELECT column_1, SUM(column_2) AS sum_2, AVG(column_3) AS avg_3
FROM `myproject.mydataset.mytable`
GROUP BY column_1

Wenn der Name der materialisierten Ansicht im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Already Exists: project_id:dataset.materialized_view

Wenn Sie eine DDL-Anweisung zum Erstellen einer materialisierten Ansicht verwenden, müssen Sie das Projekt, das Dataset und die materialisierte Ansicht im folgenden Format angeben: `project_id.dataset.materialized_view` (einschließlich der Backticks, wenn project_id Sonderzeichen enthält); zum Beispiel `myproject.mydataset.new_mv`.

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

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

Die Optionsliste für die materialisierte Ansicht legt Folgendes fest:

  • Ablaufzeit: 48 Stunden ab dem Zeitpunkt, an dem die materialisierte Ansicht erstellt wird
  • Anzeigename: new_mv
  • Beschreibung: A materialized view that expires in 2 days
  • Label: org_unit = development
  • Aktualisierung aktiviert: "true"
  • Aktualisierungsintervall: 20 Minuten

Eine materialisierte Ansicht nur erstellen, wenn die materialisierte Ansicht nicht vorhanden ist

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

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

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

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

Die Optionsliste für die materialisierte Ansicht legt Folgendes fest:

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

Eine materialisierte Ansicht mit Partitionierung und Clustering erstellen

Im folgenden Beispiel wird eine materialisierte Ansicht namens new_mv in mydataset erstellt, die nach der Spalte col_datetime partitioniert und nach der Spalte col_int geclustert wird:

CREATE MATERIALIZED VIEW `myproject.mydataset.new_mv`
PARTITION BY DATE(col_datetime)
CLUSTER BY col_int
AS SELECT col_int, col_datetime, COUNT(1) as cnt
   FROM `myproject.mydataset.mv_base_table`
   GROUP BY col_int, col_datetime

Die Basistabelle mv_base_table muss ebenfalls nach der Spalte col_datetime partitioniert werden. Weitere Informationen finden Sie unter Mit partitionierten und geclusterten Tabellen arbeiten.

CREATE EXTERNAL TABLE-Anweisung

Mit der CREATE EXTERNAL TABLE-Anweisung wird eine externe Tabelle erstellt. Über externe Tabellen können in BigQuery Daten abgefragt werden, die außerhalb des BigQuery-Speichers abgelegt sind. Weitere Informationen zu externen Tabellen finden Sie unter Einführung in externe Datenquellen.

CREATE [OR REPLACE] EXTERNAL TABLE [IF NOT EXISTS] [[project_name.]dataset_name.]table_name
[(
  column_name column_schema,
  ...
)]

[WITH PARTITION COLUMNS
  [(
      partition_column_name partition_column_type,
      ...
  )]
]
OPTIONS (
  external_table_option_list,
  ...
);

Dabei gilt:

  • project_name ist der Name des Projekts, in dem Sie die Tabelle erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt.

  • dataset_name ist der Name des Datasets, in dem Sie die Tabelle erstellen.

  • table_name ist der Name der externen Tabelle.

  • column_name ist der Name einer Spalte in der Tabelle.

  • Mit column_schema wird das Schema der Spalte angegeben. Dabei wird dieselbe Syntax wie die Definition column_schema in der CREATE TABLE-Anweisung verwendet. Wenn Sie diese Klausel nicht einbeziehen, erkennt BigQuery das Schema automatisch.

  • partition_column_name ist der Name einer Partitionsspalte. Geben Sie dieses Feld an, wenn Ihre externen Daten ein mit Hive partitioniertes Layout verwenden. Weitere Informationen finden Sie unter Unterstützte Datenlayouts.

  • partition_column_type ist der Typ der Partitionsspalte.

  • external_table_option_list gibt eine Liste von Optionen zum Erstellen der externen Tabelle an.

external_table_option_list

Mit der Optionsliste legen Sie Optionen zum Erstellen der externen Tabelle fest. Die Optionen format und uris sind erforderlich. Geben Sie die Optionsliste im folgenden Format an: NAME=VALUE, ....

Optionen
allow_jagged_rows

BOOL

Bei true werden Zeilen ohne nachgestellte optionale Spalten zugelassen.

Gilt für CSV-Daten.

allow_quoted_newlines

BOOL

Bei true werden in Anführungszeichen eingeschlossene Datenabschnitte mit Zeilenumbruchzeichen in der Datei zugelassen.

Gilt für CSV-Daten.

compression

STRING

Komprimierungstyp der Datenquelle. Diese Werte werden unterstützt: GZIP Wenn keine Angabe erfolgt, ist die Datenquelle unkomprimiert.

Gilt für CSV- und JSON-Daten.

description

STRING

Eine Beschreibung dieser Tabelle.

enable_logical_types

BOOL

Bei true werden logische Avro-Typen in die entsprechenden SQL-Typen konvertiert. Weitere Informationen finden Sie unter Logische Typen.

Gilt für Avro-Daten.

encoding

STRING

Die Zeichencodierung der Daten. Unterstützte Werte sind: UTF8 (oder UTF-8), ISO_8859_1 (oder ISO-8859-1).

Gilt für CSV-Daten.

expiration_timestamp

TIMESTAMP

Die Zeit, zu der diese Tabelle abläuft. Wenn keine Angabe erfolgt, läuft die Tabelle nicht ab.

Beispiel: "2025-01-01 00:00:00 UTC".

field_delimiter

STRING

Das Trennzeichen für Felder in einer CSV-Datei.

Gilt für CSV-Daten.

format

STRING

Das Format der externen Daten. Unterstützte Werte sind: AVRO, CSV, DATASTORE_BACKUP, GOOGLE_SHEETS, NEWLINE_DELIMITED_JSON (oder JSON), ORC, PARQUET.

Der Wert JSON entspricht NEWLINE_DELIMITED_JSON.

decimal_target_types

ARRAY<STRING>

Bestimmt, wie ein Decimal-Typ konvertiert wird. Entspricht ExternalDataConfiguration.decimal_target_types

Beispiel: ["NUMERIC", "BIGNUMERIC"].

json_extension

STRING

Gibt für JSON-Daten ein bestimmtes JSON-Austauschformat an. Wenn nicht angegeben, liest BigQuery die Daten als generische JSON-Einträge.

Diese Werte werden unterstützt:
GEOJSON (Vorschau). GeoJSON-Daten. Weitere Informationen finden Sie unter GeoJSON-Daten laden.

hive_partition_uri_prefix

STRING

Ein gemeinsames Präfix für alle Quell-URIs, bevor die Codierung des Partitionierungsschlüssels beginnt. Gilt nur für mit Hive partitionierte Tabellen.

Gilt für Avro-, CSV-, JSON-, Parquet- und ORC-Daten.

Beispiel: "gs://bucket/path".

ignore_unknown_values

BOOL

Bei true werden zusätzliche Werte ignoriert, die nicht im Tabellenschema enthalten sind, ohne dass ein Fehler zurückgegeben wird.

Gilt für CSV- und JSON-Daten.

max_bad_records

INT64

Die maximale Anzahl fehlerhafter Datensätze, die beim Lesen der Daten ignoriert werden.

Gilt für CSV-, JSON- und Google Tabellen-Daten.

null_marker

STRING

Der String, der NULL-Werte in einer CSV-Datei darstellt.

Gilt für CSV-Daten.

projection_fields

STRING

Eine Liste der zu ladenden Entitätsattribute.

Gilt für Datastore-Daten.

quote

STRING

Der String, der zum Kennzeichnen von Datenabschnitten in einer CSV-Datei verwendet wird. Wenn Ihre Daten Zeilenumbruchzeichen in Anführungszeichen enthalten, setzen Sie auch das Attribut allow_quoted_newlines auf true.

Gilt für CSV-Daten.

require_hive_partition_filter

BOOL

Bei true ist für alle Abfragen über diese Tabelle ein Partitionsfilter erforderlich, mit dem Partitionen beim Lesen von Daten entfernt werden können. Gilt nur für mit Hive partitionierte Tabellen.

Gilt für Avro-, CSV-, JSON-, Parquet- und ORC-Daten.

sheet_range

STRING

Bereich einer Google Tabellen-Tabelle, aus der abgefragt werden soll.

Gilt für Google Tabellen-Daten.

Beispiel: “sheet1!A1:B20”.

skip_leading_rows

INT64

Die Anzahl der Zeilen am Anfang einer Datei, die beim Lesen der Daten übersprungen werden sollen.

Gilt für CSV- und Google Tabellen-Daten.

uris

ARRAY<STRING>

Ein Array von voll qualifizierten URIs für die externen Datenspeicherorte.

Beispiel: ["gs://bucket/path/*"].

Die CREATE EXTERNAL TABLE-Anweisung unterstützt nicht das Erstellen temporärer externer Tabellen.

Zum Erstellen einer extern partitionierten Tabelle verwenden Sie die Klausel WITH PARTITION COLUMNS, um die Details des Partitionsschemas anzugeben. BigQuery prüft die Spaltendefinitionen anhand des externen Speicherorts. Die Schemadeklaration muss die Reihenfolge der Felder im externen Pfad genau einhalten. Weitere Informationen zur externen Partitionierung finden Sie unter Extern partitionierte Daten abfragen.

Beispiele

Im folgenden Beispiel wird eine externe Tabelle aus mehreren URIs erstellt. Das Datenformat ist CSV. In diesem Beispiel wird die automatische Schemaerkennung verwendet.

CREATE EXTERNAL TABLE dataset.CsvTable OPTIONS (
  format = 'CSV',
  uris = ['gs://bucket/path1.csv', 'gs://bucket/path2.csv']
);

Im folgenden Beispiel wird eine externe Tabelle aus einer CSV-Datei erstellt und das Schema explizit angegeben. Außerdem wird das Feldtrennzeichen ('|') angegeben und die Anzahl der maximal zulässigen fehlerhaften Datensätzen festgelegt.

CREATE OR REPLACE EXTERNAL TABLE dataset.CsvTable
(
  x INT64,
  y STRING
)
OPTIONS (
  format = 'CSV',
  uris = ['gs://bucket/path1.csv'],
  field_delimiter = '|',
  max_bad_records = 5
);

Im folgenden Beispiel wird eine extern partitionierte Tabelle erstellt. Mit der automatischen Schemaerkennung wird sowohl das Dateisystem als auch das Hive-Partitionierungslayout ermittelt.

Wenn der externe Pfad beispielsweise gs://bucket/path/field_1=first/field_2=1/data.csv ist, lauten die Partitionsspalten field_1 (STRING) und field_2 (INT64).

CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable
WITH PARTITION COLUMNS
OPTIONS (
  uris=['gs://bucket/path/*'],
  format=csv,
  hive_partition_uri_prefix='gs://bucket/path'
);

Im folgenden Beispiel wird eine extern partitionierte Tabelle erstellt, indem die Partitionsspalten explizit angegeben werden. In diesem Beispiel wird davon ausgegangen, dass der externe Dateipfad das Muster gs://bucket/path/field_1=first/field_2=1/data.csv hat.

CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable
WITH PARTITION COLUMNS (
  field_1 STRING, -- column order must match the external path
  field_2 INT64
)
OPTIONS (
  uris=['gs://bucket/path/*'],
  format=csv,
  hive_partition_uri_prefix='gs://bucket/path'
);

CREATE FUNCTION-Anweisung

Erstellt eine benutzerdefinierte Funktion (UDF). BigQuery unterstützt UDFs, die entweder in SQL oder JavaScript geschrieben sind. Weitere Informationen zu UDFs finden Sie unter Benutzerdefinierte Standard-SQL-Funktionen.

Verwenden Sie die folgende Syntax, um eine SQL-UDF zu erstellen:

CREATE [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS]
    [[project_name.]dataset_name.]function_name
    ([named_parameter[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

Verwenden Sie die folgende Syntax, um eine JavaScript-UDF zu erstellen:

CREATE [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS]
    [[project_name.]dataset_name.]function_name
    ([named_parameter[, ...]])
  RETURNS data_type
  [determinism_specifier]
  LANGUAGE js
  [OPTIONS (function_option_list)]
  AS javascript_code

named_parameter:
  param_name param_type

determinism_specifier:
  { DETERMINISTIC | NOT DETERMINISTIC }

Diese Syntax besteht aus den folgenden Komponenten:

  • IF NOT EXISTS Erstellt eine neue Funktion nur, wenn die Funktion derzeit nicht im angegebenen Dataset vorhanden ist. Kann nicht mit OR REPLACE angezeigt werden.

  • TEMP oder TEMPORARY. Erstellt eine temporäre Funktion. Wenn die Klausel nicht vorhanden ist, erstellt die Anweisung eine persistente UDF. Sie können persistente UDFs für mehrere Abfragen verwenden, temporäre UDFs jedoch nur in einer einzigen Abfrage, einem Skript oder einer Prozedur.

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

  • project_name. Bei persistenten Funktionen der Name des Projekts, in dem Sie die Funktion erstellen. Die Standardeinstellung ist das Projekt, das die DDL-Abfrage ausführt. Geben Sie nicht den Projektnamen für temporäre Funktionen an.

  • dataset_name. Bei persistenten Funktionen der Name des Datasets, in dem Sie die Funktion erstellen. Die Standardeinstellung ist defaultDataset in der Anfrage. Geben Sie nicht den Datensatznamen für temporäre Funktionen an.

  • function_name. Der Name der Funktion.

  • named_parameter. Ein durch Kommas getrenntes Paar aus param_name und param_type. Der Wert von param_type ist ein BigQuery-Datentyp. Bei einer SQL-UDF kann der Wert von param_type auch ANY TYPE sein.

  • determinism_specifier. Gilt nur für JavaScript-UDFs. Weist BigQuery darauf hin, ob das Abfrageergebnis im Cache speicherbar ist. Kann einer der folgenden Werte sein:

    • DETERMINISTIC: Die Funktion gibt immer dasselbe Ergebnis zurück, wenn dieselben Argumente übergeben werden. Das Abfrageergebnis sind potenziell im Cache speicherbar. Wenn die Funktion add_one(i) beispielsweise immer i + 1 zurückgibt, ist die Funktion deterministisch.

    • NOT DETERMINISTIC: Die Funktion gibt nicht immer dasselbe Ergebnis zurück, wenn dieselben Argumente übergeben werden, und ist daher nicht im Cache speicherbar. Wenn die Funktion add_random(i) beispielsweise den Wert i + rand() zurückgibt, ist die Funktion nicht deterministisch und BigQuery verwendet keine im Cache gespeicherten Ergebnisse.

      Wenn alle aufgerufenen Funktionen DETERMINISTIC sind, versucht BigQuery, das Ergebnis im Cache zu speichern, außer die Ergebnisse sind aus anderen Gründen nicht im Cache speicherbar. Weitere Informationen finden Sie unter Im Cache gespeicherte Abfrageergebnisse verwenden.

  • data_type. Gibt den Datentyp an, der von der Funktion zurückgegeben wird.

    • Wenn die Funktion in SQL definiert ist, ist die Klausel RETURNS optional. Wenn die Klausel RETURNS nicht angegeben wird und die Funktion von einer Abfrage aufgerufen wird, leitet BigQuery den Ergebnistyp der Funktion aus dem SQL-Funktionsrumpf ab.
    • Wenn die Funktion in JavaScript definiert ist, muss die Klausel RETURNS verwendet werden. Weitere Informationen zu zulässigen Werten für data_type finden Sie unter Von JavaScript-UDFs unterstützte Datentypen.
  • sql_expression. Gibt den SQL-Ausdruck an, der die Funktion definiert.

  • function_option_list. Eine Liste von Optionen zum Erstellen der Funktion. Gilt nur für JavaScript-UDFs.

  • javascript_code. Die Definition einer JavaScript-Funktion. Der Wert ist ein Stringliteral. Wenn der Code Anführungszeichen und umgekehrte Schrägstriche enthält, muss er entweder maskiert oder als Rohstring dargestellt werden. Beispielsweise kann der Code return "\n"; als einer der folgenden Werte dargestellt werden:

    • String in Anführungszeichen "return \"\\n\";" Sowohl Anführungszeichen als auch umgekehrte Schrägstriche müssen maskiert werden.
    • String in drei Anführungszeichen: """return "\\n";""". Umgekehrte Schrägstriche müssen maskiert werden, während Anführungszeichen nicht maskiert werden müssen.
    • Rohstring: r"""return "\n";""". Es ist keine Maskierung erforderlich.

function_option_list

Die Optionsliste gibt Optionen zum Erstellen einer UDF an. Es werden die folgenden Optionen unterstützt:

NAME VALUE Details
description

STRING

Eine Beschreibung der UDF.
library

ARRAY<STRING>

Ein Array von JavaScript-Bibliotheken, die in die Funktionsdefinition aufgenommen werden sollen. Gilt nur für JavaScript-UDFs. Weitere Informationen finden Sie unter JavaScript-Bibliotheken einschließen.

Beispiel: ["gs://my-bucket/lib1.js", "gs://my-bucket/lib2.js"]

Beispiele

SQL-UDF erstellen

Im folgenden Beispiel wird eine nichtflüchtige SQL-UDF mit dem Namen multiplyInputs in einem Dataset mit dem Namen mydataset erstellt.

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
AS (x * y);

JavaScript-UDF erstellen

Im folgenden Beispiel wird eine temporäre JavaScript-UDF mit dem Namen multiplyInputs erstellt und aus einer SELECT-Anweisung aufgerufen:

CREATE TEMP FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS r"""
  return x*y;
""";

SELECT multiplyInputs(a, b) FROM (SELECT 3 as a, 2 as b);

CREATE TABLE FUNCTION-Anweisung

Erstellt eine Tabellenfunktion, auch Tabellenwertfunktion (Table-valued function, TVF) genannt.

CREATE [OR REPLACE] TABLE FUNCTION [IF NOT EXISTS]
  [[project_name.]dataset_name.]function_name
  ( [ function_parameter [, ...] ] )
  [RETURNS TABLE < column_declaration [, ...] > ]
  AS sql_query

function_parameter:
  parameter_name { data_type | ANY TYPE }

column_declaration:
  column_name data_type

Dabei gilt:

  • IF NOT EXISTS: Erstellt nur dann eine neue Tabellenfunktion, wenn die Funktion derzeit nicht im angegebenen Dataset vorhanden ist. Kann nicht mit OR REPLACE angezeigt werden.
  • OR REPLACE: Ersetzt jede Tabelle mit demselben Namen, sofern vorhanden. Kann nicht mit IF NOT EXISTS angezeigt werden.
  • project_name: Der Name des Projekts, in dem Sie die Funktion erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Anweisung ausführt.
  • dataset_name: Der Name des Datasets, in dem Sie die Funktion erstellen.
  • function_name: Der Name der zu erstellenden Funktion.
  • function_parameter: Ein Parameter für die Funktion, der als Parametername und Datentyp angegeben wird. Der Wert von data_type ist ein skalarer BigQuery-Datentyp oder ANY TYPE.
  • RETURNS TABLE: Das Schema der Tabelle, die von der Funktion zurückgegeben wird, angegeben als durch Kommas getrennte Liste von Spaltennamen und Datentyppaaren. Wenn RETURNS TABLE nicht vorhanden ist, leitet BigQuery das Ausgabeschema von der Abfrageanweisung im Funktionsrumpf ab. Wenn RETURNS TABLE enthalten ist, müssen die Namen im zurückgegebenen Tabellentyp mit den Spaltennamen aus der SQL-Abfrage übereinstimmen.
  • AS query: Gibt die auszuführende SQL-Abfrage an. Die SQL-Abfrage muss Namen für alle Spalten enthalten.

BigQuery wandelt Argumenttypen nach Möglichkeit implizit um. Wenn der Parametertyp beispielsweise FLOAT64 lautet und Sie einen INT64-Wert übergeben, wandelt BigQuery ihn in FLOAT64 um.

Wenn ein Parametertyp ANY TYPE ist, akzeptiert die Funktion eine Eingabe eines beliebigen Typs für dieses Argument. Der Typ, den Sie an die Funktion übergeben, muss mit der Funktionsdefinition kompatibel sein. Wenn Sie ein Argument mit einem inkompatiblen Typ übergeben, gibt die Abfrage einen Fehler zurück. Wenn mehrere Parameter den Typ ANY TYPE haben, erzwingt BigQuery keine Typbeziehung zwischen ihnen.

Weitere Informationen finden Sie unter Tabellenfunktionen.

Beispiele

Die folgende Tabellenfunktion verwendet den Parameter INT64, mit dem die Ergebnisse einer Abfrage gefiltert werden:

CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)
AS
  SELECT year, name, SUM(number) AS total
  FROM `bigquery-public-data.usa_names.usa_1910_current`
  WHERE year = y
  GROUP BY year, name

Im folgenden Beispiel wird der Rückgabetyp TABLE in der RETURNS-Klausel angegeben:

CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)
RETURNS TABLE<name STRING, year INT64, total INT64>
AS
  SELECT year, name, SUM(number) AS total
  FROM `bigquery-public-data.usa_names.usa_1910_current`
  WHERE year = y
  GROUP BY year, name

CREATE PROCEDURE-Anweisung

Erstellt eine Prozedur als einen Block von Anweisungen, die von anderen Abfragen aufgerufen werden können. Weitere Informationen finden Sie unter Skripts und gespeicherte Prozeduren.

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]
[[project_name.]dataset_name.]procedure_name (procedure_argument[, ...] )
[OPTIONS(procedure_option_list)]
BEGIN
statement_list
END;

procedure_argument: [procedure_argument_mode] argument_name argument_type

procedure_argument_mode: IN | OUT | INOUT

Beschreibung

project_name ist der Name des Projekts, in dem Sie das Verfahren erstellen. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, in dem Sie das Verfahren erstellen. Die Standardeinstellung ist defaultDataset in der Anfrage.

statement_list ist eine BigQuery-Anweisungsliste. Eine Anweisungsliste besteht aus einer Reihe von Anweisungen, die jeweils mit einem Semikolon abgeschlossen werden.

argument_type ist ein beliebiger gültiger BigQuery-Typ.

procedure_argument_mode gibt an, ob ein Argument eine Eingabe, eine Ausgabe oder beides ist.

Prozeduren können rekursiv sich selbst aufrufen.

procedure_option_list

Mit procedure_option_list können Sie Verfahrensoptionen angeben. Für Prozeduroptionen sind Syntax und Anforderungen identisch. Sie unterscheiden sich aber in den Listen für NAME und VALUE:

NAME VALUE Details
strict_mode

BOOL

Beispiel: strict_mode=FALSE

Wenn strict_mode TRUE ist, wird der Prozedurrumpf zusätzlichen Prüfungen auf Fehler wie nicht vorhandene Tabellen oder Spalten unterzogen. Die CREATE PROCEDURE-Anweisung schlägt fehl, wenn der Rumpf eine dieser Prüfungen nicht besteht.

Obwohl strict_mode nützlich zum Abrufen vieler gängiger Fehlertypen ist, ist es nicht vollständig. Die erfolgreiche Erstellung einer Prozedur mit strict_mode garantiert nicht, dass die Prozedur zur Laufzeit erfolgreich ausgeführt wird.

Wenn strict_mode FALSE ist, wird der Prozedurrumpf nur auf Syntax überprüft. Prozeduren, die wiederkehrend von selbst aufgerufen werden, sollten mit strict_mode=FALSE erstellt werden, um Fehler zu vermeiden, die durch die noch nicht vorhandene Prozedur während der Validierung verursacht wurden.

Der Standardwert ist TRUE.

Argumentmodus

IN gibt an, dass das Argument nur eine Eingabe für die Prozedur ist. Sie können für IN-Argumente entweder eine Variable oder einen Wertausdruck angeben.

OUT gibt an, dass das Argument eine Ausgabe der Prozedur ist. Ein OUT-Argument wird beim Start der Prozedur mit NULL initialisiert. Für OUT-Argumente müssen Sie eine Variable angeben.

INOUT gibt an, dass das Argument sowohl eine Eingabe für die Prozedur als auch eine Ausgabe der Prozedur ist. Auch für INOUT-Argumente müssen Sie eine Variable festlegen. Auf ein INOUT-Argument kann im Verfahrenstext in Form einer Variable und in Form von zugewiesenen neuen Werten verwiesen werden.

Wenn weder IN, OUT noch INOUT angegeben ist, wird das Argument als IN-Argument behandelt.

Bereich von Variablen

Wenn eine Variable außerhalb einer Prozedur deklariert sowie als INOUT- oder OUT-Argument an eine Prozedur übergeben wird und die Prozedur der Variablen einen neuen Wert zuweist, ist dieser außerhalb der Prozedur sichtbar.

In einer Prozedur deklarierte Variablen sind außerhalb der Prozedur nicht sichtbar und umgekehrt.

Mithilfe von SET kann einem OUT- oder INOUT-Argument aber ein Wert zugewiesen werden. Der geänderte Wert ist dann außerhalb des Verfahrens sichtbar. Wenn die Prozedur erfolgreich beendet wird, ist der Wert des OUT- bzw. INOUT-Arguments dann der endgültige Wert, der dieser INOUT-Variable zugewiesen wird.

Temporäre Tabellen sind immer für die Dauer des Skripts vorhanden. Wenn eine Prozedur eine temporäre Tabelle erstellt, kann der Aufrufer der Prozedur auch auf die temporäre Tabelle verweisen.

Standardprojekt im Verfahrenstext

In den Verfahrenstexten können Entitäten ohne Angabe des Projekts referenziert werden. Das Standardprojekt ist das Projekt, zu dem das Verfahren gehört, und nicht unbedingt das Projekt, mit dem die Anweisung CREATE PROCEDURE ausgeführt wird. Betrachten Sie die folgende Beispielabfrage.

CREATE PROCEDURE myProject.myDataset.QueryTable()
BEGIN
  SELECT * FROM anotherDataset.myTable;
END;

Nachdem Sie das obige Verfahren erstellt haben, können Sie die Abfrage CALL myProject.myDataset.QueryTable() ausführen. Unabhängig davon, in welchem Projekt Sie diese CALL-Abfrage ausführen, wird die referenzierte Tabelle anotherDataset.myTable immer für das Projekt myProject aufgelöst.

Beispiele

Im folgenden Beispiel wird eine Prozedur erstellt, die x sowohl als Eingabeargument verwendet als auch x als Ausgabe zurückgibt. Da für das Argument delta kein Argumentmodus festgelegt ist, gilt es als Eingabeargument. Die Prozedur besteht aus einem Block mit einer einzigen Anweisung, durch die die Summe der beiden Eingabeargumente zu x zugewiesen wird.

CREATE PROCEDURE mydataset.AddDelta(INOUT x INT64, delta INT64)
BEGIN
  SET x = x + delta;
END;

Im folgenden Beispiel wird die AddDelta-Prozedur aus dem obigen Beispiel aufgerufen, wobei beide Male die Variable accumulator an sie übergeben wird. Da die Änderungen an x innerhalb von AddDelta außerhalb von AddDelta sichtbar sind, erhöhen diese Prozeduraufrufe accumulator um insgesamt 8.

DECLARE accumulator INT64 DEFAULT 0;
CALL mydataset.AddDelta(accumulator, 5);
CALL mydataset.AddDelta(accumulator, 3);
SELECT accumulator;

Es wird Folgendes zurückgegeben:

+-------------+
| accumulator |
+-------------+
|           8 |
+-------------+

Im folgenden Beispiel wird die Prozedur SelectFromTablesAndAppend erstellt, die target_date als Eingabeargument verwendet und rows_added als Ausgabe zurückgibt. Mit der Prozedur wird aus einer Abfrage eine temporäre Tabelle DataForTargetDate erstellt. Anschließend wird die Anzahl der Zeilen in DataForTargetDate berechnet und das Ergebnis rows_added zugewiesen. Als Nächstes wird eine neue Zeile in TargetTable eingefügt, wobei der Wert von target_date als einer der Spaltennamen übergeben wird. Zum Schluss wird die Tabelle DataForTargetDate gelöscht und rows_added zurückgegeben.

CREATE PROCEDURE mydataset.SelectFromTablesAndAppend(
  target_date DATE, OUT rows_added INT64)
BEGIN
  CREATE TEMP TABLE DataForTargetDate AS
  SELECT t1.id, t1.x, t2.y
  FROM dataset.partitioned_table1 AS t1
  JOIN dataset.partitioned_table2 AS t2
  ON t1.id = t2.id
  WHERE t1.date = target_date
    AND t2.date = target_date;

  SET rows_added = (SELECT COUNT(*) FROM DataForTargetDate);

  SELECT id, x, y, target_date  -- note that target_date is a parameter
  FROM DataForTargetDate;

  DROP TABLE DataForTargetDate;
END;

Im folgenden Beispiel wird eine Variable rows_added deklariert und zusammen mit dem Wert von CURRENT_DATE als Argument an die Prozedur SelectFromTablesAndAppend aus dem vorherigen Beispiel übergeben. Anschließend wird in einer Meldung angegeben, wie viele Zeilen hinzugefügt wurden.

DECLARE rows_added INT64;
CALL mydataset.SelectFromTablesAndAppend(CURRENT_DATE(), rows_added);
SELECT FORMAT('Added %d rows', rows_added);

CREATE ROW ACCESS POLICY-Anweisung

Verwenden Sie die folgenden Befehle in Ihrer DDL-Anweisung, um eine Zugriffsrichtlinie auf Zeilenebene zu erstellen oder zu ersetzen. Zugriffsrichtlinien auf Zeilenebene für eine Tabelle müssen eindeutige Namen haben.

Syntax

  {CREATE ROW ACCESS POLICY | CREATE ROW ACCESS POLICY IF NOT EXISTS |
  CREATE OR REPLACE ROW ACCESS POLICY}
  row_access_policy_name ON table_name
  [GRANT TO (grantee_list)]
  FILTER USING (filter_expression);

Dabei gilt:

  • row_access_policy_name: Der Name der Zugriffsrichtlinie auf Zeilenebene, die Sie erstellen. Der Name der Zugriffsrichtlinie auf Zeilenebene muss für jede Tabelle eindeutig sein. Der Name der Zugriffsrichtlinie auf Zeilenebene kann Folgendes enthalten:

    • Bis zu 256 Zeichen.
    • Buchstaben (groß- oder kleingeschrieben), Ziffern und Unterstriche. Muss mit einem Buchstaben beginnen.
  • table_name: Der Name der Tabelle, für die Sie eine Zugriffsrichtlinie auf Zeilenebene erstellen möchten. Die Tabelle muss bereits vorhanden sein.

  • grantee_list: GRANT TO ist eine optionale Klausel, die die ersten Mitglieder angibt, mit denen die Zugriffsrichtlinie auf Zeilenebene erstellt werden soll.

    grantee_list iam_member ist eine Liste von -Nutzern oder Gruppen. Strings müssen gültige IAM-Hauptkonten oder Mitglieder im Format eines IAM-Richtlinienbindungsmitglieds sein und in Anführungszeichen gesetzt werden. Die folgenden Typen werden unterstützt:

    grantee_list-Typen
    user:{emailid}

    Eine E-Mail-Adresse, die für ein bestimmtes Google-Konto steht.

    Beispiel: user:alice@example.com

    serviceAccount:{emailid}

    Eine E-Mail-Adresse, die für ein Dienstkonto steht.

    Beispiel: serviceAccount:my-other-app@appspot.gserviceaccount.com

    group:{emailid}

    Eine E-Mail-Adresse, die für eine Google-Gruppe steht.

    Beispiel: group:admins@example.com

    domain:{domain}

    Die Google Workspace-Domain (primäre Domain), die alle Nutzer dieser Domain repräsentiert.

    Beispiel: domain:example.com

    allAuthenticatedUsers Eine spezielle Kennung für alle Dienstkonten und alle Nutzer im Internet, die sich mit einem Google-Konto authentifiziert haben. Diese Kennzeichnung schließt auch Konten ein, die nicht mit einer Google Workspace- oder Cloud Identity-Domain verbunden sind, z. B. persönliche Gmail-Konten. Nicht authentifizierte Nutzer, wie anonyme Besucher, sind nicht eingeschlossen.
    allUsers Eine spezielle Kennung für alle Identitäten im Internet, einschließlich authentifizierter und nicht authentifizierter Nutzer. Da BigQuery eine Authentifizierung erfordert, bevor ein Nutzer auf den Dienst zugreifen kann, enthält allUsers nur authentifizierte Nutzer.

    Sie können eine Reihe von iam_member-Werten kombinieren, wenn sie durch Kommas getrennt und separat in Anführungszeichen gesetzt werden. Beispiel: "user:alice@example.com","group:admins@example.com","user:sales@example.com"

  • filter_expression: Definiert die Teilmenge der Tabellenzeilen, die nur den Mitgliedern von grantee_list angezeigt werden sollen. Die filter_expression entspricht der WHERE-Klausel in einer SELECT-Abfrage.

    Die folgenden Funktionen können im Filterausdruck verwendet werden:

    • Skalare Standard-SQL-Funktionen von BigQuery, Aggregatfunktionen, Analysefunktionen.
    • SESSION_USER(), um den Zugriff auf Zeilen zu beschränken, die zu dem Nutzer gehören, der die Abfrage ausführt. Wenn keine der Zugriffsrichtlinien auf Zeilenebene für den abfragenden Nutzer anwendbar ist, hat der Nutzer keinen Zugriff auf die Daten in der Tabelle.

    Der Filterausdruck darf nicht Folgendes enthalten:

    • Einen Verweis auf eine Tabelle
    • Unterabfragen – SQL-Anweisungen wie SELECT, CREATE oder UPDATE
    • Benutzerdefinierte Funktionen

Beispiele

Zeilenzugriffsrichtlinie erstellen und später die Empfänger ändern

   CREATE ROW ACCESS POLICY My_apac_filter
   ON project.dataset.My_table
   GRANT TO ("user:abc@example.com")
   FILTER USING (region = "apac");
   CREATE OR REPLACE ROW ACCESS POLICY My_apac_filter
   ON project.dataset.My_table
   GRANT TO ("user:xyz@example.com")
   FILTER USING (region = "apac");

Zeilenzugriffsrichtlinie mit mehreren Empfängern erstellen

   CREATE ROW ACCESS POLICY My_us_filter
   ON project.dataset.My_table
   GRANT TO ("user:john@example.com", "group:sales-us@example.com", "group:sales-managers@example.com")
   FILTER USING (region = "us");

Zeilenzugriffsrichtlinie für Zeilen mit allAuthenticatedUsers als Empfänger erstellen

   CREATE ROW ACCESS POLICY My_us_filter
   ON project.dataset.My_table
   GRANT TO ("allAuthenticatedUsers")
   FILTER USING (region = "us");

Zeilenzugriffsrichtlinie mit einem Filter basierend auf dem aktuellen Nutzer erstellen

   CREATE ROW ACCESS POLICY My_row_filter
   ON dataset.My_table
   GRANT TO ("domain:example.com")
   FILTER USING (email = SESSION_USER());

Zeilenzugriffsrichtlinie mit einem Filter für eine Spalte mit dem Typ ARRAY erstellen

   CREATE ROW ACCESS POLICY My_reports_filter
   ON project.dataset.My_table
   GRANT TO ("domain:example.com")
   FILTER USING (SESSION_USER() IN UNNEST(reporting_chain));

ALTER SCHEMA SET OPTIONS-Anweisung

Legt Optionen für ein Dataset fest.

Die Anweisung wird am Speicherort des Datasets ausgeführt, wenn das Dataset vorhanden ist, es sei denn, Sie geben den Ort in den Abfrageeinstellungen an. Weitere Informationen finden Sie unter Standort angeben.

ALTER SCHEMA [IF EXISTS]
[project_name.]dataset_name
SET OPTIONS(schema_set_options_list)

Dabei gilt:

  • IF EXISTS: Wenn Sie diese Klausel einbinden und das angegebene Dataset nicht vorhanden ist, ist die Anweisung ohne Aktion erfolgreich. Wenn Sie diese Klausel weglassen und das Dataset nicht vorhanden ist, gibt die Anweisung einen Fehler zurück.

  • project_name ist der Name des Projekts, das das Dataset enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Anweisung ausführt.

  • dataset_name ist der Name des Datasets.

  • schema_set_options_list gibt die Liste der festzulegenden Optionen an.

schema_set_options_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.
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.

Beispiel

Im folgenden Beispiel wird der Standardablaufwert für Tabellen festgelegt.

ALTER SCHEMA mydataset
SET OPTIONS(
  default_table_expiration_days=3.75
  )

ALTER TABLE SET OPTIONS-Anweisung

Mit der DDL-Anweisung ALTER TABLE SET OPTIONS können Sie die Optionen für eine Tabelle in BigQuery festlegen.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
SET OPTIONS(table_set_options_list)

Dabei gilt:

IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Tabelle nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Tabelle nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_name ist der Name der Tabelle, die geändert werden soll.

Diese Anweisung wird für externe Tabellen nicht unterstützt.

table_set_options_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 mit einer der folgenden Varianten kombiniert werden:

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, Suchparameter und Skalarfunktionen enthält. Wenn der konstante Ausdruck null ergibt, wird die entsprechende Option NAME ignoriert.

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

Mit der Einstellung VALUE wird der vorhandene Wert dieser Option für die Tabelle ersetzt, wenn diese vorhanden ist. Wenn Sie für VALUE den Wert NULL festlegen, wird der Wert der Tabelle für diese Option gelöscht.

Beispiele

Ablaufzeitstempel und Beschreibung für eine Tabelle festlegen

Im folgenden Beispiel wird der Ablaufzeitstempel für eine Tabelle auf sieben Tage nach dem Ausführungszeitpunkt der ALTER TABLE-Anweisung festgelegt. Außerdem wird eine Beschreibung angegeben:

ALTER TABLE mydataset.mytable
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="Table that expires seven days from now"
)

Erforderliches Partitionsfilterattribut für partitionierte Tabelle festlegen

Im folgenden Beispiel wird das Attribut timePartitioning.requirePartitionFilter für eine partitionierte Tabelle festgelegt.

ALTER TABLE mydataset.mypartitionedtable
SET OPTIONS (require_partition_filter=true)

Abfragen, die auf diese Tabelle verweisen, müssen einen Filter für die Partitionierungsspalte verwenden. Andernfalls gibt BigQuery einen Fehler zurück. Durch die Auswahl von true können Sie Fehler bei der Abfrage vermeiden, da nur die vorgesehenen Daten abgefragt werden.

Ablaufzeitstempel für eine Tabelle löschen

Im folgenden Beispiel wird der Ablaufzeitstempel für eine Tabelle gelöscht, sodass es nicht zu einem Ablauf kommt:

ALTER TABLE mydataset.mytable
SET OPTIONS (expiration_timestamp=NULL)

ALTER TABLE ADD COLUMN-Anweisung

Mit der ALTER TABLE ADD COLUMN-Anweisung werden einem vorhandenen Tabellenschema eine oder mehrere neue Spalten hinzugefügt. Weitere Informationen zu Schemaänderungen in BigQuery finden Sie unter Tabellenschemas ändern.

ALTER TABLE [[project_name.]dataset_name.]table_name
ADD COLUMN [IF NOT EXISTS] column_name column_schema [, ...]

Dabei gilt:

  • project_name ist der Name des Projekts, das die Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt.

  • dataset_name ist der Name des Datasets, das die Tabelle enthält.

  • table_name ist der Name der Tabelle, die geändert werden soll. Die Tabelle muss bereits vorhanden sein und ein Schema haben.

  • column_name ist der Name der Spalte, die hinzugefügt werden soll.

  • column_schema ist das Schema der Spalte. Dieses Schema verwendet dieselbe Syntax wie das Spaltenschema für die CREATE TABLE-Anweisung.

Mit dieser Anweisung können Sie Folgendes nicht erstellen:

  • Partitionierte Spalten
  • Geclusterte Spalten
  • Verschachtelte Spalten in vorhandenen RECORD-Feldern

Sie können einem vorhandenen Tabellenschema keine REQUIRED-Spalte hinzufügen. Sie können jedoch eine verschachtelte Spalte vom Typ REQUIRED als Teil des neuen RECORD-Felds erstellen.

Diese Anweisung wird für externe Tabellen nicht unterstützt.

Ohne die IF NOT EXISTS-Klausel gibt die Anweisung einen Fehler zurück, wenn die Tabelle bereits eine Spalte mit diesem Namen enthält. Wenn die IF NOT EXISTS-Klausel enthalten und der Spaltenname bereits vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

Der Wert der neuen Spalte für vorhandene Zeilen wird auf einen der folgenden Werte gesetzt:

  • NULL, wenn die neue Spalte mit dem Modus NULLABLE hinzugefügt wurde. Dies ist der Standardmodus.
  • Eine leeres ARRAY, wenn die neue Spalte mit dem Modus REPEATED hinzugefügt wurde.

Beispiele

Spalten hinzufügen

Im nachfolgenden Beispiel werden die folgenden Spalten einer vorhandenen Tabelle mit dem Namen mytable hinzugefügt:

  • Spalte A vom Typ STRING
  • Spalte B vom Typ GEOGRAPHY
  • Spalte C vom Typ NUMERIC mit dem Modus REPEATED
  • Spalte D vom Typ DATE mit einer Beschreibung
ALTER TABLE mydataset.mytable
  ADD COLUMN A STRING,
  ADD COLUMN IF NOT EXISTS B GEOGRAPHY,
  ADD COLUMN C ARRAY<NUMERIC>,
  ADD COLUMN D DATE OPTIONS(description="my description")

Wenn eine der Spalten A, C oder D bereits vorhanden ist, schlägt die Anweisung fehl. Wenn die Spalte B bereits vorhanden ist, wird die Anweisung aufgrund der IF NOT EXISTS-Klausel erfolgreich ausgeführt.

Spalte RECORD hinzufügen

Im folgenden Beispiel wird eine Spalte namens A vom Typ STRUCT hinzugefügt, die die folgenden verschachtelten Spalten enthält:

  • Spalte B vom Typ GEOGRAPHY
  • Spalte C vom Typ INT64 mit dem Modus REPEATED
  • Spalte D vom Typ INT64 mit dem Modus REQUIRED
  • Spalte E vom Typ TIMESTAMP mit einer Beschreibung
ALTER TABLE mydataset.mytable
   ADD COLUMN A STRUCT<
       B GEOGRAPHY,
       C ARRAY<INT64>,
       D INT64 NOT NULL,
       E TIMESTAMP OPTIONS(description="creation time")
       >

Die Abfrage schlägt fehl, wenn die Tabelle bereits eine Spalte namens A enthält, auch wenn diese Spalte keine der angegebenen verschachtelten Spalten enthält.

Für die neue STRUCT-Spalte mit dem Namen A sind Nullwerte zulässig. Die verschachtelte Spalte D innerhalb von A ist jedoch für alle STRUCT-Werte von A erforderlich.

ALTER TABLE RENAME TO-Anweisung

Mit der DDL-Anweisung ALTER TABLE RENAME TO können Sie eine Tabelle in BigQuery löschen.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
RENAME TO new_table_name

Dabei gilt:

  • project_name ist der Name des Projekts, das die Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt.
  • dataset_name ist der Name des Datasets, das die Tabelle enthält.
  • table_name ist der Name der Tabelle, die umbenannt werden soll.
  • new_table_name ist der neue Name der Tabelle. Der neue Name darf kein vorhandener Tabellenname sein.

Wenn IF EXISTS vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Tabelle nicht vorhanden ist. Wenn IF EXISTS nicht vorhanden ist, schlägt die Abfrage fehl, wenn die angegebene Tabelle nicht vorhanden ist.

Vorsichtsmaßnahmen:

  • Diese Anweisung wird für externe Tabellen nicht unterstützt.
  • Wenn Sie beim Umbenennen der Tabelle Tabellenrichtlinien oder Zugriffsrichtlinien auf Zeilenebene ändern, sind diese Änderungen möglicherweise nicht wirksam.
  • Wenn Sie eine Tabelle umbenennen möchten, die Daten-Streaming enthält, müssen Sie das Streaming beenden und warten, bis BigQuery anzeigt, dass das Streaming nicht verwendet wird.

Beispiele

Tabelle umbenennen

Im folgenden Beispiel wird die Tabelle mydataset.mytable in mydataset.mynewtable umbenannt:

ALTER TABLE mydataset.mytable RENAME TO mynewtable

ALTER TABLE DROP COLUMN-Anweisung

Mit der Anweisung ALTER TABLE DROP COLUMN wird eine oder mehrere Spalten aus einem vorhandenen Tabellenschema gelöscht. Durch die Anweisung wird der Speicher, der der verworfenen Spalte zugeordnet ist, nicht sofort freigegeben. Die Speicherung wird im Hintergrund über den Zeitraum von sieben Tagen ab dem Tag in Anspruch genommen, an dem eine Spalte gelöscht wird.

Weitere Informationen dazu, wie Sie den Speicher sofort zurückerhalten, finden Sie unter Spalte aus einem Tabellenschema löschen.

Weitere Informationen zu Schemaänderungen in BigQuery finden Sie unter Tabellenschemas ändern.

ALTER TABLE [[project_name.]dataset_name.]table_name
DROP COLUMN [IF EXISTS] column_name [, ...]

Dabei gilt:

  • project_name ist der Name des Projekts, das die Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt.

  • dataset_name ist der Name des Datasets, das die Tabelle enthält.

  • table_name ist der Name der Tabelle, die geändert werden soll. Die Tabelle muss bereits vorhanden sein und ein Schema haben.

  • column_name ist der Name der zu löschenden Spalte.

Mit dieser Anweisung können Sie Folgendes nicht entfernen:

  • Partitionierte Spalten
  • Geclusterte Spalten
  • Verschachtelte Spalten in vorhandenen RECORD-Feldern

Diese Anweisung wird für externe Tabellen nicht unterstützt.

Ohne die IF EXISTS-Klausel gibt die Anweisung einen Fehler zurück, wenn die Tabelle keine Spalte mit diesem Namen enthält. Wenn die IF EXISTS-Klausel enthalten ist und der Spaltenname nicht vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

Mit dieser Anweisung wird die Spalte nur aus der Tabelle entfernt. Alle Objekte, die auf die Spalte verweisen, wie Ansichten oder materialisierte Ansichten, müssen separat aktualisiert oder neu erstellt werden.

Beispiele

Spalten entfernen

Im folgenden Beispiel werden die folgenden Spalten aus einer vorhandenen Tabelle mit dem Namen mytable gelöscht:

  • Spalte A
  • Spalte B
ALTER TABLE mydataset.mytable
  DROP COLUMN A,
  DROP COLUMN IF EXISTS B

Wenn die Spalte A nicht vorhanden ist, schlägt die Anweisung fehl. Ist die Spalte B nicht vorhanden, ist die Anweisung dennoch aufgrund der Klausel IF EXISTS erfolgreich.

ALTER COLUMN SET OPTIONS-Anweisung

Legt Optionen wie die Spaltenbeschreibung für eine Spalte in einer Tabelle in BigQuery fest.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
ALTER COLUMN [IF EXISTS] column_name SET OPTIONS(column_set_options_list)

Dabei gilt:

(ALTER TABLE) IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Tabelle nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Tabelle nicht vorhanden ist.

(ALTER COLUMN) IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Spalte nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Spalte nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, setzen Sie ihn in Backticks ` (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_name ist der Name der Tabelle, die geändert werden soll.

column_name ist der Name der Top-Level-Spalte, die Sie ändern. Das Ändern von Unterfeldern wie verschachtelten Spalten in einem STRUCT wird nicht unterstützt.

Diese Anweisung wird für externe Tabellen nicht unterstützt.

column_set_options_list

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

NAME=VALUE, ...

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

NAME VALUE Details
description

STRING

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

VALUE ist ein konstanter Ausdruck, der nur Literale, Abfrageparameter und Skalarfunktionen enthält. Wenn der konstante Ausdruck null ergibt, wird die entsprechende Option NAME entfernt.

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

Mit der Einstellung VALUE wird der vorhandene Wert dieser Option für die Spalte ersetzt, wenn diese vorhanden ist. Wenn Sie für VALUE den Wert NULL festlegen, wird der Wert der Spalte für diese Option gelöscht.

Beispiele

Im folgenden Beispiel wird eine neue Beschreibung für eine Spalte namens price festgelegt:

ALTER TABLE mydataset.mytable
ALTER COLUMN price
SET OPTIONS (
  description="Price per unit"
)

ALTER COLUMN DROP NOT NULL-Anweisung

Entfernt die Einschränkung NOT NULL aus einer Spalte in einer Tabelle in BigQuery.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
ALTER COLUMN [IF EXISTS] column DROP NOT NULL

Dabei gilt:

(ALTER TABLE) IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Tabelle nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Tabelle nicht vorhanden ist.

(ALTER COLUMN) IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Spalte nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Spalte nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_name ist der Name der Tabelle, die geändert werden soll.

column_name ist der Name der Top-Level-Spalte, die Sie ändern. Das Ändern von Unterfeldern wird nicht unterstützt.

Wenn eine Spalte keine Einschränkung vom Typ NOT NULL hat, gibt die Abfrage einen Fehler zurück.

Diese Anweisung wird für externe Tabellen nicht unterstützt.

Beispiele

Im folgenden Beispiel wird die Einschränkung NOT NULL aus einer Spalte namens mycolumn entfernt:

ALTER TABLE mydataset.mytable
ALTER COLUMN mycolumn
DROP NOT NULL

ALTER COLUMN SET DATA TYPE-Anweisung

Ändert den Datentyp einer Spalte in einer Tabelle in BigQuery in einen weniger restriktiven Datentyp. Ein NUMERIC-Datentyp kann beispielsweise in den BIGNUMERIC-Typ geändert werden, nicht jedoch in umgekehrter Richtung. Vergleichen Sie für eine Tabelle mit gültigen Datentyperzwingungen auf der Seite Konvertierungsregeln in Standard-SQL die Spalte "Von Typ" mit der Spalte "Erzwingen in".

Beispiele für gültige Datentyperzwingungen:

  • INT64 in NUMERIC, BIGNUMERIC, FLOAT64
  • NUMERIC in BIGNUMERIC, FLOAT64
ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
ALTER COLUMN [IF EXISTS] column_name SET DATA TYPE data_type

Dabei gilt:

  • project_name ist der Name des Projekts, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

  • dataset_name ist der Name des Datasets, das die zu ändernde Tabelle enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

  • table_name ist der Name der Tabelle, die geändert werden soll.

  • column_name ist der Name der Top-Level-Spalte, die Sie ändern. Das Ändern von Unterfeldern wird nicht unterstützt.

  • data_type ist der Typ, in den Sie die Spalte konvertieren.

Diese Anweisung wird für externe Tabellen nicht unterstützt.

Ohne die IF EXISTS-Klausel gibt die Anweisung einen Fehler zurück, wenn die Tabelle keine Spalte mit diesem Namen enthält. Wenn die IF EXISTS-Klausel enthalten und der Spaltenname nicht vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

Sie können Datentypen auch von restriktiveren in weniger restriktive parametrisierte Datentypen umwandeln. Sie können beispielsweise die maximale Länge eines Stringtyps erhöhen oder die Genauigkeit oder Skalierung eines numerischen Typs erhöhen.

Beispiele für gültige Änderungen parametrisierter Datentypen:

  • NUMERIC(6,10) zu NUMERIC(8,12)
  • NUMERIC zu BIGNUMERIC(40, 20)
  • STRING(5) zu STRING(7)

Beispiele

Im folgenden Beispiel wird der Datentyp der Spalte c1 von INT64 in NUMERIC geändert:

CREATE TABLE dataset.table(c1 INT64);

ALTER TABLE dataset.table ALTER COLUMN c1 SET DATA TYPE NUMERIC;

Im folgenden Beispiel wird der Datentyp eines der Felder in der Spalte s1 geändert:

CREATE TABLE dataset.table(s1 STRUCT<a INT64, b STRING>);

ALTER TABLE dataset.table ALTER COLUMN s1
SET DATA TYPE STRUCT<a NUMERIC, b STRING>;

Im folgenden Beispiel wird die Genauigkeit einer parametrisierten Datentypspalte geändert:

CREATE TABLE dataset.table (pt NUMERIC(7,2));

ALTER TABLE dataset.table
ALTER COLUMN pt
SET DATA TYPE NUMERIC(8,2);

ALTER VIEW SET OPTIONS-Anweisung

Mit der DDL-Anweisung ALTER VIEW SET OPTIONS können Sie die Optionen für eine Ansicht in BigQuery festlegen.

ALTER VIEW [IF EXISTS] [[project_name.]dataset_name.]view_name
SET OPTIONS(view_set_options_list)

Dabei gilt:

IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Ansicht nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Ansicht nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu ändernde Ansicht enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu ändernde Ansicht enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

view_name ist der Name der Ansicht, die geändert werden soll.

view_set_options_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 mit einer der folgenden Varianten kombiniert werden:

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, Suchparameter und Skalarfunktionen enthält. Wenn der konstante Ausdruck null ergibt, wird die entsprechende Option NAME ignoriert.

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

Mit der Einstellung VALUE wird der vorhandene Wert dieser Option für die Ansicht ersetzt, wenn diese vorhanden ist. Wenn Sie für VALUE den Wert NULL festlegen, wird der Wert der Ansicht für diese Option gelöscht.

Beispiele

Ablaufzeitstempel und Beschreibung für eine Ansicht festlegen

Im folgenden Beispiel wird der Ablaufzeitstempel für eine Ansicht auf sieben Tage nach dem Ausführungszeitpunkt der ALTER VIEW-Anweisung festgelegt. Außerdem wird eine Beschreibung angegeben:

ALTER VIEW mydataset.myview
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="View that expires seven days from now"
)

ALTER MATERIALIZED VIEW SET OPTIONS-Anweisung

Mit der DDL-Anweisung ALTER MATERIALIZED VIEW SET OPTIONS können Sie die Optionen für eine materialisierte Ansicht in BigQuery festlegen.

ALTER MATERIALIZED VIEW [IF EXISTS] [[project_name.]dataset_name.]materialized_view_name
SET OPTIONS(materialized_view_set_options_list)

Dabei gilt:

IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Ansicht nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Ansicht nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu ändernde materialisierte Ansicht enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu ändernde materialisierte Ansicht enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

materialized_view_name ist der Name der materialisierten Ansicht, die geändert werden soll.

materialized_view_set_options_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 mit einer der folgenden Varianten kombiniert werden:

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.

Mit der Einstellung VALUE wird der vorhandene Wert dieser Option für die materialisierte Ansicht ersetzt, wenn diese vorhanden ist. Wenn Sie für VALUE den Wert NULL festlegen, wird der Wert der materialisierten Ansicht für diese Option gelöscht.

Beispiele

Den Aktualisierungsstatus und das Aktualisierungsintervall für eine materialisierte Ansicht festlegen

Im folgenden Beispiel wird die Aktualisierung aktiviert und das Aktualisierungsintervall für eine materialisierte Ansicht auf 20 Minuten festgelegt:

ALTER MATERIALIZED VIEW mydataset.my_mv
SET OPTIONS (
  enable_refresh=true,
  refresh_interval_minutes=20
)

DROP SCHEMA-Anweisung

Löscht ein Dataset.

Die Anweisung wird am Speicherort des Datasets ausgeführt, wenn es vorhanden ist, es sei denn, Sie geben den Ort in den Abfrageeinstellungen an. Weitere Informationen finden Sie unter Standort angeben.

DROP SCHEMA [IF EXISTS]
[project_name.]dataset_name
[ CASCADE | RESTRICT ]

Dabei gilt:

  • IF EXISTS: Wenn Sie diese Klausel einbinden und das angegebene Dataset nicht vorhanden ist, ist die Anweisung ohne Aktion erfolgreich. Wenn Sie diese Klausel weglassen und das Dataset nicht vorhanden ist, gibt die Anweisung einen Fehler zurück.

  • project_name ist der Name des Projekts, das das Dataset enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Anweisung ausführt.

  • dataset_name ist der Name des zu löschenden Datasets.

  • CASCADE: Löscht das Dataset und alle Ressourcen innerhalb des Datasets, z. B. Tabellen, Ansichten und Funktionen. Sie müssen die Berechtigung haben, die Ressourcen zu löschen. Andernfalls gibt die Anweisung einen Fehler zurück. Eine Liste der BigQuery-Berechtigungen finden Sie unter Vordefinierte Rollen und Berechtigungen.

  • RESTRICT: Löscht das Dataset nur, wenn es leer ist. Andernfalls wird ein Fehler zurückgegeben.

Wenn Sie weder CASCADE noch RESTRICT angeben, ist das Standardverhalten RESTRICT.

Beispiele

Im folgenden Beispiel wird das Dataset mit dem Namen mydataset gelöscht. Wenn das Dataset nicht vorhanden oder nicht leer ist, gibt die Anweisung einen Fehler zurück.

DROP SCHEMA mydataset

Im folgenden Beispiel werden das Dataset mit dem Namen mydataset und alle Ressourcen in diesem Dataset gelöscht. Wenn das Dataset nicht vorhanden ist, wird kein Fehler zurückgegeben.

DROP SCHEMA IF EXISTS mydataset CASCADE

DROP TABLE-Anweisung

Mit der DDL-Anweisung DROP TABLE können Sie eine Tabelle in BigQuery löschen.

DROP TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name

Dabei gilt:

IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Tabelle nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Tabelle nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu löschende Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu löschende Tabelle enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

table_name ist der Name der zu löschenden Tabelle.

Beispiele

Tabelle löschen

Im folgenden Beispiel wird eine Tabelle mit dem Namen mytable in mydataset gelöscht:

DROP TABLE mydataset.mytable

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

Error: Not found: Table myproject:mydataset.mytable

Tabelle nur dann löschen, wenn sie vorhanden ist

Im folgenden Beispiel wird eine Tabelle mit dem Namen mytable in mydataset nur dann gelöscht, wenn die Tabelle vorhanden ist. Wenn der Tabellenname im Dataset nicht vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

DROP TABLE IF EXISTS mydataset.mytable

DROP SNAPSHOT TABLE-Anweisung

Mit der DDL-Anweisung DROP SNAPSHOT TABLE können Sie einen Tabellen-Snapshot von BigQuery löschen.

DROP SNAPSHOT TABLE [IF EXISTS]
[[project_name.]dataset_name.]table_snapshot_name

Dabei gilt:

IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn der angegebene Tabellen-Snapshot nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn der angegebene Tabellen-Snapshot nicht vorhanden ist.

project_name ist der Name des Projekts, das den zu löschenden Tabellen-Snapshot enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, setzen Sie ihn in Backticks (`) (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das den zu löschenden Tabellen-Snapshot enthält. Die Standardeinstellung in der Anfrage ist defaultDataset.

table_snapshot_name: Der der Name der zu löschenden Tabelle.

Beispiele

Tabellen-Snapshot löschen: schlägt fehl, wenn er nicht vorhanden ist

Im folgenden Beispiel wird der Tabellen-Snapshot mit dem Namen mytablesnapshot im Dataset mydataset gelöscht:

DROP SNAPSHOT TABLE mydataset.mytablesnapshot

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

Error: Not found: Table snapshot myproject:mydataset.mytablesnapshot

Tabellen-Snapshot löschen: ignorieren, wenn er nicht vorhanden ist

Im folgenden Beispiel wird der Tabellen-Snapshot mytablesnapshot im Dataset mydataset gelöscht.

DROP SNAPSHOT TABLE IF EXISTS mydataset.mytablesnapshot

Wenn der Tabellen-Snapshot im Dataset nicht vorhanden ist, wird keine Aktion ausgeführt und kein Fehler zurückgegeben.

Informationen zum Erstellen von Tabellen-Snapshots finden Sie unter SNAPSHOT-TABELLE ERSTELLEN.

Informationen zum Wiederherstellen von Tabellen-Snapshots finden Sie unter TABELLEn-KLON ERSTELLEN.

DROP EXTERNAL TABLE-Anweisung

Mit der DROP EXTERNAL TABLE-Anweisung wird eine externe Tabelle gelöscht.

DROP EXTERNAL TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name

Dabei gilt:

  • project_name ist der Name des Projekts, das die Tabelle enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt.

  • dataset_name ist der Name des Datasets, das die Tabelle enthält.

  • table_name ist der Name der Tabelle, die gelöscht werden soll.

Ohne die IF EXISTS-Klausel gibt die Anweisung einen Fehler zurück, wenn die externe Tabelle nicht vorhanden ist. Wenn die IF EXISTS-Klausel enthalten und die Tabelle nicht vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

Wenn table_name vorhanden ist, aber keine externe Tabelle ist, gibt die Anweisung den folgenden Fehler zurück:

Cannot drop table_name which has type TYPE. An external table was expected.

Mit der DROP EXTERNAL-Anweisung wird nur die Definition der externen Tabelle aus BigQuery entfernt. Die am externen Speicherort hinterlegten Daten sind davon nicht betroffen.

Beispiele

Im folgenden Beispiel wird die externe Tabelle mit dem Namen external_table aus dem Dataset mydataset gelöscht. Wenn die externe Tabelle nicht vorhanden ist, wird ein Fehler zurückgegeben.

DROP EXTERNAL TABLE mydataset.external_table

Im folgenden Beispiel wird die externe Tabelle mit dem Namen external_table aus dem Dataset mydataset gelöscht. Wenn die externe Tabelle nicht vorhanden ist, wird kein Fehler zurückgegeben.

DROP EXTERNAL TABLE IF EXISTS mydataset.external_table

DROP VIEW-Anweisung

Mit der DDL-Anweisung DROP VIEW können Sie eine Ansicht in BigQuery löschen.

DROP VIEW [IF EXISTS] [[project_name.]dataset_name.]view_name

Dabei gilt:

IF EXISTS: Wenn dies vorhanden ist, ist die Abfrage erfolgreich, wenn die angegebene Ansicht nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Ansicht nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu löschende Ansicht enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu löschende Ansicht enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

view_name ist der Name der Ansicht, die gelöscht werden soll.

Beispiele

Ansicht löschen

Im folgenden Beispiel wird eine Ansicht namens myview in mydataset gelöscht:

DROP VIEW mydataset.myview

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

Error: Not found: Table myproject:mydataset.myview

Ansicht nur löschen, wenn die Ansicht vorhanden ist

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

DROP VIEW IF EXISTS mydataset.myview

DROP MATERIALIZED VIEW-Anweisung

Mit der DDL-Anweisung DROP MATERIALIZED VIEW können Sie eine materialisierte Ansicht in BigQuery löschen.

DROP MATERIALIZED VIEW [IF EXISTS] [[project_name.]dataset_name.]mv_name

Dabei gilt:

IF EXISTS: Wenn vorhanden, ist die Abfrage erfolgreich, wenn die angegebene materialisierte Ansicht nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene materialisierte Ansicht nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu löschende materialisierte Ansicht enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu löschende materialisierte Ansicht enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

mv_name ist der Name der materialisierten Ansicht, die gelöscht werden soll.

Beispiele

Eine materialisierte Ansicht löschen

Im folgenden Beispiel wird eine materialisierte Ansicht mit dem Namen my_mv in mydataset gelöscht:

DROP MATERIALIZED VIEW mydataset.my_mv

Wenn der Name der materialisierten Ansicht nicht im Dataset vorhanden ist, wird der folgende Fehler zurückgegeben:

Error: Not found: Table myproject:mydataset.my_mv

Wenn Sie eine materialisierte Ansicht in einem anderen Projekt löschen, müssen Sie das Projekt, das Dataset und die materialisierte Ansicht im folgenden Format angeben: `project_id.dataset.materialized_view` (einschließlich der Backticks, wenn project_id Sonderzeichen enthält); zum Beispiel `myproject.mydataset.my_mv`.

Eine materialisierte Ansicht nur löschen, wenn sie vorhanden ist

Im folgenden Beispiel wird eine materialisierte Ansicht mit dem Namen my_mv in mydataset nur dann gelöscht, wenn die materialisierte Ansicht vorhanden ist. Wenn der Name der materialisierten Ansicht im Dataset nicht vorhanden ist, wird kein Fehler zurückgegeben und keine Aktion ausgeführt.

DROP MATERIALIZED VIEW IF EXISTS mydataset.my_mv

Wenn Sie eine materialisierte Ansicht in einem anderen Projekt löschen, müssen Sie das Projekt, das Dataset und die materialisierte Ansicht im folgenden Format angeben: `project_id.dataset.materialized_view`, (einschließlich der Backticks, wenn project_id Sonderzeichen enthält); zum Beispiel `myproject.mydataset.my_mv`.

DROP FUNCTION-Anweisung

DROP FUNCTION [IF EXISTS] [[project_name.]dataset_name.]function_name

Dabei gilt:

IF EXISTS: Wenn vorhanden, ist die Abfrage erfolgreich, wenn die angegebene Funktion nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn die angegebene Funktion nicht vorhanden ist.

project_name ist der Name des Projekts, das die zu löschende Funktion enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das die zu löschende Funktion enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

function_name ist der Name der Funktion, die Sie löschen möchten.

Beispiele

Mit der folgenden Beispielanweisung wird die Funktion parseJsonAsStruct im Dataset mydataset gelöscht.

DROP FUNCTION mydataset.parseJsonAsStruct;

Mit der folgenden Beispielanweisung wird die Funktion parseJsonAsStruct im Dataset sample_dataset des Projekts other_project gelöscht.

DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;

DROP TABLE FUNCTION

Löscht eine Tabellenfunktion.

DROP TABLE FUNCTION [IF EXISTS] [[project_name.]dataset_name.]function_name

Dabei gilt:

  • IF EXISTS: Wenn keine Tabellenfunktion mit diesem Namen vorhanden ist, hat die Anweisung keine Auswirkungen.

  • project_name: Der Name des Projekts, das die zu löschende Tabellenfunktion enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt.

  • dataset_name: Der Name des Datasets, das die zu löschende Tabellenfunktion enthält.

  • function_name: Der der Name der zu löschenden Tabelle.

Beispiel

Im folgenden Beispiel wird eine Tabellenfunktion mit dem Namen my_table_function gelöscht:

DROP TABLE FUNCTION mydataset.my_table_function;

DROP PROCEDURE-Anweisung

DROP PROCEDURE [IF EXISTS] [[project_name.]dataset_name.]procedure_name

Dabei gilt:

IF EXISTS: Wenn vorhanden, ist die Abfrage erfolgreich, wenn das angegebene Verfahren nicht vorhanden ist. Wenn es fehlt, schlägt die Abfrage fehl, wenn das angegebene Verfahren nicht vorhanden ist.

project_name ist der Name des Projekts, das das zu löschende Verfahren enthält. Die Standardeinstellung ist das Projekt, das diese DDL-Abfrage ausführt. Wenn der Projektname Sonderzeichen wie Doppelpunkte enthält, sollte er in Backticks (`) gesetzt werden (Beispiel: `google.com:my_project`).

dataset_name ist der Name des Datasets, das das zu löschende Verfahren enthält. Die Standardeinstellung ist defaultDataset in der Anfrage.

procedure_name ist der Name des zu löschenden Verfahrens.

Beispiele

Mit der folgenden Beispielanweisung wird die Prozedur myprocedure im Dataset mydataset gelöscht.

DROP PROCEDURE mydataset.myProcedure;

Mit der folgenden Beispielanweisung wird die Prozedur myProcedure im Dataset sample_dataset des Projekts other_project gelöscht.

DROP PROCEDURE `other-project`.sample_dataset.myprocedure;

DROP ROW ACCESS POLICY-Anweisung

Verwenden Sie für das Löschen einer Zugriffsrichtlinie auf Zeilenebene die folgenden Befehle in Ihrer DDL-Anweisung.

Syntax

{DROP ROW ACCESS POLICY | DROP ROW ACCESS POLICY IF EXISTS}
row_access_policy_name ON table_name;
DROP ALL ROW ACCESS POLICIES ON table_name;

Dabei gilt:

  • row_access_policy_name: Der Name der Zugriffsrichtlinie auf Zeilenebene, die Sie löschen. Jede Zugriffsrichtlinie auf Zeilenebene für eine Tabelle hat einen eindeutigen Namen.

  • Der Name der Tabelle mit der Zugriffsrichtlinie auf Zeilenebenetable_nameoder Richtlinien, die Sie löschen möchten.

Beispiele

Zugriffsrichtlinie auf Zeilenebene aus einer Tabelle löschen

   DROP ROW ACCESS POLICY My_row_filter ON project.dataset.My_table;

Alle Zugriffsrichtlinien auf Zeilenebene aus einer Tabelle löschen

   DROP ALL ROW ACCESS POLICIES ON project.dataset.My_table;