Restaurar tabelas excluídas
Neste documento, descrevemos como restaurar (ou cancelar a exclusão) de uma tabela excluída no BigQuery. É possível restaurar uma tabela excluída dentro do período de viagem no tempo especificado para o conjunto de dados, incluindo exclusões explícitas e implícitas devido à expiração da tabela. Também é possível configurar a janela de viagem no tempo.
Para informações sobre como restaurar um conjunto de dados ou snapshot excluído, consulte os seguintes recursos:
O período de viagem pode ser de dois a sete dias. Após o período de viagem, o BigQuery oferece um período de segurança contra falhas em que os dados excluídos são retidos automaticamente por mais sete dias. Depois que o período de segurança contra falhas passar, não será possível restaurar uma tabela usando qualquer método, incluindo a abertura de um tíquete de suporte.
Antes de começar
Verifique se você tem as permissões necessárias do Identity and Access Management (IAM) para restaurar uma tabela excluída.
Funções exigidas
Para receber as permissões necessárias para restaurar uma tabela excluída, peça ao administrador para conceder a você o papel do IAM de Usuário do BigQuery (roles/bigquery.user) no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.
Restaurar uma tabela
Para restaurar uma tabela de dados históricos, copie-os para uma nova tabela. A cópia de dados históricos 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.
Ao restaurar uma tabela a partir de dados históricos, tags da tabela de origem não são copiadas para a tabela de destino. As informações de particionamento da tabela também não são copiadas para a tabela de destino. Para recriar o esquema de particionamento da tabela original, consulte a solicial ção inicial de criação da tabela no Cloud Logging e use essas informações para particionar a tabela restaurada.
É possível restaurar uma tabela que foi excluída, mas ainda está dentro do período de viagem
copiando-a para uma nova tabela usando o decorador de tempo @<time>.
Não é possível consultar uma tabela excluída, mesmo que você use um decorador de tempo. Primeiro, restaure-a.
Use a seguinte sintaxe com o decorador de tempo @<time>:
tableid@TIMEem 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.
Para restaurar uma tabela, selecione uma das seguintes opções:
Console
Não é possível cancelar a exclusão de uma tabela usando o Google Cloud console.
bq
-
No Google Cloud console, ative o Cloud Shell.
Na parte de baixo do Google Cloud console, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a Google Cloud CLI já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Para restaurar uma tabela, primeiro determine um carimbo de data/hora UNIX de quando a tabela existia (em milissegundos). É possível usar o comando
datedo Linux para gerar o carimbo de data/hora Unix a partir de um valor de carimbo de data/hora normal:date -d '2023-08-04 16:00:34.456789Z' +%s000
Em seguida, use o comando
bq copycom o@<time>decorador de viagem no tempo para executar a operação de cópia da tabela.Por exemplo, digite o seguinte comando para copiar a tabela
mydataset.mytableno momento1418864998000para uma nova tabelamydataset.newtable.bq cp mydataset.mytable@1418864998000 mydataset.newtable
Opcional: forneça a sinalização
--locatione defina o valor do local.Também é possível especificar um deslocamento relativo. O exemplo a seguir copia a versão de uma tabela de uma hora atrás:
bq cp mydataset.mytable@-3600000 mydataset.newtable
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Se você antecipar que talvez queira restaurar uma tabela mais tarde diferente da permitida pelo período de viagem, crie um snapshot da tabela. Para mais informações, consulte Introdução aos snapshots da tabela.
Não é possível restaurar uma visualização lógica diretamente. Para mais informações, consulte Restaurar uma visualização.
Identificar quando uma tabela foi excluída
Use o filtro a seguir na Análise de registros no Google Cloud console para identificar a entrada de auditoria que mostra a expiração ou exclusão de uma tabela especificada:
resource.type="bigquery_resource"
protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID"
(protoPayload.methodName="google.cloud.bigquery.v2.TableService.DeleteTable" OR protoPayload.methodName="tableservice.delete" OR protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.statementType="DROP_TABLE" OR protoPayload.methodName="InternalTableExpired")
Substitua:
PROJECT_ID: o ID do projeto.DATASET_ID: o ID do conjunto de dados que continha a tabela.TABLE_ID: o ID da tabela excluída.
Como alternativa, use o filtro a seguir para encontrar a expiração ou exclusão do conjunto de dados que continha a tabela:
resource.type="bigquery_dataset"
protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID"
(protoPayload.methodName="google.cloud.bigquery.v2.DatasetService.DeleteDataset" OR protoPayload.methodName="datasetservice.delete")
Substitua:
PROJECT_ID: o ID do projeto.DATASET_ID: o ID do conjunto de dados que continha a tabela.
Identificar a causa da exclusão da tabela
É possível usar a
INFORMATION_SCHEMA.TABLE_STORAGE
visualização para determinar como uma tabela foi excluída.
A visualização INFORMATION_SCHEMA.TABLE_STORAGE contém informações sobre tabelas atuais e tabelas excluídas dentro do período de viagem no tempo. Se uma tabela foi excluída, a coluna table_deletion_time contém o carimbo de data/hora de exclusão e a coluna table_deletion_reason contém o método de exclusão.
Para determinar o motivo da exclusão de uma tabela, consulte a visualização INFORMATION_SCHEMA.TABLE_STORAGE:
SELECT table_name, deleted, table_deletion_time, table_deletion_reason FROM `PROJECT_ID`.`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE WHERE table_schema = "DATASET_ID" AND table_name = "TABLE_ID"
Substitua as seguintes variáveis:
PROJECT_ID: o ID do projeto.REGION: a região do conjunto de dados que continha a tabela.DATASET_ID: o ID do conjunto de dados que continha a tabela.TABLE_ID: o ID da tabela excluída.
A coluna table_deletion_reason explica por que a tabela foi excluída:
TABLE_EXPIRATION: a tabela foi excluída após o tempo de expiração definido.DATASET_DELETION: o conjunto de dados a que a tabela pertencia foi excluído por um usuário.USER_DELETED: a tabela foi excluída por um usuário.
Resolver problemas de recuperação de tabelas
Consultar a tabela excluída usando um carimbo de data/hora no passado
Não é possível restaurar dados da tabela consultando uma tabela excluída no passado usando um
decorador de carimbo de data/hora ou usando
FOR SYSTEM_TIME AS OF
para salvar o resultado em uma tabela de destino. O uso de um desses métodos gera o seguinte erro:
Not found: Table myproject:mydataset.table was not found in location LOCATION
Em vez disso, para copiar a tabela, siga as etapas em Restaurar uma tabela.
Erro: VPC Service Controls: Request is prohibited by organization's policy
Ao tentar executar o comando de cópia do Google Cloud Shell, você pode encontrar um erro como o seguinte:
BigQuery error in cp operation: VPC Service Controls: Request is prohibited by organization's policy
O uso do Cloud Shell no Google Cloud console com o VPC SC não é compatível, porque ele é tratado como uma solicitação fora dos perímetros de serviço e o acesso aos dados protegidos pelo VPC Service Controls é negado. Para contornar esse problema, inicie e conecte-se ao Cloud Shell localmente com a Google Cloud CLI.
Erro: Latest categories are incompatible with schema
Se você executar o comando de cópia do Google Cloud Shell, poderá receber um erro como o seguinte:
Latest categories are incompatible with schema at TIMESTAMP
Há várias causas possíveis para esse erro:
- O esquema da tabela de destino é diferente do esquema da tabela original (colunas extras são permitidas, desde que não tenham tags de política no nível da coluna anexadas).
- As tags de política no nível da coluna da tabela de destino são configuradas de maneira diferente da tabela de origem.
Para resolver esse erro:
- Verifique se o esquema da tabela de destino é idêntico e se nenhuma das colunas da tabela original está ausente da tabela de destino.
- Remova todas as tags de política no nível da coluna da tabela de destino que não estão no esquema da tabela original.
Erro: BigQuery error in cp operation: Invalid time travel timestamp
Se você executar o comando bq copy do Google Cloud Shell, poderá receber um erro como o seguinte:
BigQuery error in cp operation: Invalid time travel timestamp 1744343690000 for table PROJECT_ID:DATASET_ID.TABLE_ID@1744343690000. Cannot read before 1744843691075
Esse erro indica que você está tentando recuperar dados do estado da tabela antes do período de viagem no tempo ou antes da criação da tabela. Isso não é compatível. A mensagem de erro contém o carimbo de data/hora mais recente que pode ser usado para ler os dados da tabela. Use o carimbo de data/hora no erro no comando bq copy.
Esse erro também pode ocorrer quando você fornece um valor de carimbo de data/hora negativo, por exemplo, TABLE@-1744963620000. Em vez disso, use um deslocamento de tempo que possa ser usado com o sinal -.
BigQuery error in cp operation: Invalid time travel timestamp 584878816 for table PROJECT_ID:DATASET_ID.TABLE_ID@584878816. Cannot read before 1744843691075
Essa mensagem de erro indica que o comando bq cp contém um valor de carimbo de data/hora negativo como um deslocamento e que você tentou ler a tabela em CURRENT_TIMESTAMP - PROVIDED TIMESTAMP. Esse valor normalmente é um carimbo de data/hora em 1970. Para contornar esse problema, verifique os valores de deslocamento ou carimbo de data/hora ao definir o valor do decorador de tabela e use o sinal - de maneira adequada.
Visualizações materializadas.
Não é possível restaurar uma visualização materializada excluída diretamente. Se você excluir uma visualização materializada, será necessário recriá-la.
Se você excluir uma tabela que é uma tabela base para uma visualização materializada, a visualização materializada não poderá mais ser consultada ou atualizada. Se você restaurar a tabela base seguindo as etapas em Restaurar uma tabela, também será necessário recriar todas as visualizações materializadas que usam essa tabela.
Tabelas externas
Não é possível restaurar uma tabela externa excluída diretamente. Se você excluir uma tabela externa, será necessário recriá-la. O processo de recriação exige o conhecimento da definição da tabela original, principalmente o seguinte:
- O esquema da tabela
- Os URIs de origem que apontam para os dados externos
- O formato dos dados externos
É possível acessar essas informações no Cloud Logging
procurando a entrada de registro de criação da tabela.
Também é possível tentar acessar os URIs consultando a
INFORMATION_SCHEMA.TABLE_OPTIONS visualização
se a tabela tiver sido excluída.
A exclusão da tabela externa não exclui os dados subjacentes.
A seguir
- Saiba como criar e usar tabelas.
- Saiba como gerenciar tabelas.
- Saiba como modificar esquemas de tabelas.
- Saiba como trabalhar com dados de tabela.