Aceda a dados do histórico

O BigQuery permite-lhe consultar e restaurar dados armazenados no BigQuery que foram alterados ou eliminados na sua janela de viagem no tempo.

Consultar dados num determinado momento

Pode consultar o histórico de dados de uma tabela a partir de qualquer ponto no tempo dentro do período de deslocação no tempo usando uma cláusula FOR SYSTEM_TIME AS OF. Esta cláusula usa uma expressão de data/hora constante e faz referência à versão da tabela que estava atual nessa data/hora. A tabela tem de estar armazenada no BigQuery e não pode ser uma tabela externa. Não existe um limite para o tamanho da tabela quando usa SYSTEM_TIME AS OF.

Por exemplo, a seguinte consulta devolve uma versão do histórico da tabela de há uma hora:

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

Se a data/hora especificar uma hora anterior ao período de deslocação no tempo ou anterior à criação da tabela, a consulta falha e devolve um erro semelhante ao seguinte:

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

Depois de substituir uma tabela existente através da declaração CREATE OR REPLACE TABLE, pode usar FOR SYSTEM_TIME AS OF para consultar a versão anterior da tabela.

Se a tabela tiver sido eliminada, a consulta falha e devolve um erro semelhante ao seguinte:

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

Restaure uma tabela a partir de um determinado momento

Pode restaurar uma tabela a partir de dados do histórico copiando os dados do histórico para uma tabela. A cópia de dados do histórico funciona mesmo que a tabela tenha sido eliminada ou tenha expirado, desde que a restaure dentro do período da janela de viagem no tempo.

Para copiar dados do histórico de uma tabela, adicione um decorador ao nome da tabela com uma das seguintes sintaxes:

  • tableid@TIME, em que TIME é o número de milissegundos desde o início da época Unix.
  • tableid@-TIME_OFFSET, onde TIME_OFFSET é o desvio relativo da hora atual, em milissegundos.
  • tableid@0: especifica os dados históricos mais antigos disponíveis.

Por exemplo, o seguinte comando da ferramenta de linhas de comando bq copia uma tabela denominada table1 de há uma hora para uma tabela denominada table1_restored. A hora, -3600000, é especificada em milissegundos através de um desvio relativo.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

Execute o seguinte comando para obter a hora de época Unix equivalente para uma hora que especificar:

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

O seguinte comando da ferramenta de linhas de comando bq copia uma tabela denominada table1 para uma tabela denominada table1_restored. Substitua a indicação de tempo de época UNIX 1691164834000 que recebeu do comando anterior.

bq cp mydataset.table1@1691164834000 mydataset.table1_restored

Para mais informações, consulte o artigo Restaure tabelas eliminadas.

O que se segue?