【问题标题】:athena concatenate multiple columns into one json stringathena 将多列连接成一个 json 字符串
【发布时间】:2021-03-17 21:14:47
【问题描述】:

我的要求:

我有一个名为 students 的表,使用此架构

-----------------------
| id name age city   |
-----------------------
| 1  a     12  city1 |
| 2  b     13  city2 |
| 3  c     14  city3 |
| 4  d     15  city4 |
----------------------

我想要一个返回以下结果的查询

---------------------------------------
 id               details            
---------------------------------------
 1  {name: a , age: 12 , city:city1} 
 2  {name: b , age: 13 , city:city2} 
 3  {name: c , age: 14 , city:city3} 
 4  {name: d  ,age: 15 , city:city4} 
---------------------------------------

我尝试了以下查询

select id,(name,age,city) as details from students

并收到此输出

---------------------------------------
 id               details            
---------------------------------------
 1  {field0: a , field1: 12 , field2:city1} 
 2  {field0: b , field1: 13 , field2:city2} 
 3  {field0: c , field1: 14 , field2:city3} 
 4  {field0: d  ,field1: 15 , field2:city4} 
---------------------------------------

谁能告诉我如何摆脱这个field0,field1,field1, 而是使用实际的列名?

【问题讨论】:

    标签: sql postgresql amazon-web-services amazon-athena


    【解决方案1】:

    首先,这些并不是我在 Postgres 中得到的结果。其次,您似乎想要返回一个 JSON 对象。所以一种方法是:

    select id, json_object( array['name', 'age', 'city'], array[name, age::text, city])
    from students;
    

    Here 是一个 dbfiddle。

    【讨论】:

      【解决方案2】:

      由于您没有指定数据库引擎,而是为 Amazon Athena 添加了标签,因此这里是 Athena 的语法:

      WITH students AS
      ( SELECT 1 as id, 'a' as name, 12 as age, 'city1' as city UNION ALL 
        SELECT 2, 'b', 13, 'city2' UNION ALL
        SELECT 3, 'c', 14, 'city3' UNION ALL
        SELECT 4, 'd', 15, 'city4')
      
      SELECT CAST(MAP_FROM_ENTRIES(
          ARRAY[
            ('name', name), 
            ('age', cast(age as varchar)), 
            ('city', city)
          ]) AS JSON) as details
      FROM students
      

      【讨论】:

        猜你喜欢
        • 2012-02-02
        • 1970-01-01
        • 2014-03-15
        • 2017-05-14
        • 2013-05-15
        • 1970-01-01
        • 2018-06-22
        • 2014-04-19
        相关资源
        最近更新 更多