BigQuery - 将结果转换为 JSON 数组

Posted

技术标签:

【中文标题】BigQuery - 将结果转换为 JSON 数组【英文标题】:BigQuery - Convert result into array of JSONs 【发布时间】:2019-12-16 15:10:13 【问题描述】:

假设我有以下输入数据:

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 获得理想结果的任何帮助或提示,我们将不胜感激。

【问题讨论】:

【参考方案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

【讨论】:

或上面SELECT id, TO_JSON_STRING(ARRAY_AGG((val1,val2))) json FROM data GROUP BY id的简洁版

以上是关于BigQuery - 将结果转换为 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 将 bigquery 返回的结果转换为 Json 格式?

有没有办法使用 Python 将 bigquery 返回的结果转换为 Json 格式?

“将循环结构转换为 JSON”来自 Cloud Function NodeJs 的 BigQuery 插入

在 BigQuery 中,将对象的字符串化数组转换为非字符串化

将 bigquery json 字符串转换为列

Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage