Auf Verlaufsdaten zugreifen

In BigQuery können Sie mithilfe von Zeitreisen auf in BigQuery gespeicherte Daten zugreifen, die geändert oder gelöscht wurden.

Daten zu einem bestimmten Zeitpunkt abfragen

Sie können die Verlaufsdaten einer Tabelle zu einem beliebigen Zeitpunkt innerhalb des Zeitreisefensters mit einer FOR SYSTEM_TIME AS OF-Klausel abfragen. Diese Klausel verwendet einen konstanten Zeitstempelausdruck und verweist auf die Version der Tabelle, die zu diesem Zeitstempel aktuell war. Die Tabelle muss in BigQuery gespeichert sein. Es darf keine externe Tabelle sein. Bei der Verwendung von SYSTEM_TIME AS OF ist die Tabellengröße nicht begrenzt.

Die folgende Abfrage gibt beispielsweise eine frühere Version der Tabelle von vor einer Stunde zurück:

SELECT *
FROM `mydataset.mytable`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

Wenn im Zeitstempel eine Zeit vor dem Zeitreisefensters oder vor dem Erstellen der Tabelle angegeben ist, schlägt die Abfrage fehl und gibt einen Fehler wie den folgenden zurück:

Invalid snapshot time 1601168925462 for table
myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.

Nachdem Sie eine vorhandene Tabelle mithilfe der Anweisung CREATE OR REPLACE TABLE ersetzt haben, können Sie die vorherige Version der Tabelle mit FOR SYSTEM_TIME AS OF abfragen.

Wenn die Tabelle gelöscht wurde, schlägt die Abfrage fehl und gibt einen Fehler wie den folgenden zurück:

Not found: Table myproject:mydataset.table was not found in location LOCATION

Dabei ist LOCATION der Standort des Datasets.

Sie können jedoch die Tabelle wiederherstellen, indem Sie sie wie in diesem Dokument beschrieben von einem bestimmten Zeitpunkt in eine neue Tabelle kopieren.

Tabelle auf dem Stand eines bestimmten Zeitpunkts wiederherstellen

Sie können eine Tabelle aus Verlaufsdaten wiederherstellen, indem Sie die Verlaufsdaten in eine Tabelle kopieren. Das Kopieren von Daten funktioniert auch dann, wenn die Tabelle gelöscht wurde oder abgelaufen ist, sofern Sie die Tabelle innerhalb des Zeitreisefensters wiederherstellen.

Wenn Sie Verlaufsdaten aus einer Tabelle kopieren möchten, fügen Sie dem Tabellennamen mithilfe der folgenden Syntax einen Decorator hinzu:

  • tableid@TIME, wobei TIME die Anzahl von Millisekunden seit der Unix-Epoche ist.
  • tableid@-TIME_OFFSET, wobei TIME_OFFSET das relative Offset von der aktuellen Zeit in Millisekunden ist.
  • tableid@0: gibt die ältesten verfügbaren Verlaufsdaten an.

Mit dem folgenden Befehl des bq-Befehlszeilentools wird beispielsweise eine Tabelle mit dem Namen table1 von vor einer Stunde in eine Tabelle mit dem Namen table1_restored kopiert. Die Zeit -3600000 wird in Millisekunden mit einem relativen Offset angegeben.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

Mit dem folgenden Befehl des bq-Befehlszeilentools wird eine Tabelle mit dem Namen table1 in eine Tabelle mit dem Namen table1_restored kopiert. Die Zeit 1624046611000 wird als Millisekunden seit der Unix-Epoche angegeben.

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

Weitere Informationen finden Sie unter Gelöschte Tabellen wiederherstellen.

Nächste Schritte