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

Posted

技术标签:

【中文标题】从 BigQuery 中的查询返回一个数组(重复字段)【英文标题】:Return an array(Repeated Field) from a query in BigQuery 【发布时间】:2016-12-12 22:27:12 【问题描述】:

我是 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 作为字符串获取。

我需要将此数据输出到新表中,并以 BCats 为重复。

请帮忙。

预览:

【问题讨论】:

【参考方案1】:

试试下面。注意:在 Web UI 中,您不仅需要设置 Destination Table,还需要设置/选中 Allow Large Results 复选框并取消选中 Flatten Results 复选框

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

【讨论】:

【参考方案2】:

您应该改用standard SQL。如果您熟悉旧版 SQL,则有一个 migration guide 讨论了两种方言之间的差异。启用标准 SQL 后(取消选中 UI 中“显示选项”下的“使用旧版 SQL”),您可以运行例如:

WITH my_table AS (
  SELECT 'ABCD' AS ID, ['BCat25', 'BCat24', 'BCat23'] AS BCats UNION ALL
  SELECT 'PQRS', ['BCat8', 'BCat9'] UNION ALL
  SELECT 'ABCD', ['BCat23', 'BCat25', 'BCat24'] UNION ALL
  SELECT 'MNOP', ['BCat12', 'BCat13'] UNION ALL
  SELECT 'PQRS', ['BCat8', 'BCat9']
)
SELECT
  ID,
  ARRAY_AGG(DISTINCT BCat) AS BCats
FROM my_table, UNNEST(BCats) AS BCat
GROUP BY ID;

【讨论】:

以上是关于从 BigQuery 中的查询返回一个数组(重复字段)的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 从数组中删除重复项

从 BigQuery 中的数组中删除重复项

从 BigQuery 中的重复嵌套列中获取参数数组

具有数组字段的 bigquery 表中的不同行

BigQuery - 具有范围聚合的查询中的重复行

在 BigQuery 中查询双嵌套数组 [重复]