Accedere ai dati storici
BigQuery ti consente di eseguire query e ripristinare i dati archiviati in BigQuery che sono stati modificati o eliminati all'interno della finestra di viaggio nel tempo.
Eseguire query sui dati in un determinato momento
Puoi eseguire query sui dati storici di una tabella da qualsiasi punto nel tempo all'interno della finestra di spostamento nel tempo utilizzando una clausola FOR SYSTEM_TIME AS OF
. Questa clausola prende un'espressione di timestamp costante e fa riferimento alla versione della tabella corrente in quel timestamp. La tabella deve essere memorizzata in BigQuery e non può essere una tabella esterna. Non esiste un
limite alle dimensioni delle tabelle quando si utilizza SYSTEM_TIME AS OF
.
Ad esempio, la seguente query restituisce una versione storica della tabella di un'ora fa:
SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
Se il timestamp specifica un'ora precedente all'intervallo di tempo di viaggio nel tempo o prima della creazione della tabella, la query non va a buon fine e restituisce un errore come il 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 query sulla versione precedente della tabella.
Se la tabella è stata eliminata, la query non va a buon fine e restituisce un errore come il seguente:
Not found: Table myproject:mydataset.table was not found in location LOCATION
Ripristinare una tabella da un punto in tempo
Puoi ripristinare una tabella dai dati storici copiandoli in una tabella. La copia dei dati storici funziona anche se la tabella è stata eliminata o è scaduta, a condizione che la ripristini entro la durata della finestra di viaggio nel tempo.
Per copiare i dati storici da una tabella, aggiungi un decoratore al nome della tabella utilizzando una delle seguenti sintassi:
tableid@TIME
doveTIME
è il numero di millisecondi dall'epoca Unix.tableid@-TIME_OFFSET
doveTIME_OFFSET
è l'offset relativo rispetto al tempo corrente, in millisecondi.tableid@0
: specifica i dati storici più vecchi disponibili.
Ad esempio, il seguente comando dello strumento a riga di comando bq copia una tabella denominata table1
di un'ora fa in una tabella denominata table1_restored
. Il tempo, -3600000
, è specificato in millisecondi utilizzando un offset relativo.
bq cp mydataset.table1@-3600000 mydataset.table1_restored
Esegui il seguente comando per ottenere l'ora di epocha Unix equivalente per un'ora specificata:
date -d '2023-08-04 16:00:34.456789Z' +%s000
Il seguente comando dello strumento a riga di comando bq copia una tabella denominata table1
in una tabella
denominata table1_restored
. Sostituisci il timestamp epoch UNIX 1691164834000
ricevuto dal comando precedente.
bq cp mydataset.table1@1691164834000 mydataset.table1_restored
Per ulteriori informazioni, consulta la sezione Ripristinare le tabelle eliminate.
Passaggi successivi
- Scopri di più sugli snapshot delle tabelle.
- Scopri di più sulla conservazione dei dati con il viaggio nel tempo e il fail-safe.
- Scopri di più sulla gestione delle tabelle.