[英]Unwind array values in BigQuery/SQL
我试图将数组值展开为BigQuery / PSQL中的不同行。
这就是我现在拥有的::
Col_1 col_2
A array: {1,2,3,4,5}
B array: {1,2,3}
C array: {4,5,6}
我想按如下BigQuery所示进行转换。
A 1
A 2
A 3
A 4
A 5
B 1
B 2
B 3
C 4
C 5
C 6
使用标准SQL (取消选中“显示选项”下的“使用旧版SQL”框),您可以执行以下操作:
WITH MyTable AS (
SELECT 'A' AS Col_1, [1, 2, 3, 4, 5] AS col_2
UNION ALL SELECT 'B', [1, 2, 3]
UNION ALL SELECT 'C', [4, 5, 6])
SELECT Col_1, col_2 FROM MyTable t, t.col_2;
+-------+-------+
| Col_1 | col_2 |
+-------+-------+
| A | 1 |
| A | 2 |
| A | 3 |
| A | 4 |
| A | 5 |
| B | 1 |
| B | 2 |
| B | 3 |
| C | 4 |
| C | 5 |
| C | 6 |
+-------+-------+
此处的“逗号”运算符等效于交叉连接,具有平整重复的效果。 正如Pavan指出的那样,尽管语法不同,您也可以使用FLATTEN
运算符在旧版SQL中完成此操作。
如果您必须使用BigQuery旧版SQL,请尝试以下操作
SELECT col_1, SPLIT(REPLACE(REPLACE(SPLIT(col_2, ':'), '{', ''), '}', ''), ',') AS elem
FROM
(SELECT 'A' AS col_1, 'array: {1,2,3,4,5}' AS col_2),
(SELECT 'B' AS col_1, 'array: {1,2,3}' AS col_2),
(SELECT 'C' AS col_1, 'array: {4,5,6}' AS col_2)
HAVING elem <> 'array'
col_1 elem
A 1
A 2
A 3
A 4
A 5
B 1
B 2
B 3
C 4
C 5
C 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.