如何在BQ中将多列转换为JSON

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

我的数据如下所示

empid   ename   start_date    end_date      city
101     ravi    10-Jan-2018   11-Mar-2020   New York
102    britney  10-Jul-2016   25-Mar-2021   Los angeles

我想将多列转换为 JSON 格式,如下所示

empid   ename      emp_attributes
101     ravi       {start_date: 10-Jan-2018, end_date: 11-Mar-2020, city: New York}
102     britney    {start_date: 10-Jul-2016, end_date: 25-Mar-2021, city: Los angeles}

您能否建议我如何编写 select 语句以在 BQ 中获得所需的输出

谢谢

sql google-bigquery
2个回答
5
投票

您可以首先使用

STRUCT
将这些属性转换为结构体,然后使用
TO_JSON_STRING

转换为 json

SELECT
    empid,
    ename,
    TO_JSON_STRING(STRUCT(
        start_date,
        end_date,
        city
    )) as emp_attributes
FROM
    my_table

让我知道这是否适合您


2
投票

在许多实际情况下 - 放入 json 的列数远远多于留在 json 之外的列数。在这种情况下,在 to_json_string 函数中输入所有列可能不是最佳体验。

然后考虑以下方法

select empid, ename,
  to_json_string((
    select as struct * except(empid, ename) from unnest([t])
  )) as emp_attributes
from `project.dataset.table` t        

如果应用于您问题中的样本数据 - 输出为

© www.soinside.com 2019 - 2024. All rights reserved.