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 queTIME
é o número de milissegundos desde a época do Unix.tableid@-TIME_OFFSET
, em queTIME_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
- Saiba mais sobre snapshots de tabela.