Jak przywrócić dane przypadkowo usunięte z Google BigQuery
Opublikowany: 2022-04-12Czy zdarzyło Ci się przypadkowo usunąć ważną tabelę, widok lub cały zbiór danych w Google BigQuery? Jeśli tak, wiesz, że nie możesz kontynuować pracy z tabelami i zapytaniami zawierającymi usunięte dane.
Napisaliśmy szczegółowe instrukcje, które pomogą Ci przywrócić przypadkowo usunięte dane i uniknąć siwych włosów przed terminem.
Spis treści
- Jak przywrócić usuniętą tabelę
- Jak przywrócić usunięty widok
- Jak przywrócić usunięty zbiór danych
- Co zrobić, aby zapobiec podobnym problemom w przyszłości?
- Co zrobić, aby zmniejszyć skalę problemu, jeśli powtórzy się?
Jak przywrócić usuniętą tabelę
Możesz przywrócić usuniętą tabelę, jeśli od jej usunięcia minęło nie więcej niż siedem dni oraz jeśli znasz jej nazwę i nazwę zbioru danych, z którego została usunięta.
Aby przywrócić tabelę, otwórz wiersz poleceń Cloud Shell w interfejsie Google BigQuery:

Wpisz następujące polecenie:
bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable
Przykład tego samego polecenia z nazwami tabeli i zbioru danych:
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
Gdzie:
- OWOXBI_Reports.123_Transactions_withModels — to zbiór danych i tabela, które zostały usunięte.
- OWOXBI_Reports_Restore.123_Transactions_withModels — to zbiór danych i nazwa znajdującej się w nim tabeli, w której chcesz przywrócić dane.
- @-13600000 — odległość w przeszłości (13 600 000 milisekund temu), kiedy tabela, której szukasz, nadal istniała. Na przykład, jeśli tabela została usunięta 30 minut temu, wystarczy ustawić przedział czasu @ -3600000, czyli godzinę temu (60 sekund ×60 minut × 1000).
Po wprowadzeniu żądania wymagana jest autoryzacja. Kliknij przycisk Autoryzuj:

Po pomyślnym wykonaniu polecenia tabela zostanie przywrócona:

Zobaczysz tekst podobny do tego:
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'
Jak przywrócić usunięty widok
Widoku zdalnego nie można przywrócić w sposób opisany powyżej. Ta metoda jest odpowiednia tylko dla stołów.
Zespół pomocy Google zaleca użycie Eksploratora logów w celu przywrócenia usuniętego widoku.
Aby znaleźć zapytania, które zaktualizowały widok zdalny, uruchom następujące zapytanie w dziennikach 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"
Gdzie:
- tableservice.update — to polecenie wyświetlające aktualizację widoku w logach
- custom_events_attribution_VIEW — nazwa widoku
W ustawieniach Wybierz zakres czasowy ustaw okres, w którym można dokonać zmian w widoku (np. jeden rok):

Po wykonaniu polecenia zostaną wyświetlone wszystkie zapytania, które zaktualizowały szukany widok. Wybierz ostatnie zapytanie dotyczące sygnatury czasowej:

Skopiuj zapytanie z dziennika i ponownie utwórz widok.

Ponadto możesz znaleźć zapytanie, które utworzyło widok, którego szukasz (wcześniej szukaliśmy zapytań, które zaktualizowały widok). Aby to zrobić, użyj następującego polecenia:
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"

Zalecamy ustawienie najdłuższego możliwego okresu przeszukiwania dzienników w celu znalezienia wymaganego wpisu.

Jeśli widok został utworzony przed rozpoczęciem zapisywania logów, nie będzie można go przywrócić. W takim przypadku pomocne może być opisane powyżej polecenie tableservice.update.
Jak przywrócić usunięty zbiór danych
Jeśli usuniesz zbiór danych, nie będziesz mógł go przywrócić. Musisz utworzyć nowy zestaw danych o tej samej nazwie, przywrócić tabele i widoki, które znajdowały się w usuniętym zestawie danych, i przenieść je do nowego zestawu danych.
W ciągu pierwszych 24 godzin po usunięciu zestawu danych nie można utworzyć nowego zestawu danych o tej samej nazwie, ale nadal można znaleźć nazwy tabel i widoków, które były częścią usuniętego zestawu danych. Jednak same tabele i widoki nie będą już widoczne.
Widoki z usuniętego zbioru danych możesz znaleźć według nazwy, wyszukując w BigQuery:

Listy tabel nie można znaleźć poprzez wyszukiwanie, ponieważ nazwy tabel nie mają wspólnego składnika.
Aby znaleźć nazwę tabeli z usuniętego zestawu danych, użyj następującego zapytania SQL. W zapytaniu określ okres, w którym można modyfikować tabele (czas_tworzenia BETWEEN). W rezultacie zapytanie zwróci tabele, w których dokonano zmian w jakim okresie. Będą to tabele z usuniętego zbioru danych.
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)
W wyniku prośby otrzymasz następujące informacje:
- zapytanie — tekst zapytania, które spowodowało zmianę w destination_table
- user _email — użytkownik, który rozpoczął żądanie aktualizacji tablicy_docelowej
- destination_table — tabela, która została zaktualizowana
- job_ids — liczba uruchomień zapytania w określonym przedziale czasu (czas_tworzenia BETWEEN …)
- lastUpdateDate — czas ostatniego uruchomienia zapytania (MAX(czas_tworzenia) AS lastUpdateDate)
Dwadzieścia cztery godziny po usunięciu zestawu danych możesz utworzyć nowy zestaw danych o tej samej nazwie i rozpocząć przywracanie tabel i widoków.
Co zrobić, aby zapobiec podobnym problemom w przyszłości?
- Włącz zbieranie dzienników w projekcie Google BigQuery, gdy zaczniesz z nim pracować.
- Nie nazywaj tabeli i nie wyświetlaj tego samego, co zestaw danych.
- Dokładnie sprawdź nazwę dowolnej tabeli, którą chcesz usunąć z Google BigQuery.
- Usuwaj tabele za pomocą zapytań, a nie interfejsu użytkownika.
- Dodaj typ jednostki do nazw zestawów danych, tabel i widoków. Na przykład:
- OWOXBI_report_dataset
- OWOXBI_report_table
- OWOXBI_report_view
Możesz usunąć tabelę za pomocą zapytania:
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
Możesz również usunąć widok za pomocą zapytania:
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
Co zrobić, aby zmniejszyć skalę problemu, jeśli powtórzy się?
- Nie zmieniaj zapytań w Harmonogramie i Google Apps Script; następnego dnia przywróć wszystkie widoki i tabele, po czym Schedule i Google Apps Script będą działać poprawnie.
- Jeśli widok lub tabela były zaangażowane w konfigurowanie modelu atrybucji, musisz ponownie rozpocząć obliczanie atrybucji po przywróceniu danych do poprzedniej lokalizacji.
Przydatne linki na ten temat
Przywracanie usuniętych tabel
Usuwanie tabeli
Zarządzanie widokami
Jak natychmiast odzyskać tabelę w Google BigQuery

Nasi klienci
rosnąć 22% szybciej
Rozwijaj się szybciej, mierząc, co najlepiej sprawdza się w Twoim marketingu
Przeanalizuj swoją skuteczność marketingową, znajdź obszary wzrostu, zwiększ ROI
Pobierz demo