2016-02-15 12 views
6

Przypadkowo dodałem niewłaściwą kolumnę do mojego schematu tabeli BigQuery.BigQuery - usuń nieużywaną kolumnę ze schematu

Zamiast przeładowywania pełną tabelę (miliony wierszy), chciałbym wiedzieć, czy po to możliwe:

  • usunąć złych wierszy (wiersze z wartościami zawiera niewłaściwą kolumna), uruchamiając „wybierz * "zapytanie do tabeli z jakimś filtrem i zapisanie wyniku do tej samej tabeli.
  • usunięcie (teraz) nieużywanej kolumny.

Czy ta funkcja (lub podobna) jest obsługiwana? Prawdopodobnie funkcja "zapisz wynik do tabeli" może mieć opcję "Schemat kompaktowy".

Odpowiedz

0

Zapisuj wyniki w tabeli to Twoja droga. Wypróbuj duży stół z wybranymi kolumnami, które Cię interesują, i możesz zastosować ograniczenie, aby było małe.

+0

W jaki sposób ograniczyłoby to pomoc w uproszczeniu schematu (a nie wielkości tabeli)? – Lior

+0

Limit pomoże to przetestować. Możesz wybrać w kolumnie, którą chcesz zachować. – Pentium10

3

Jeśli tabela nie składa się z rekordowych powtarzanych pól/typ - Twój prosta opcja:

  1. Wybierz poprawnych kolumn natomiast filtrowanie złe zapisy do nowej tabeli temp

    SELECT < listę oryginału kolumny>
    OD YourTable
    GDZIE < filtr, aby usunąć złe wpisy tutaj> Strona

    Napisz wyżej tabeli temp - YourTable_Temp

  2. Zrób kopię zapasową "złamanym" Tabela - YourTable_Backup

  3. Usuń YourTable
  4. Kopiowanie YourTable_Temp do YourTable
  5. Sprawdź, czy wszystko wygląda jak oczekiwano, a jeśli tak - pobranie Pozbądź się tabel zastępczych i zapasowych

Uwaga: koszt powyżej # 1 jest dokładnie taki sam, jak w przypadku pierwszego punktu w pytaniach tację. Reszta działań (kopia) są wolne

W przypadku jeśli powtarzane/pola Record - nadal może wykonywać powyżej planu, ale w # 1 trzeba będzie korzystać z niektórych BigQuery User-Defined Functions mieć właściwego schematu produkcji
Ty można zobaczyć poniżej na przykładach - Oczywiście będzie to wymagało trochę więcej dev - ale jeśli jesteś w sytuacji krytycznej - to powinno działać dla ciebie

Create a table with Record type column
create a table with a column type RECORD

mam nadzieję, że w pewnym momencie Google BigQuery zespół będzie dodaj lepszą obsługę takich przypadków jak Twoja, gdy potrzebujesz mani pulate i output powtarzają/zapisują dane, ale na razie jest to najlepsze obejście, jakie znalazłem - przynajmniej dla siebie

+0

Mam wiele powtarzających się/rekordowych pól. Dlatego używam opcji "wybierz *" i unikaj używania "spłaszczania wyników", aby zachować dokładny schemat podczas zapisywania do nowej tabeli. – Lior

+0

dodał więcej do mojej odpowiedzi na temat powtarzania/nagrywania. Jeśli uznasz to za przydatne, ale będziesz potrzebować pomocy w jego realizacji - opublikuj kolejne pytanie ze wszystkimi istotnymi szczegółami, a ja z przyjemnością Ci w tym pomogę. –

0

5 kroków w pierwszej odpowiedzi powyżej powinno działać poprawnie. Jako szczegół, powinieneś określić allowLargeResults: true i flattenSchema: false w punkcie 1. Ustawienie parametru allowLargeResults na true pozwala na wyniki zapytania większe niż 128 MB.Ustawienie parametru flattenSchema: false zatrzymuje spłaszczanie powtarzających się pól w wyniku.

Jako dodatkowe, wyniki zapytania mogą być zapisane w początkowej tabeli z parametrem writeDisposition ustawionym na writeDisposition: WRITE_TRUNCATE.