在 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 中展开数组值的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery SQL:使用数组?

BigQuery SQL 中未嵌套数组的字符串函数

在 BigQuery SQL 中压缩表数组行

Google BigQuery SQL:从 JSON(列表和数组)中提取数据到列中

BigQuery/SQL - 特定变体的拆分值

BigQuery/SQL:如何使用列值作为列名? [复制]