1つのフィールドが配列である一時テーブルを取得するとします。それを複数の行に変換する方法を教えてください。
PostgreSQLでは、これはUNNESTで実行できます http://sqlfiddle.com/#!15/21673/19
WITH x AS (SELECT ARRAY[1,3,2] AS arr)
SELECT UNNEST(arr) FROM x
BigQueryで同じクエリを実行するとと表示されます構文エラー:予期しないキーワードUNNEST at [3:8]
bigQueryでは、UNNESTはFROM句の後にのみ配置できるようです。
それから私はこれらを試しました:
WITH x AS (SELECT ARRAY[1,3,2] AS arr)
SELECT * FROM UNNEST(x)
これはUNNESTをテーブルに適用できないことを示しています:x at [3:22];またはこれ
WITH x AS (SELECT ARRAY[1,3,2] AS row)
SELECT * FROM UNNEST(x.arr)
UNNESTはテーブルに適用できません:x.arr at [3:22]
ところで、現在の一時テーブルxは次のようになります。
WITH x AS (SELECT ARRAY[1,2] AS row)
SELECT * FROM x
EOF
+--------------+
| row |
+--------------+
| [u'1', u'2'] |
+--------------+
私はそれを価値のある行に変えることを期待していますが:
+-----+
| row |
+-----+
| 1 |
| 2 |
+-----+
さらに別のバージョン-「明示的な」UNNESTが関与
WITH x AS (SELECT ARRAY[1,3,2] AS arr)
SELECT arr_item FROM x, UNNEST(arr) as arr_item
Xのすべての行でarrの要素の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