假设我有以下输入数据:
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获得理想的结果将不胜感激。
请参见以下代码:
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