在 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;

我已将反馈转达给我们的技术作者,以使此语法更易于查找并提供示例。