在 BigQuery 中转置数组
Transpose arrays in BigQuery
在 BigQuery 中,我如何转置这些记录:
fruit | color | aA | aB | aC
--------+--------+------------+------------+------------
apple | green | [10,11] | [12,13] | [14,15]
orange | orange | [20,21,22] | [23,24,25] | [26,27,28]
至:
fruit | color | A | B | C
--------+--------+----+----+----
apple | green | 10 | 12 | 14
apple | green | 11 | 13 | 15
orange | orange | 20 | 23 | 26
orange | orange | 21 | 24 | 27
orange | orange | 22 | 25 | 28
在 PrestoDB/Athena 或 PostgreSQL 中,我会使用带多个参数的 UNNEST,但 BigQuery 不支持它。
CROSS JOIN UNNEST(aA, aB, aC) AS t(A, B, C)
注意:
- 一行中的所有数组长度相同;
- 记录之间的数组长度可以不同。
暂存器:
#standardSQL
WITH arrays AS (
SELECT 'apple' AS fruit, 'green' AS color, [10,11] AS aA, [12,13] AS aB, [14,15] AS aC UNION ALL
SELECT 'orange' AS fruit, 'orange' AS color, [20,21,22] AS aA, [23,24,25] AS aB, [26,27,28] AS aC
)
SELECT * FROM arrays
提前致谢。
您可以在第一个数组上使用 WITH OFFSET,然后在另外两个数组上使用方括号运算符:
#standardSQL
WITH arrays AS (
SELECT 'apple' AS fruit, 'green' AS color, [10,11] AS aA, [12,13] AS aB, [14,15] AS aC UNION ALL
SELECT 'orange' AS fruit, 'orange' AS color, [20,21,22] AS aA, [23,24,25] AS aB, [26,27,28] AS aC
)
SELECT * EXCEPT(aA, aB, aC),
aB[OFFSET(off)] AS B, aC[OFFSET(off)] AS C
FROM arrays
CROSS JOIN UNNEST(aA) AS A WITH OFFSET off;
我已将反馈转达给我们的技术作者,以使此语法更易于查找并提供示例。
在 BigQuery 中,我如何转置这些记录:
fruit | color | aA | aB | aC
--------+--------+------------+------------+------------
apple | green | [10,11] | [12,13] | [14,15]
orange | orange | [20,21,22] | [23,24,25] | [26,27,28]
至:
fruit | color | A | B | C
--------+--------+----+----+----
apple | green | 10 | 12 | 14
apple | green | 11 | 13 | 15
orange | orange | 20 | 23 | 26
orange | orange | 21 | 24 | 27
orange | orange | 22 | 25 | 28
在 PrestoDB/Athena 或 PostgreSQL 中,我会使用带多个参数的 UNNEST,但 BigQuery 不支持它。
CROSS JOIN UNNEST(aA, aB, aC) AS t(A, B, C)
注意:
- 一行中的所有数组长度相同;
- 记录之间的数组长度可以不同。
暂存器:
#standardSQL
WITH arrays AS (
SELECT 'apple' AS fruit, 'green' AS color, [10,11] AS aA, [12,13] AS aB, [14,15] AS aC UNION ALL
SELECT 'orange' AS fruit, 'orange' AS color, [20,21,22] AS aA, [23,24,25] AS aB, [26,27,28] AS aC
)
SELECT * FROM arrays
提前致谢。
您可以在第一个数组上使用 WITH OFFSET,然后在另外两个数组上使用方括号运算符:
#standardSQL
WITH arrays AS (
SELECT 'apple' AS fruit, 'green' AS color, [10,11] AS aA, [12,13] AS aB, [14,15] AS aC UNION ALL
SELECT 'orange' AS fruit, 'orange' AS color, [20,21,22] AS aA, [23,24,25] AS aB, [26,27,28] AS aC
)
SELECT * EXCEPT(aA, aB, aC),
aB[OFFSET(off)] AS B, aC[OFFSET(off)] AS C
FROM arrays
CROSS JOIN UNNEST(aA) AS A WITH OFFSET off;
我已将反馈转达给我们的技术作者,以使此语法更易于查找并提供示例。