【问题标题】:BigQuery - Convert result into array of JSONsBigQuery - 将结果转换为 JSON 数组
【发布时间】: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 获得理想结果的任何帮助或提示,我们将不胜感激。

【问题讨论】:

    标签: json google-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的简洁版
    猜你喜欢
    • 2017-11-22
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2015-01-07
    • 2021-08-02
    • 2017-06-05
    • 2020-08-22
    相关资源
    最近更新 更多