BigQuery-将结果转换为JSON数组

问题描述 投票:0回答:1

假设我有以下输入数据:

id | val1 | val2
 1 |  1v1 |  1v2
 1 |  1v3 |  2v4
 2 |  2v1 |  2v2

我想在输出中实现什么:

id | json
 1 | [{"val1":"1v1","val2":"1v2"}, {"val1":"1v3","val2":"1v4"}]
 2 | [{"val1":"2v1","val2":"2v2"}]

因此所有结果按ID分组,在JSON数组中。每个ID多行会在JSON数组中生成多个结构。第一步,我尝试使用TO_JSON_STRING函数将行分组为JSON,并以如下代码结尾:

WITH Input AS ( 
  SELECT id, val1, val2
  from My_Table
)
SELECT
  t.id,
  TO_JSON_STRING(t) AS json_row
FROM Input AS t

但是它也会将id放入目标JSON中,我想避免这种情况。任何帮助或提示如何从BigQuery获得理想的结果将不胜感激。

json google-bigquery
1个回答
1
投票

请参见以下代码:

with data as (
  select 1 as id, '1v1' as val1, '1v2' as val2 union all 
  select 1, '1v3', '2v4' union all 
  select 2, '2v1', '2v2'
),
grouped as (
  select id, array_agg(struct(val1,val2)) x
  from data
  group by 1
)
select id, to_json_string(x) as json 
from grouped
© www.soinside.com 2019 - 2024. All rights reserved.