Datenbearbeitungssprache

Die BigQuery-Datenbearbeitungssprache (DML) ermöglicht das Aktualisieren, Einfügen und Löschen von Daten in BigQuery-Tabellen.

Sie können DML-Anweisungen genau wie eine SELECT-Anweisung ausführen. Allerdings müssen folgende Bedingungen erfüllt sein:

  • Sie müssen Standard-SQL verwenden. Wie Sie Standard-SQL aktivieren, erfahren Sie unter SQL-Dialekte wechseln.
  • Sie können keine Zieltabelle angeben. Beispiel: In der Cloud Console muss Zieltabelle auf Keine Tabelle ausgewählt festgelegt sein.

    Cloud Console ohne ausgewählte Zieltabelle.

Beschränkungen

  • Jede DML-Anweisung initiiert eine implizite Transaktion, was bedeutet, dass von der Anweisung vorgenommene Änderungen automatisch am Ende jeder erfolgreichen DML-Anweisung per Commit übernommen werden. Transaktionen mit mehreren Anweisungen werden nicht unterstützt.

  • Zeilen, die kürzlich mithilfe von Streaming (Methode tabledata.insertall) in eine Tabelle geschrieben wurden, können nicht mit den Anweisungen UPDATE, DELETE und MERGE geändert werden. Bei kürzlichen Schreibvorgängen handelt es sich normalerweise um solche, die innerhalb der letzten 30 Minuten ausgeführt wurden. Alle anderen Zeilen in der Tabelle sind weiterhin durch die Anweisungen UPDATE, DELETE oder MERGE veränderbar.

  • Korrelierte Unterabfragen innerhalb von when_clause, search_condition, merge_update_clause oder merge_insert_clause werden für MERGE-Anweisungen nicht unterstützt.

  • Abfragen, die DML-Anweisungen enthalten, können keine Platzhaltertabelle als Ziel der Abfrage verwenden. Eine Platzhaltertabelle kann beispielsweise in der FROM-Klausel einer UPDATE-Abfrage verwendet werden, aber nicht als Ziel des UPDATE-Vorgangs.

  • Für DML-Anweisungen gelten die Ratenbegrenzungen für Aktualisierungsvorgänge von Tabellenmetadaten. Weitere Informationen finden Sie unter Anweisungen der Datenbearbeitungssprache im Dokument Kontingente und Limits.

Gleichzeitige Jobs

BigQuery verwaltet die Gleichzeitigkeit von DML-Anweisungen, mit denen Zeilen in einer Tabelle hinzugefügt, geändert oder gelöscht werden.

Gleichzeitigkeit von INSERT-DML-Anweisungen

Während eines Zeitraums von 24 Stunden werden die ersten 1.000 INSERT-Anweisungen in einer Tabelle gleichzeitig ausgeführt. Nachdem dieses Limit erreicht wurde, ist die Gleichzeitigkeit von INSERT-Anweisungen zum Schreiben in eine Tabelle auf 10 beschränkt. Alle INSERT-DML-Jobs über 10 werden im Status "Ausstehend" in die Warteschlange gestellt. Nach Abschluss eines vorherigen Jobs wird der nächste ausstehende Job aus der Warteschlange entfernt und ausgeführt. Derzeit können bis zu 100 INSERT-DML-Anweisungen gleichzeitig für eine Tabelle in die Warteschlange gestellt werden.

Gleichzeitigkeit von UPDATE-, DELETE- und MERGE-DML-Anweisungen

UPDATE-, DELETE- und MERGE-DML-Anweisungen werden als mutierende DML-Anweisungen bezeichnet. Wenn Sie eine oder mehrere mutierende DML-Anweisungen für eine Tabelle senden, während noch andere mutierende DML-Jobs für diese ausgeführt werden (oder ausstehend sind), führt BigQuery sie gleichzeitig aus, bis eine festgelegte Anzahl von gleichzeitig ausgeführten mutierenden DML-Anweisungen erreicht ist. Wenn Sie die Beschränkung der Gleichzeitigkeit erreicht haben, stellt BigQuery automatisch alle weiteren mutierenden DML-Jobs mit dem Status „Ausstehend“ in die Warteschlange. Wenn ein zuvor ausgeführter Job abgeschlossen ist, wird der nächste ausstehende Job aus der Warteschlange entfernt und ausgeführt.

DML-Jobs mit der Priorität INTERACTIVE, die sich länger als sechs Stunden in der Warteschlange befinden, schlagen fehl.

Konflikte mit DML-Anweisungen

Gleichzeitige Ausführung mutierender DML-Anweisungen in einer Tabelle kann aufgrund von Konflikten in den vorgenommenen Änderungen fehlschlagen. BigQuery wiederholt diese Fehler.

  • Eine INSERT-DML-Anweisung, die Zeilen in eine Tabelle einfügt, steht nicht im Konflikt mit einer anderen gleichzeitig ausgeführten DML-Anweisung.

  • MERGE-DML-Anweisungen, die nur eine INSERT-Klausel ohne UPDATE- oder DELETE-Klauseln enthalten, stehen nicht im Konflikt mit anderen gleichzeitig ausgeführten DML-Anweisungen.

  • MERGE-DML-Anweisungen mit UPDATE- oder DELETE- Klauseln stehen nicht in Konflikt mit anderen gleichzeitig ausgeführten DML-Anweisungen, solange die MERGE-Anweisung nicht zum Aktualisieren oder Löschen vorhandener Zeilen führt.

Preise

Informationen zu DML-Preisen finden Sie unter Preise für Data Manipulation Language auf der Seite „Preise“.

Best Practices

Für optimale Leistung empfehlen wir die folgenden Muster:

  • Vermeiden Sie es, zu viele einzelne Zeilenaktualisierungen oder -einfügungen zu senden. Gruppieren Sie stattdessen DML-Vorgänge wo möglich. Weitere Informationen finden Sie unter DML-Anweisungen, die einzelne Zeilen aktualisieren oder einfügen.

  • Wenn Aktualisierungen oder Löschvorgänge im Allgemeinen für ältere Daten oder innerhalb eines bestimmten Zeitraums durchgeführt werden, empfiehlt sich eine Partitionierung Ihrer Tabellen. Durch die Partitionierung wird dafür gesorgt, dass die Änderungen auf bestimmte Partitionen innerhalb der Tabelle beschränkt sind.

  • Partitionieren Sie Tabellen nicht, wenn die Datenmenge in jeder Partition klein ist und jede Aktualisierung einen großen Teil der Partitionen ändert.

  • Wenn Sie häufig Zeilen aktualisieren, in denen eine oder mehrere Spalten in einen engen Wertebereich fallen, können Sie geclusterte Tabellen verwenden. Clustering sorgt dafür, dass Änderungen auf bestimmte Gruppen von Blöcken beschränkt sind, und reduziert die zu lesende und schreibende Datenmenge. Das folgende Beispiel zeigt eine UPDATE-Anweisung, die nach einem Bereich von Spaltenwerten filtert:

    UPDATE s = "some string" WHERE id BETWEEN 54 AND 75
    

    Hier ist ein ähnliches Beispiel, das nach einer kleinen Liste von Spaltenwerten filtert:

    UPDATE s = "some string" WHERE id IN (54, 57, 60)
    

    In diesen Fällen sollten Sie das Clustering auf der Spalte id vornehmen.

  • Wenn Sie OLTP-Funktionen benötigen, können Sie föderierte Cloud SQL-Abfragen verwenden, mit denen BigQuery Daten abfragen kann, die in Cloud SQL gespeichert sind.

Weitere Informationen

  • Die DML-Syntax und Beispiele finden Sie auf der Seite DML-Syntax.