Comment restaurer des données supprimées accidentellement de Google BigQuery
Publié: 2022-04-12Avez-vous déjà accidentellement supprimé une table, une vue ou un ensemble de données important dans Google BigQuery ? Si tel est le cas, vous savez que vous ne pouvez pas continuer à travailler avec des tables et des requêtes contenant les données supprimées.
Nous avons écrit des instructions détaillées pour vous aider à restaurer les données supprimées accidentellement et à ne pas avoir de cheveux gris plus tôt que prévu.
Table des matières
- Comment restaurer une table supprimée
- Comment restaurer une vue supprimée
- Comment restaurer un jeu de données supprimé
- Que faire pour éviter des problèmes similaires à l'avenir
- Que faire pour réduire l'ampleur du problème s'il se reproduit
Comment restaurer une table supprimée
Vous pouvez restaurer une table supprimée si cela ne fait pas plus de sept jours qu'elle a été supprimée et si vous connaissez son nom et le nom de l'ensemble de données à partir duquel elle a été supprimée.
Pour restaurer une table, ouvrez la ligne de commande Cloud Shell dans l'interface Google BigQuery :

Entrez la commande suivante :
bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable
Exemple de la même commande avec des noms de table et de jeu de données :
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
Où:
- OWOXBI_Reports.123_Transactions_withModels — est l'ensemble de données et la table qui ont été supprimés.
- OWOXBI_Reports_Restore.123_Transactions_withModels — est l'ensemble de données et le nom de la table dans laquelle vous souhaitez restaurer les données.
- @-13600000 - une distance dans le passé (il y a 13 600 000 millisecondes) lorsque la table que vous recherchez existait encore. Par exemple, si une table a été supprimée il y a 30 minutes, il suffit de définir l'intervalle de temps @ -3600000, c'est-à-dire il y a une heure (60 secondes × 60 minutes × 1000).
Après avoir saisi la demande, une autorisation est requise. Cliquez sur le bouton Autoriser :

Une fois la commande exécutée avec succès, la table sera restaurée :

Vous verrez un texte semblable à celui-ci :
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'
Comment restaurer une vue supprimée
Vous ne pouvez pas restaurer une vue à distance de la manière décrite ci-dessus. Cette méthode ne convient que pour les tableaux.
L'assistance Google recommande d'utiliser l'explorateur de journaux pour restaurer une vue supprimée.
Pour rechercher les requêtes qui ont mis à jour une vue distante, exécutez la requête suivante dans les journaux 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"
Où:
- tableservice.update — est la commande pour afficher la mise à jour de la vue dans les journaux
- custom_events_attribution_VIEW — le nom de la vue
Dans les paramètres de sélection de la plage de temps, définissez la période pendant laquelle des modifications peuvent être apportées à la vue (par exemple, un an) :

Lorsque la commande est exécutée, toutes les requêtes qui ont mis à jour la vue que vous recherchez seront affichées. Sélectionnez la dernière requête d'horodatage :

Copiez la requête à partir du journal et recréez la vue.

De plus, vous pouvez trouver la requête qui a créé la vue que vous recherchiez (avant cela, nous recherchions les requêtes qui ont mis à jour la vue). Pour ce faire, utilisez la commande suivante :
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"

Nous vous recommandons de définir la période la plus longue possible pour rechercher dans les journaux l'entrée requise.

Si une vue a été créée avant que les journaux ne commencent à être enregistrés, il ne sera pas possible de la restaurer. Dans ce cas, la commande tableservice.update que nous avons décrite ci-dessus peut vous aider.
Comment restaurer un jeu de données supprimé
Si vous supprimez un ensemble de données, vous ne pourrez pas le restaurer. Vous devez créer un nouveau jeu de données portant le même nom, restaurer les tables et les vues qui se trouvaient dans le jeu de données supprimé et les déplacer vers le nouveau jeu de données.
Dans les premières 24 heures après la suppression d'un jeu de données, vous ne pouvez pas créer un nouveau jeu de données avec le même nom, mais vous pouvez toujours trouver les noms des tables et des vues qui faisaient partie du jeu de données supprimé. Cependant, les tables et les vues elles-mêmes ne seront plus visibles.
Vous pouvez trouver des vues d'un ensemble de données supprimé par nom en effectuant une recherche dans BigQuery :

La liste des tables ne peut pas être trouvée par la recherche, car les tables n'ont pas de composant commun dans leurs noms.
Pour rechercher un nom de table à partir d'un ensemble de données supprimé, utilisez la requête SQL suivante. Dans la requête, précisez la période pendant laquelle les tables peuvent être modifiées (creation_time BETWEEN). Par conséquent, la requête renverra les tables auxquelles des modifications ont été apportées dans quel délai. Ce seront les tables de l'ensemble de données supprimé.
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)
À la suite de la demande, vous recevrez les informations suivantes :
- query — le texte de la requête qui a apporté la modification à destination_table
- user _email — l'utilisateur qui a lancé la demande de mise à jour de destination_table
- destination_table — la table qui a été mise à jour
- job_ids — le nombre de démarrages de requête pendant l'intervalle de temps spécifié (creation_time BETWEEN …)
- lastUpdateDate — la dernière fois que la requête a été démarrée (MAX(creation_time) AS lastUpdateDate)
Vingt-quatre heures après la suppression d'un jeu de données, vous pouvez créer un nouveau jeu de données portant le même nom et commencer à restaurer les tables et les vues.
Que faire pour éviter des problèmes similaires à l'avenir
- Activez la collecte de journaux dans votre projet Google BigQuery lorsque vous commencez à travailler avec le projet.
- Ne nommez pas une table et affichez-la comme un ensemble de données.
- Vérifiez le nom de toute table que vous souhaitez supprimer de Google BigQuery.
- Supprimez des tables via des requêtes, et non via l'interface utilisateur.
- Ajoutez le type d'entité aux noms de jeu de données, de table et de vue. Par example:
- OWOXBI_report_dataset
- OWOXBI_report_table
- OWOXBI_report_view
Vous pouvez supprimer une table à l'aide d'une requête :
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
Vous pouvez également supprimer une vue à l'aide d'une requête :
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
Que faire pour réduire l'ampleur du problème s'il se reproduit
- Ne modifiez pas les requêtes dans Schedule et Google Apps Script ; le lendemain, restaurez toutes les vues et tables, après quoi Schedule et Google Apps Script fonctionneront correctement.
- Si la vue ou la table a été impliquée dans la configuration du modèle d'attribution, vous devrez redémarrer le calcul d'attribution après avoir restauré les données à leur emplacement précédent.
Liens utiles sur le sujet
Restauration des tables supprimées
Suppression d'un tableau
Gestion des vues
Comment récupérer instantanément une table dans Google BigQuery

Nos clients
croître 22 % plus rapide
Développez-vous plus rapidement en mesurant ce qui fonctionne le mieux dans votre marketing
Analysez votre efficacité marketing, trouvez les zones de croissance, augmentez le ROI
Obtenir une démo