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 time travel.

Eseguire query sui dati in un determinato momento

Puoi eseguire query sui dati storici di una tabella da qualsiasi momento all'interno della finestra di Time Travel utilizzando una clausola FOR SYSTEM_TIME AS OF. Questa clausola accetta un'espressione timestamp costante e fa riferimento alla versione della tabella corrente in quel timestamp. La tabella deve essere memorizzata in BigQuery; non può essere una tabella esterna. Non esiste un limite alle dimensioni della tabella quando utilizzi SYSTEM_TIME AS OF.

Ad esempio, la seguente query restituisce una versione storica della tabella di un'ora prima:

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

Se il timestamp specifica un orario precedente all'intervallo di tempo o precedente alla 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 momento specifico

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 Time Travel.

Per copiare i dati storici da una tabella, aggiungi un decoratore al nome della tabella utilizzando una delle seguenti sintassi:

  • tableid@TIME dove TIME è il numero di millisecondi dall'epoca Unix.
  • tableid@-TIME_OFFSET dove TIME_OFFSET è l'offset relativo rispetto all'ora attuale, in millisecondi.
  • tableid@0: specifica i dati storici meno recenti disponibili.

Ad esempio, il seguente comando dello strumento a riga di comando bq copia una tabella denominata table1 da un'ora prima in una tabella denominata table1_restored. L'ora, -3600000, è specificata in millisecondi utilizzando un offset relativo.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

Esegui questo comando per ottenere l'ora Unix equivalente per un'ora che specifichi:

  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 l'ora UNIX epoch 1691164834000 che hai ricevuto dal comando precedente.

bq cp mydataset.table1@1691164834000 mydataset.table1_restored

Per ulteriori informazioni, consulta la sezione Ripristinare le tabelle eliminate.

Passaggi successivi