Accede a los datos históricos

BigQuery te permite usar viajes en el tiempo para acceder a los datos almacenados en BigQuery que se modificaron o borraron.

Consulta datos de momentos determinados

Puedes consultar los datos históricos de una tabla desde cualquier momento dentro del período de viaje con una cláusula FOR SYSTEM_TIME AS OF. Esta cláusula usa una expresión de marca de tiempo constante y hace referencia a la versión de la tabla que era la más reciente en esa marca de tiempo. La tabla debe estar almacenada en BigQuery, no puede ser una tabla externa. No existe un límite para el tamaño de la tabla cuando se usa SYSTEM_TIME AS OF.

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

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

Si la marca de tiempo especifica un período anterior al período de viaje o antes de que se cree la tabla, la consulta fallará y mostrará un error como el siguiente:

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

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

Si se borró la tabla, falla la consulta y muestra un error como el siguiente:

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

Sin embargo, puedes restablecer la tabla si copias de un momento determinado a una tabla nueva, como se describe en este documento.

Restablece la versión de una tabla de un momento determinado

Para restablecer una tabla desde los datos históricos, puedes copiar los datos históricos en una tabla. La copia de datos funciona incluso si la tabla se borró o caducó, siempre que restablezcas la tabla dentro de la duración del período de viaje.

Para copiar datos históricos de una tabla, agrega un decorador al nombre de la tabla con la siguiente sintaxis:

  • tableid@TIME en el que TIME es la cantidad de milisegundos transcurridos desde la época UNIX.
  • tableid@-TIME_OFFSET en el que TIME_OFFSET es la compensación relativa desde la hora actual, en milisegundos.
  • tableid@0: Especifica los datos históricos más antiguos disponibles.

Por ejemplo, con el siguiente comando de la herramienta de línea de comandos de bq, se copia una tabla llamada table1 de hace una hora y se pega en una tabla llamada table1_restored. El tiempo, -3600000, se especifica en milisegundos usando una compensación relativa.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

Con el siguiente comando de la herramienta de línea de comandos de bq, se copia una tabla llamada table1 y se pega en una tabla llamada table1_restored. La hora, 1624046611000, se especifica como milisegundos transcurridos desde la época UNIX.

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

Para obtener más información, consulta Restablece tablas borradas.

¿Qué sigue?