Jak przywrócić dane przypadkowo usunięte z Google BigQuery

Opublikowany: 2022-04-12

Czy 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?

  1. Włącz zbieranie dzienników w projekcie Google BigQuery, gdy zaczniesz z nim pracować.
  2. Nie nazywaj tabeli i nie wyświetlaj tego samego, co zestaw danych.
  3. Dokładnie sprawdź nazwę dowolnej tabeli, którą chcesz usunąć z Google BigQuery.
  4. Usuwaj tabele za pomocą zapytań, a nie interfejsu użytkownika.
  5. Dodaj typ jednostki do nazw zestawów danych, tabel i widoków. Na przykład:
    1. OWOXBI_report_dataset
    2. OWOXBI_report_table
    3. 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