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 queTIME
é o número de milissegundos desde o início da época Unix.tableid@-TIME_OFFSET
, ondeTIME_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?
- Saiba mais sobre as imagens instantâneas de tabelas.
- Saiba mais acerca da retenção de dados com a viagem no tempo e a segurança.
- Saiba mais sobre a gestão de tabelas.