BigQuery-将结果转换为JSON数组
假设我有以下输入数据:BigQuery-将结果转换为JSON数组,json,google-bigquery,Json,Google Bigquery,假设我有以下输入数据: 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数组中生成多个结构。 作
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
或更详细版本的上述
选择id,从数据组中按id选择JSON字符串(ARRAY_AGG((val1,val2)))JSON