2014-12-18 11 views

Odpowiedz

22

Odzyskiwanie w BigQuery jest możliwe dzięki dekoratorom tabel i migawek. Oznacza to, że można skopiować migawkę tabeli przed usunięciem tabeli.

Istnieje kilka zastrzeżeń:

  1. Musisz to zrobić w dwóch etapach; najpierw skopiuj migawkę tabeli do drugiej tabeli. Następnie możesz skopiować tę drugą tabelę z powrotem do pierwotnej lokalizacji.
  2. Usunąć można tylko tabele, które zostały usunięte w ciągu ostatnich dni.
  3. Jeśli odtworzyłeś tabelę o tej samej nazwie, możesz nie odzyskać starej.

Oto przykład z użyciem bq, ale można zrobić to samo z interfejsem internetowym BigQuery.

Najpierw stwórzmy atrapę zestawu danych BigQuery i stół, który mamy zamiar usunąć:

$ bq mk -d dataset1 
Dataset 'helixdata2:dataset1' successfully created. 
$ bq query --destination_table=dataset1.table1 "SELECT 17 as a" 
Waiting on bqjob_ra0dedbee5cb4228_0000014a5af133d6_1 ... (0s) 
Current status: DONE 
+----+ 
| a | 
+----+ 
| 17 | 
+----+ 

Teraz chwycić aktualny uniksowy znacznik czasu od chwili, gdy stół był żywy.

$ date +%s 
1418864998 

Zauważ, że ten czas jest w sekundach, potrzebujemy milisekund.

Usuń tabelę „przypadkowo”

$ bq rm dataset1.table1 
rm: remove table 'helixdata2:dataset1.table1'? (y/N) y 

Teraz możemy przywrócenie usuniętej tabeli kopiując migawkę:

$ bq cp [email protected] dataset1.temp 
Waiting on bqjob_r4d8174e2e41ae73_0000014a5af2a028_1 ... (0s) 
    Current status: DONE  
Tables 'helixdata2:[email protected]' successfully copied to  
    'helixdata2:dataset1.temp' 

(pamiętać, że mnoży czas przez 1000, ponieważ chcemy milisekund) ten skopiowano starą migawkę tabeli do dataset1.temp. Skopiujmy go z powrotem do starej lokalizacji, a następnie usuńmy tabelę tymczasową.

$ bq cp dataset1.temp dataset1.table1 
Waiting on bqjob_r3c0bb9302fb81d59_0000014a5af2dc7b_1 ... (0s) 
    Current status: DONE  
Tables 'helixdata2:dataset1.temp' successfully copied to 
    'helixdata2:dataset1.table1' 
$ bq rm dataset1.temp 
rm: remove table 'helixdata2:dataset1.temp'? (y/N) y 

Teraz upewnij się, że stół został przywrócony:

$ bq query "select * from dataset1.table1" 
Waiting on bqjob_r5967bea49ed9e97f_0000014a5af34dec_1 ... (0s) 
    Current status: DONE 
+----+ 
| a | 
+----+ 
| 17 | 
+----+ 
+0

Tylko trochę więcej, jeśli masz ten błąd „błąd w działaniu Query: Nie można rozpocząć pracę bez id projektu”. Dodaj swój identyfikator projektu. Dla powłoki bq: - [bq shell --project_id = myprojectid] – shiva

+0

@ Jordan Tigani Czy mogę uzyskać migawkę zestawu danych? Chcę wiedzieć, które tabele są obecne w określonym znaczniku czasu, ponieważ nie jestem pewien, które tabele usunąłem przypadkowo. – shiva

+1

Ważna uwaga: nie można * przywrócić usuniętych tabel, jeśli zostały one odtworzone. Oznacza to, że tego odzyskiwania migawki nie można używać do odzyskiwania po błędach w połączeniu z funkcją tworzenia tabel szablonów "twórz tabele na żądanie podczas przesyłania strumieniowego". Dowiedzieliśmy się tego na własnej skórze: przez przypadek usunęliśmy tabelę produkcyjną, która została natychmiast ponownie utworzona, abyśmy nie mogli odzyskać danych z migawki. –