Accedere ai dati storici
BigQuery ti consente di usare i viaggi nel tempo per Accedere ai dati archiviati in BigQuery che sono stati modificati o eliminati.
Query sui dati in un momento specifico
Puoi eseguire query sui dati storici di una tabella da qualsiasi momento all'interno del
finestra di spostamento cronologico utilizzando
FOR SYSTEM_TIME AS OF
una clausola. Questa clausola prende un'espressione timestamp costante e fa riferimento
della tabella che era corrente al timestamp in questione. La tabella deve essere memorizzata in BigQuery e non può essere una tabella esterna. Non sono presenti
limite per le dimensioni della tabella 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 o precedente alla finestra di spostamento cronologico prima della creazione della tabella, la query non riesce e restituisce un errore come seguenti:
Invalid snapshot time 1601168925462 for table myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.
Dopo aver sostituito una tabella esistente utilizzando CREATE OR REPLACE TABLE
puoi utilizzare FOR SYSTEM_TIME AS OF
per eseguire query sulla versione precedente
nella 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
dove LOCATION
è la posizione del set di dati.
Tuttavia, puoi ripristinare la tabella copiandola da un punto in un altro in una nuova tabella, come descritto in questo documento.
Ripristinare una tabella da un punto in tempo
Puoi ripristinare una tabella dai dati storici copiandoli in una tabella. La copia dei dati funziona anche se la tabella è stata eliminata o è scaduta, a condizione che la ripristini entro la durata della finestra di spostamento nel tempo.
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
è l'offset relativo rispetto al tempo corrente, 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
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
Il seguente comando dello strumento a riga di comando bq copia una tabella denominata table1
in una tabella
denominata table1_restored
. Ora, 1624046611000
,
specificato in millisecondi dall'epoca di Unix.
bq cp mydataset.table1@1624046611000 mydataset.table1_restored
Per ulteriori informazioni, vedi Ripristinare le tabelle eliminate.
Passaggi successivi
- Scopri di più sugli snapshot delle tabelle.