2016-10-02 23 views
5

Załóżmy, że otrzymałem tabelę tymczasową z jednym polem to tablica, jak zmienić ją w wiele wierszy?Jak spłaszczyć tablicę za pomocą funkcji UNNEST lub innych funkcji?

Z PostgreSQL można to zrobić z UNNEST http://sqlfiddle.com/#!15/21673/19

WITH x AS (SELECT ARRAY[1,3,2] AS arr) 

SELECT UNNEST(arr) FROM x 

Run to samo zapytanie w BigQuery mówi Błąd składni: Nieoczekiwany UNNEST kluczowe w [3, 8]

wydaje w BigQuery UNNEST można umieścić tylko po klauzula FROM,

Następnie próbowałem te:

WITH x AS (SELECT ARRAY[1,3,2] AS arr) 

SELECT * FROM UNNEST(x) 

ten mówi: Nie można zastosować UNNEST na stole: x pod adresem [3:22]; czy to

WITH x AS (SELECT ARRAY[1,3,2] AS row) 

SELECT * FROM UNNEST(x.arr) 

mówi UNNEST nie mogą być stosowane w tabeli: x.arr na [3:22]

BTW, prąd chwilowy tabeli x wygląda następująco:

WITH x AS (SELECT ARRAY[1,2] AS row) 

SELECT * FROM x 
EOF 

+--------------+ 
|  row  | 
+--------------+ 
| [u'1', u'2'] | 
+--------------+ 

podczas gdy spodziewam się przekształcić go w wiersze wartości:

+-----+ 
| row | 
+-----+ 
| 1 | 
| 2 | 
+-----+ 

https://cloud.google.com/bigquery/sql-reference/arrays

+2

nikogo z Google CA n odpowiedź dlaczego nie obsługuje standardowego stylu PostgreS? "SELECT UNNEST (ARRAY [1,3,2])" –

Odpowiedz

3

Można zrobić takie spłaszczenie wykonując CROSS JOIN elementów arr z każdego rzędu x, tj

WITH x AS (SELECT ARRAY[1,3,2] AS arr) 
SELECT arr FROM x, x.arr 

lub można napisać to bardziej wyraźnie jak CROSS JOIN zamiast używania przecinek

WITH x AS (SELECT ARRAY[1,3,2] AS arr) 
SELECT arr FROM x CROSS JOIN x.arr 
5

Jeszcze inna wersja - z "wyraźną" UNNEST zaangażowany

WITH x AS (SELECT ARRAY[1,3,2] AS arr) 
SELECT arr_item FROM x, UNNEST(arr) as arr_item 
+0

obie odpowiedzi tutaj działają jako obejście; ale każdy wie, dlaczego nie obsługuje standardu Postgres 'SELECT UNNEST (...)' dlaczego nie pozwolić, aby funkcja UNNEST była użyteczna gdziekolwiek, –

+0

, ale jeśli nikt z Google nie może odpowiedzieć tutaj; Czuję, że to 'FROM x, UNNEST (arr) as arr_item' jest bardziej intuicyjne w zrozumieniu –