在 BigQuery/SQL 中展开数组值
Posted
技术标签:
【中文标题】在 BigQuery/SQL 中展开数组值【英文标题】:Unwind array values in BigQuery/SQL 【发布时间】:2016-06-22 09:04:59 【问题描述】:我试图将数组值展开到 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
【问题讨论】:
你看过FLATTEN吗? 这里是链接:cloud.google.com/bigquery/query-reference#from 【参考方案1】:使用standard 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 上面指出的,您也可以在旧版 SQL 中使用 FLATTEN
运算符完成此操作,尽管语法不同。
【讨论】:
【参考方案2】:如果您绑定到 BigQuery Legacy 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
【讨论】:
以上是关于在 BigQuery/SQL 中展开数组值的主要内容,如果未能解决你的问题,请参考以下文章