从BigQuery中的查询返回一个数组(重复字段)

时间:2016-12-12 22:27:12

标签: google-bigquery

我是BigQuery和SQL的新手。我有一张包含以下细节的表格

模式

ID : String : Nullable
BCats : String : Repeated

ID可以重复

预览

   ID           BCats
|-----------------------|
|  ABCD     |   BCat25  | 
|           |   BCat24  |
|           |   BCat23  |
|_______________________|
|  PQRS     |   BCat8   |
|           |   BCat9   |
|_______________________|
|  ABCD     |   BCat23  |
|           |   BCat25  |
|           |   BCat24  |
|_______________________|
|  MNOP     |   BCat12  |
|           |   BCat13  |
|_______________________|
|  PQRS     |   BCat8   |
|           |   BCat9   |
|-----------------------|

我正在尝试使用以下查询基于ID对表进行分组

查询

SELECT BCats,ID
FROM (SELECT (GROUP_CONCAT(BCats)) as BCats,ID
      FROM(
        SELECT
        UNIQUE(BCats) as BCats,ID FROM
            my_table
        GROUP BY 
          ID
          )
    GROUP BY
          ID
    )

来自JSON格式的查询的输出是

查询输出

{"BCats":"BCat25,BCat24,BCat23","ID":"ABCD"}

{"BCats":"BCat8,BCat9","ID":"PQRS"} 

{"BCats":"BCat12,BCat13","ID":"MNOP"}

我的问题是如何从查询输出数组,如此

期待输出

{"BCats" : ["BCat25","BCat24","BCat23"],"ID":"ABCD"}

目前我将BCats作为String。

我需要将这些数据输出到新表中,并将BCats作为重复。

请帮助。

预览:

2 个答案:

答案 0 :(得分:2)

请尝试以下操作。注意:在网络用户界面中,您不仅需要设置Destination Table,还需要设置/选中Allow Large Results复选框,并取消选中Flatten Results复选框

SELECT NEST(UNIQUE(BCats)) AS BCats, ID 
FROM my_table
GROUP BY ID

答案 1 :(得分:1)

您应该使用standard SQL。如果您熟悉遗留SQL,那么有一个migration guide可以解释两种方言之间的差异。启用标准SQL(取消选中"使用旧版SQL"在"显示选项"在UI中)后,您可以运行例如:

Runnable