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
, wobeiTIME
die Anzahl von Millisekunden seit der Unix-Epoche ist.tableid@-TIME_OFFSET
, wobeiTIME_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
- Weitere Informationen zu Tabellen-Snapshots.