2016-10-02 79 views
5

假設我得到一個帶有一個字段的臨時表是一個數組,如何將它變成多行?如何用UNNEST或任何其他函數平鋪數組?

在PostgreSQL這可以用UNNEST http://sqlfiddle.com/#!15/21673/19

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

SELECT UNNEST(arr) FROM x 

運行BigQuery中相同的查詢說語法錯誤進行:[:8 3]

似乎BigQuery中的意外 關鍵字UNNEST UNNEST只能放在FROM子句之後,

然後我試過這些:

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

SELECT * FROM UNNEST(x) 

這一說UNNEST不能應用在一張桌子上:x在[3:22];或該

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

SELECT * FROM UNNEST(x.arr) 

UNNEST不能在桌子上施加:在[3:22]

順便說一句,電流臨時表x.arr X看起來像這樣:

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

SELECT * FROM x 
EOF 

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

而我期待將它變成有價值的行:

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

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

+2

人n回答爲什麼不支持Postgres風格標準'SELECT UNNEST(ARRAY [1,3,2])' –

回答

3

您可以通過執行與x的每一行的編曲元素的CROSS JOIN做這樣的扁平化,即

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

,或者你可以更明確地作爲CROSS JOIN而不是使用逗號

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

另一個版本 - 以 「明確的」 UNNEST涉及從谷歌CA

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

這兩個答案在這裏作爲解決方法工作;但任何人都知道爲什麼不支持Postgres標準'SELECT UNNEST(...)'爲什麼不允許UNNEST函數在任何地方都可用 –

+0

但是如果Google沒有人可以在這裏回答;我覺得這個'FROM x,UNNEST(arr)as arr_item'更直觀明白 –

相關問題