代码之家  ›  专栏  ›  技术社区  ›  Katie

如何在BigQuery/GoogleSQL中将键值数组转换为列?

  •  1
  • Katie  · 技术社区  · 4 年前

    我在BigQuery中有一个数组,如下所示:

    SELECT params FROM mySource;

    [
      {
        key: "name",
        value: "apple"
      },{
        key: "color",
        value: "red"
      },{
        key: "delicious",
        value: "yes"
      }
    ]
    

    看起来是这样的:

    params
    [{ key: "name", value: "apple" },{ key: "color", value: "red" },{ key: "delicious", value: "yes" }]

    名称 颜色 美味的
    苹果 红色 对

    SELECT 
             (
               SELECT p.value
               FROM UNNEST(params) AS p
               WHERE p.key = "name"
             ) as name,
             (
               SELECT p.value
               FROM UNNEST(params) AS p
               WHERE p.key = "color"
             ) as color,
             (
               SELECT p.value
               FROM UNNEST(params) AS p
               WHERE p.key = "delicious"
             ) as delicious,
    FROM mySource;
    

    但我想知道是否有办法做到这一点 没有 手动指定密钥名称

    谢谢

    1 回复  |  直到 4 年前
        1
  •  1
  •   Mikhail Berlyant    4 年前

    考虑下面的方法

    select * except(id) from (
      select to_json_string(t) id, param.* 
      from mySource t, unnest(parameters) param
    )
    pivot (min(value) for key in ('name', 'color', 'delicious'))    
    

    如果应用于问题中的样本数据,输出如下

    enter image description here

    如您所见,您仍然需要指定键名,但整个查询更简单、更易于管理