【问题标题】:Unwind array values in BigQuery/SQL在 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

【问题讨论】:

标签: sql arrays count google-bigquery


【解决方案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    
    

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多