Acessar dados históricos

O BigQuery permite usar a viagem de tempo para acessar dados armazenados no BigQuery que foram alterados ou excluídos.

Consultar dados em um momento específico

É possível consultar os dados históricos de uma tabela a qualquer momento na janela de viagem no tempo usando uma cláusula FOR SYSTEM_TIME AS OF. Essa cláusula usa uma expressão de carimbo de data/hora constante e faz referência à versão da tabela que estava sendo atualizada no carimbo de data/hora. A tabela precisa ser armazenada no BigQuery; não pode ser uma tabela externa. Não há limite no tamanho da tabela quandoSYSTEM_TIME AS OF é usado.

Por exemplo, a seguinte consulta retorna uma versão histórica de uma hora atrás:

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

Se o carimbo de data/hora especificar um horário anterior à janela de viagem no tempo ou antes da criação da tabela, a consulta falhará e retornará um erro como o seguinte:

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

Depois de substituir uma tabela atual usando a instrução CREATE OR REPLACE TABLE, use FOR SYSTEM_TIME AS OF para consultar a versão anterior da tabela.

Se a tabela foi excluída, a consulta falhará e retornará um erro como este:

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

No entanto, é possível restaurar a tabela copiando de um momento para uma nova tabela, conforme descrito neste documento.

Restaurar uma tabela de um momento

Para restaurar uma tabela de dados históricos, copie-os para uma tabela. A cópia de dados funciona mesmo que a tabela tenha sido excluída ou tenha expirado, desde que você restaure a tabela dentro do período da janela de viagem no tempo.

Para copiar dados históricos de uma tabela, adicione um decorador ao nome dela usando a seguinte sintaxe:

  • tableid@TIME em que TIME é o número de milissegundos desde a época do Unix.
  • tableid@-TIME_OFFSET, em que TIME_OFFSET é o deslocamento relativo do horário atual, em milissegundos.
  • tableid@0: especifica os dados históricos mais antigos disponíveis.

Por exemplo, o comando da ferramenta de linha de comando bq a seguir copia uma tabela chamada table1 de uma hora atrás para uma tabela chamada table1_restored. A hora, -3600000, é especificada em milissegundos usando um deslocamento relativo.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

O comando da ferramenta de linha de comando bq a seguir copia uma tabela chamada table1 para uma tabela chamada table1_restored. A hora, 1624046611000, é especificada como milissegundos desde a época Unix.

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

Para mais informações, consulte Como restaurar tabelas excluídas.

A seguir