2015-08-11 17 views
5

Ładowanie plików CSV do BigQuery. Każdy plik tworzy oddzielną tabelę.BigQuery: TABLE_QUERY ale kolumny różnią się między tabelami

Kiedy możemy wyciągnąć z tych tabel, robimy to głównie z tabeli zapytania liek tak:

SELECT foo, bar 
FROM TABLE_QUERY(name_stub,'table_id CONTAINS "_something" and msec_to_timestamp(creation_time) > date_add(current_timestamp(), -90, "day")')); 

Teraz Dodaliśmy nowe pola do nowszych plików. Więc zamiast tylko pól "foo" i "bar" mamy teraz dodatkowo "baz".

Po uruchomieniu następującego zapytania pojawia się błąd, że pole "baz" nie istnieje na jednej ze starszych tabel.

SELECT foo, bar, baz 
FROM TABLE_QUERY(name_stub,'table_id CONTAINS "_something" and msec_to_timestamp(creation_time) > date_add(current_timestamp(), -90, "day")')); 

Czy istnieje sposób, aby wybrać "baz" i po prostu mieć wartość domyślną dla tabel, które nie mają kolumny?

Odpowiedz

1

Aktualizacja: Ten problem został rozwiązany.

BigQuery obsługuje teraz tabelę TABLE_DATE_RANGE nad tabelami, w których podzestaw tabel ma szerszy schemat. Brakujące kolumny powinny pojawić się jako NULL w tabelach, w których brakuje kolumny.

https://code.google.com/p/google-bigquery/issues/detail?id=439

+0

wspaniałą wiadomość! przykład w powyższym linku jest dość uproszczony - czy dotyczy to zapisów, powtórzeń itp.? –

+0

Całkiem fajnie. Wspaniale, że to jest adresowane! –

2

Dodawanie nowych kolumn do tabeli jest możliwe (wszystkie dane historyczne będą automatycznie miały wartości NULL), ale codziennie tworzysz nową tabelę - a TABLE_QUERY to tylko skrót do UNION. Jedyny pomysł, jaki mam, to utworzenie widoku, który doda kolumnę "baz" do starych tabel. Wtedy powinieneś móc używać TABLE_QUERY w takich widokach i nowszych tabelach.

+0

bardzo dobrze, myślę, najczystsze podejście byłoby utworzyć widoki, dzięki –

1

Rozwiązaniem tego problemu jest odpowiedź na this question.

W moim przypadku byłoby:

SELECT foo, bar, coalesce(baz,0) 
FROM TABLE_DATE_RANGE(mydataset.le_table,<beginning of time>,<day before column add>), 
    TABLE_DATE_RANGE(mydataset.le_table,<day of column add>,<today>) 
Powiązane problemy