Acceder al historial de datos

BigQuery te permite consultar y restaurar datos almacenados en BigQuery que se hayan modificado o eliminado en tu ventana de viaje en el tiempo.

Consultar datos en un momento concreto

Puedes consultar los datos históricos de una tabla desde cualquier momento del periodo de viaje en el tiempo mediante una cláusula FOR SYSTEM_TIME AS OF. Esta cláusula toma una expresión de marca de tiempo constante y hace referencia a la versión de la tabla que estaba vigente en esa marca de tiempo. La tabla debe estar almacenada en BigQuery. No puede ser una tabla externa. No hay límite en el tamaño de las tablas cuando se usa SYSTEM_TIME AS OF.

Por ejemplo, la siguiente consulta devuelve una versión histórica de la tabla de hace una hora:

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

Si la marca de tiempo especifica una hora anterior al periodo de viaje en el tiempo o a la creación de la tabla, la consulta fallará y devolverá un error como el siguiente:

Invalid snapshot time 1601168925462 for table
myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.

Después de sustituir una tabla con la declaración CREATE OR REPLACE TABLE, puedes usar FOR SYSTEM_TIME AS OF para consultar la versión anterior de la tabla.

Si se ha eliminado la tabla, la consulta fallará y devolverá un error como el siguiente:

Not found: Table myproject:mydataset.table was not found in location LOCATION

Restaurar una tabla a partir de un momento dado

Puedes restaurar una tabla a partir del historial de datos copiando el historial de datos en una tabla. La copia de datos históricos funciona aunque la tabla se haya eliminado o haya caducado, siempre que la restaure durante el periodo de la ventana de viaje en el tiempo.

Para copiar el historial de datos de una tabla, añade un decorador al nombre de la tabla con una de las siguientes sintaxis:

  • tableid@TIME, donde TIME es el número de milisegundos transcurridos desde el inicio del registro de tiempo Unix.
  • tableid@-TIME_OFFSET, donde TIME_OFFSET es el desplazamiento relativo desde la hora actual, en milisegundos.
  • tableid@0: especifica los datos históricos más antiguos disponibles.

Por ejemplo, el siguiente comando de la herramienta de línea de comandos bq copia una tabla llamada table1 de hace una hora en una tabla llamada table1_restored. El tiempo, -3600000, se especifica en milisegundos mediante un desplazamiento relativo.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

Ejecuta el siguiente comando para obtener el tiempo de época de Unix equivalente a la hora que especifiques:

  date -d '2023-08-04 16:00:34.456789Z' +%s000
  

El siguiente comando de la herramienta de línea de comandos bq copia una tabla llamada table1 en una tabla llamada table1_restored. Sustituye la hora de la época de UNIX 1691164834000 que has recibido del comando anterior.

bq cp mydataset.table1@1691164834000 mydataset.table1_restored

Para obtener más información, consulta Restaurar tablas eliminadas.

Siguientes pasos