So stellen Sie versehentlich aus Google BigQuery gelöschte Daten wieder her
Veröffentlicht: 2022-04-12Haben Sie jemals versehentlich eine wichtige Tabelle, Ansicht oder einen ganzen Datensatz in Google BigQuery gelöscht? Wenn ja, wissen Sie, dass Sie mit Tabellen und Abfragen, die die gelöschten Daten enthalten, nicht weiterarbeiten können.
Wir haben detaillierte Anweisungen geschrieben, die Ihnen helfen, versehentlich gelöschte Daten wiederherzustellen und keine grauen Haare vorzeitig zu bekommen.
Inhaltsverzeichnis
- So stellen Sie eine gelöschte Tabelle wieder her
- So stellen Sie eine gelöschte Ansicht wieder her
- So stellen Sie einen gelöschten Datensatz wieder her
- Was zu tun ist, um ähnliche Probleme in Zukunft zu vermeiden
- Was zu tun ist, um das Ausmaß des Problems zu verringern, wenn es erneut auftritt
So stellen Sie eine gelöschte Tabelle wieder her
Sie können eine gelöschte Tabelle wiederherstellen, wenn seit ihrer Löschung nicht mehr als sieben Tage vergangen sind und wenn Sie ihren Namen und den Namen des Datensatzes kennen, aus dem sie gelöscht wurde.
Um eine Tabelle wiederherzustellen, öffnen Sie die Cloud Shell-Befehlszeile in der Google BigQuery-Oberfläche:

Geben Sie den folgenden Befehl ein:
bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable
Beispiel für denselben Befehl mit Tabellen- und Datensatznamen:
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
Woher:
- OWOXBI_Reports.123_Transactions_withModels – ist der Datensatz und die Tabelle, die gelöscht wurden.
- OWOXBI_Reports_Restore.123_Transactions_withModels – ist der Datensatz und der Name der darin enthaltenen Tabelle, in der Sie die Daten wiederherstellen möchten.
- @-13600000 — eine Distanz in der Vergangenheit (vor 13.600.000 Millisekunden), als die gesuchte Tabelle noch existierte. Wenn eine Tabelle beispielsweise vor 30 Minuten gelöscht wurde, reicht es aus, das Zeitintervall auf @ -3600000 festzulegen, was eine Stunde zurückliegt (60 Sekunden × 60 Minuten × 1000).
Nach Eingabe der Anfrage ist eine Autorisierung erforderlich. Klicken Sie auf die Schaltfläche Autorisieren:

Nachdem der Befehl erfolgreich ausgeführt wurde, wird die Tabelle wiederhergestellt:

Sie sehen einen ähnlichen Text wie diesen:
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'
So stellen Sie eine gelöschte Ansicht wieder her
Sie können eine Remote-Ansicht nicht auf die oben beschriebene Weise wiederherstellen. Diese Methode ist nur für Tabellen geeignet.
Der Google-Support empfiehlt die Verwendung von Logs Explorer, um eine gelöschte Ansicht wiederherzustellen.
Um Abfragen zu finden, die eine Remote-Ansicht aktualisiert haben, führen Sie die folgende Abfrage in Google Cloud Platform-Protokollen aus:
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"
Woher:
- tableservice.update – ist der Befehl zum Anzeigen der Ansichtsaktualisierung in Protokollen
- custom_events_attribution_VIEW — der Name der Ansicht
Legen Sie in den Einstellungen Zeitbereich auswählen den Zeitraum fest, in dem Änderungen an der Ansicht vorgenommen werden können (z. B. ein Jahr):

Wenn der Befehl ausgeführt wird, werden alle Abfragen angezeigt, die die gesuchte Ansicht aktualisiert haben. Wählen Sie die letzte Zeitstempelabfrage aus:

Kopieren Sie die Abfrage aus dem Protokoll und erstellen Sie die Ansicht neu.

Außerdem können Sie die Abfrage finden, die die gesuchte Ansicht erstellt hat (vorher haben wir nach Abfragen gesucht, die die Ansicht aktualisiert haben). Verwenden Sie dazu den folgenden Befehl:
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"

Wir empfehlen Ihnen, einen möglichst langen Zeitraum einzustellen, um die Protokolle nach dem gewünschten Eintrag zu durchsuchen.

Wenn eine Ansicht erstellt wurde, bevor Protokolle aufgezeichnet wurden, kann sie nicht wiederhergestellt werden. In diesem Fall kann der oben beschriebene Befehl tableservice.update helfen.
So stellen Sie einen gelöschten Datensatz wieder her
Wenn Sie einen Datensatz löschen, können Sie ihn nicht wiederherstellen. Sie müssen ein neues Dataset mit demselben Namen erstellen, die Tabellen und Ansichten aus dem gelöschten Dataset wiederherstellen und sie in das neue Dataset verschieben.
In den ersten 24 Stunden nach dem Löschen eines Datensatzes können Sie keinen neuen Datensatz mit demselben Namen erstellen, aber Sie können immer noch die Namen von Tabellen und Ansichten finden, die Teil des gelöschten Datensatzes waren. Die Tabellen und Ansichten selbst sind jedoch nicht mehr sichtbar.
Sie können Aufrufe aus einem gelöschten Dataset anhand des Namens finden, indem Sie in BigQuery suchen:

Die Liste der Tabellen kann nicht über die Suche gefunden werden, da Tabellen keine gemeinsame Komponente in ihren Namen haben.
Verwenden Sie die folgende SQL-Abfrage, um einen Tabellennamen aus einem gelöschten Dataset zu finden. Geben Sie in der Abfrage den Zeitraum an, in dem die Tabellen geändert werden können (creation_time BETWEEN). Als Ergebnis gibt die Abfrage Tabellen zurück, an denen in welchem Zeitraum Änderungen vorgenommen wurden. Dies sind die Tabellen aus dem gelöschten Dataset.
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)
Als Ergebnis der Anfrage erhalten Sie die folgenden Informationen:
- query — der Text der Abfrage, die die Änderung an destination_table vorgenommen hat
- user _email — der Benutzer, der die Aktualisierungsanforderung von destination_table gestartet hat
- destination_table — die Tabelle, die aktualisiert wurde
- job_ids — die Anzahl der Abfragestarts während des angegebenen Zeitintervalls (creation_time BETWEEN …)
- lastUpdateDate — wann die Abfrage zuletzt gestartet wurde (MAX(creation_time) AS lastUpdateDate)
Vierundzwanzig Stunden nach dem Löschen eines Datasets können Sie ein neues Dataset mit demselben Namen erstellen und mit der Wiederherstellung von Tabellen und Ansichten beginnen.
Was zu tun ist, um ähnliche Probleme in Zukunft zu vermeiden
- Aktivieren Sie die Protokollerfassung in Ihrem Google BigQuery-Projekt, wenn Sie beginnen, mit dem Projekt zu arbeiten.
- Benennen Sie eine Tabelle nicht und sehen Sie sie als Datensatz an.
- Überprüfen Sie den Namen jeder Tabelle, die Sie aus Google BigQuery löschen möchten.
- Löschen Sie Tabellen über Abfragen, nicht über die Benutzeroberfläche.
- Fügen Sie den Entitätstyp zu Dataset-, Tabellen- und Ansichtsnamen hinzu. Zum Beispiel:
- OWOXBI_report_dataset
- OWOXBI_report_table
- OWOXBI_report_view
Sie können eine Tabelle mit einer Abfrage löschen:
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
Sie können eine Ansicht auch mit einer Abfrage löschen:
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
Was zu tun ist, um das Ausmaß des Problems zu verringern, wenn es erneut auftritt
- Ändern Sie keine Abfragen in Zeitplan und Google Apps-Skript; Stellen Sie am nächsten Tag alle Ansichten und Tabellen wieder her, danach funktionieren Zeitplan und Google Apps Script ordnungsgemäß.
- Wenn die Ansicht oder Tabelle an der Einrichtung des Attributionsmodells beteiligt war, müssen Sie die Attributionsberechnung neu starten, nachdem Sie die Daten an ihrem vorherigen Speicherort wiederhergestellt haben.
Nützliche Links zum Thema
Gelöschte Tabellen wiederherstellen
Löschen einer Tabelle
Ansichten verwalten
So stellen Sie eine Tabelle in Google BigQuery sofort wieder her

Unsere Kunden
zunehmen 22 % schneller
Wachsen Sie schneller, indem Sie messen, was in Ihrem Marketing am besten funktioniert
Analysieren Sie Ihre Marketingeffizienz, finden Sie die Wachstumsbereiche, steigern Sie den ROI
Demo erhalten