Accedere ai dati storici
BigQuery consente di utilizzare un viaggio nel tempo per accedere ai dati archiviati in BigQuery che sono stati modificati o eliminati.
Esegui query sui dati in un determinato momento
Puoi eseguire query sui dati storici di una tabella da qualsiasi momento all'interno della finestra di spostamento cronologico utilizzando una clausola FOR SYSTEM_TIME AS OF
. Questa clausola prende un'espressione di timestamp costante e fa riferimento alla versione della tabella corrente a quel timestamp. La tabella deve essere archiviata in BigQuery e non può essere esterna. Non sono previsti limiti alle dimensioni della tabella quando utilizzi SYSTEM_TIME AS OF
.
Ad esempio, la seguente query restituisce una versione storica della tabella relativa a un'ora fa:
SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
Se il timestamp specifica un intervallo di tempo precedente alla finestra di spostamento cronologico o prima della creazione della tabella, la query non riesce e restituisce un errore come seguente:
Invalid snapshot time 1601168925462 for table myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.
Dopo aver sostituito una tabella esistente utilizzando l'istruzione CREATE OR REPLACE TABLE
, puoi utilizzare FOR SYSTEM_TIME AS OF
per eseguire una query sulla versione precedente della tabella.
Se la tabella è stata eliminata, la query non riesce e restituisce un errore come il seguente:
Not found: Table myproject:mydataset.table was not found in location US
Tuttavia, puoi ripristinare la tabella copiandola da un momento specifico in una nuova tabella, come descritto in questo documento.
Ripristinare una tabella da un momento specifico
Puoi ripristinare una tabella dai dati storici copiandoli in una tabella. La copia di un dato funziona anche se la tabella è stata eliminata o è scaduta, a condizione che venga ripristinata entro il periodo di tempo della finestra di spostamento.
Per copiare i dati storici da una tabella, aggiungi un decorator al nome della tabella utilizzando la seguente sintassi:
tableid@TIME
, doveTIME
è il numero di millisecondi dall'epoca di Unix.tableid@-TIME_OFFSET
, doveTIME_OFFSET
è lo scarto relativo dall'ora attuale, in millisecondi.tableid@0
: specifica i dati storici disponibili meno recenti.
Ad esempio, il seguente comando dello strumento a riga di comando bq copia una tabella denominata table1
un'ora fa in una tabella denominata table1_restored
. L'ora, -3600000
, è
specificata in millisecondi utilizzando un offset relativo.
bq cp mydataset.table1@-3600000 mydataset.table1_restored
Il seguente comando dello strumento a riga di comando bq copia una tabella denominata table1
in una tabella denominata table1_restored
. Il tempo, 1624046611000
, è
specificato in millisecondi dall'epoca di Unix.
bq cp mydataset.table1@1624046611000 mydataset.table1_restored
Per maggiori informazioni, consulta Ripristinare le tabelle eliminate.
Passaggi successivi
- Scopri di più sugli snapshot delle tabelle.