从 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 中的查询返回一个数组(重复字段)的主要内容,如果未能解决你的问题,请参考以下文章