Como restaurar dados excluídos acidentalmente do Google BigQuery

Publicados: 2022-04-12

Você já excluiu acidentalmente uma tabela importante, uma visualização ou um conjunto de dados inteiro no Google BigQuery? Se tiver, você sabe que não pode continuar trabalhando com tabelas e consultas que contenham os dados excluídos.

Escrevemos instruções detalhadas para ajudá-lo a restaurar dados excluídos acidentalmente e não obter cabelos grisalhos antes do previsto.

Índice

  • Como restaurar uma tabela excluída
  • Como restaurar uma visualização excluída
  • Como restaurar um conjunto de dados excluído
  • O que fazer para evitar problemas semelhantes no futuro
  • O que fazer para reduzir a escala do problema se ele acontecer novamente

Como restaurar uma tabela excluída

Você pode restaurar uma tabela excluída se ela não tiver passado mais de sete dias desde que foi excluída e se souber seu nome e o nome do conjunto de dados do qual ela foi excluída.

Para restaurar uma tabela, abra a linha de comando do Cloud Shell na interface do Google BigQuery:

Digite o seguinte comando:

    bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable

Exemplo do mesmo comando com nomes de tabelas e conjuntos de dados:

    bq cp OWOXBI_Reports.123_Transactions_withModels@-13600000 OWOXBI_Reports_Restore.123_Transactions_withModels
bq cp OWOXBI_Reports.123_Transactions_withModels@-13600000 OWOXBI_Reports_Restore.123_Transactions_withModels

Onde:

  • OWOXBI_Reports.123_Transactions_withModels — é o conjunto de dados e a tabela que foi excluída.
  • OWOXBI_Reports_Restore.123_Transactions_withModels — é o conjunto de dados e o nome da tabela dentro dele onde você deseja restaurar os dados.
  • @-13600000 — uma distância no passado (13.600.000 milissegundos atrás) quando a tabela que você está procurando ainda existia. Por exemplo, se uma tabela foi excluída há 30 minutos, é suficiente definir o intervalo de tempo @ -3600000, que é uma hora atrás (60 segundos × 60 minutos × 1000).

Depois de inserir a solicitação, é necessária a autorização. Clique no botão Autorizar:

Depois que o comando for executado com sucesso, a tabela será restaurada:

Você verá um texto semelhante a este:

    Waiting on bqjob_r4ca30008c2e3147d_0000017af0d58e5e_1 ... (0s) Current status: DONE Table 'summer-drive-112011:OWOXBI_Reports_Restore.test_table@-600000' successfully copied to 'summer-drive-112011:OWOXBI_Reports_Restore.test_table'
Waiting on bqjob_r4ca30008c2e3147d_0000017af0d58e5e_1 ... (0s) Current status: DONE Table 'summer-drive-112011:OWOXBI_Reports_Restore.test_table@-600000' successfully copied to 'summer-drive-112011:OWOXBI_Reports_Restore.test_table' 

Como restaurar uma visualização excluída

Você não pode restaurar uma visualização remota da maneira descrita acima. Esse método é adequado apenas para tabelas.

O suporte do Google recomenda usar o Explorador de registros para restaurar uma visualização excluída.

Para encontrar consultas que atualizaram uma visualização remota, execute a seguinte consulta nos registros do Google Cloud Platform:

    resource.type="bigquery_resource" protoPayload.methodName="tableservice.update" protoPayload.serviceData.tableUpdateRequest.resource.tableName.tableId="custom_events_attribution_VIEW"
resource.type="bigquery_resource" protoPayload.methodName="tableservice.update" protoPayload.serviceData.tableUpdateRequest.resource.tableName.tableId="custom_events_attribution_VIEW"

Onde:

  • tableservice.update — é o comando para exibir a atualização da visualização nos logs
  • custom_events_attribution_VIEW — o nome da visualização

Nas configurações Selecionar intervalo de tempo, defina o período durante o qual as alterações podem ser feitas na visualização (por exemplo, um ano):

Quando o comando for executado, todas as consultas que atualizaram a visualização que você está procurando serão exibidas. Selecione a última consulta de carimbo de data/hora:

Copie a consulta do log e recrie a exibição.

Além disso, você pode encontrar a consulta que criou a visualização que estava procurando (antes disso, pesquisávamos consultas que atualizavam a visualização). Para fazer isso, use o seguinte comando:

    resource.type="bigquery_resource" protoPayload.methodName="tableservice.insert" protoPayload.serviceData.tableInsertRequest.resource.tableName.tableId="query_name_VIEW"
resource.type="bigquery_resource" protoPayload.methodName="tableservice.insert" protoPayload.serviceData.tableInsertRequest.resource.tableName.tableId="query_name_VIEW" 

Recomendamos que você defina o período mais longo possível para pesquisar os logs para a entrada necessária.

Se uma visualização foi criada antes de os logs começarem a ser gravados, não será possível restaurá-la. Nesse caso, o comando tableservice.update que descrevemos acima pode ajudar.

Como restaurar um conjunto de dados excluído

Se você excluir um conjunto de dados, não poderá restaurá-lo. Você deve criar um novo conjunto de dados com o mesmo nome, restaurar as tabelas e exibições que estavam no conjunto de dados excluído e movê-las para o novo conjunto de dados.

Nas primeiras 24 horas após a exclusão de um conjunto de dados, você não pode criar um novo conjunto de dados com o mesmo nome, mas ainda pode encontrar os nomes das tabelas e visualizações que faziam parte do conjunto de dados excluído. No entanto, as próprias tabelas e visualizações não estarão mais visíveis.

Você pode encontrar visualizações de um conjunto de dados excluído por nome pesquisando no BigQuery:

A lista de tabelas não pode ser encontrada por meio de pesquisa, pois as tabelas não possuem um componente comum em seus nomes.

Para localizar um nome de tabela de um conjunto de dados excluído, use a seguinte consulta SQL. Na consulta, especifique o período durante o qual as tabelas podem ser modificadas (creation_time BETWEEN). Como resultado, a consulta retornará tabelas nas quais as alterações foram feitas dentro de qual período de tempo. Essas serão as tabelas do conjunto de dados excluído.

    SELECT * FROM ( SELECT query, user_email, CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) AS destination_table, COUNT(job_id) AS job_ids, MAX(creation_time) AS lastUpdateDate FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY) AND TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 0 DAY) AND state = 'DONE' AND CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) LIKE "%OWOXBI_Reports.%" GROUP BY 1, 2, 3 ORDER BY 5 DESC)
SELECT * FROM ( SELECT query, user_email, CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) AS destination_table, COUNT(job_id) AS job_ids, MAX(creation_time) AS lastUpdateDate FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY) AND TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 0 DAY) AND state = 'DONE' AND CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) LIKE "%OWOXBI_Reports.%" GROUP BY 1, 2, 3 ORDER BY 5 DESC)

Como resultado da solicitação, você receberá as seguintes informações:

  • query — o texto da consulta que fez a alteração para destination_table
  • user _email — o usuário que iniciou a solicitação de atualização da destination_table
  • destination_table — a tabela que foi atualizada
  • job_ids — o número de consultas iniciadas durante o intervalo de tempo especificado (creation_time BETWEEN …)
  • lastUpdateDate — a última vez que a consulta foi iniciada (MAX(creation_time) AS lastUpdateDate)

Vinte e quatro horas depois de excluir um conjunto de dados, você pode criar um novo conjunto de dados com o mesmo nome e começar a restaurar tabelas e exibições.

O que fazer para evitar problemas semelhantes no futuro

  1. Ative a coleta de registros em seu projeto do Google BigQuery ao começar a trabalhar com o projeto.
  2. Não nomeie uma tabela e visualize o mesmo como um conjunto de dados.
  3. Verifique o nome de qualquer tabela que você deseja excluir do Google BigQuery.
  4. Exclua tabelas por meio de consultas, não por meio da interface do usuário.
  5. Adicione o tipo de entidade aos nomes de conjunto de dados, tabela e exibição. Por exemplo:
    1. OWOXBI_report_dataset
    2. OWOXBI_report_table
    3. OWOXBI_report_view

Você pode excluir uma tabela usando uma consulta:

    DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`

Você também pode excluir uma visualização usando uma consulta:

    DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW` 

O que fazer para reduzir a escala do problema se ele acontecer novamente

  • Não altere as consultas na Agenda e no Google Apps Script; no dia seguinte, restaure todas as visualizações e tabelas, após o que a Agenda e o Script do Google Apps funcionarão corretamente.
  • Se a visualização ou tabela estiver envolvida na configuração do modelo de atribuição, você precisará reiniciar o cálculo de atribuição após restaurar os dados para o local anterior.

Links úteis sobre o assunto

Restaurando tabelas excluídas

Excluindo uma tabela

Como gerenciar visualizações

Como recuperar instantaneamente uma tabela no Google BigQuery

Nossos clientes
crescer 22% mais rápido

Cresça mais rápido medindo o que funciona melhor em seu marketing

Analise sua eficiência de marketing, encontre as áreas de crescimento, aumente o ROI

Obter demonstração