如何将这个json提取到表中?

时间:2018-06-04 14:15:36

标签: sql json amazon-web-services amazon-redshift

我有一个用json文档填充的sql列,一行用于行:

 [{
    "ID":"TOT",
    "type":"ABS",
    "value":"32.0"
    },

    {
    "ID":"T1",
    "type":"ABS",
    "value":"9.0"
    },

    {
    "ID":"T2",
    "type":"ABS",
    "value":"8.0"
     },

     {
     "ID":"T3",
     "type":"ABS",
     "value":"15.0"
  }]

如何将其转换为表格形式?我尝试使用红移json_extract_path_textJSON_EXTRACT_ARRAY_ELEMENT_TEXT功能,我尝试使用json_eachjson_each_text(在postgres上),但没有得到预期...任何建议?

期望的结果应该如下所示:

T1    T2    T3    TOT
9.0   8.0  15.0   32.0

2 个答案:

答案 0 :(得分:0)

我假设您打印了4行。在postgresql

SELECT this_column->'ID'
FROM   that_table;

将返回带有JSON字符串的列。如果需要文本列,请使用->>。更多信息:https://www.postgresql.org/docs/current/static/functions-json.html

如果你使用的是一些旧的Postgresql(在9.3之前),这会变得更难:)

答案 1 :(得分:0)

您最好的选择是使用COPY from JSON Format。这将直接将JSON加载到普通表格式中。然后,您将其作为普通数据进行查询。

但是,我怀疑您需要通过删除外部[...]方括号以及记录之间的逗号来稍微修改文件的格式,例如:

{
    "ID": "TOT",
    "type": "ABS",
    "value": "32.0"
}
{
    "ID": "T1",
    "type": "ABS",
    "value": "9.0"
}

但是,如果您的数据已加载且无法重新加载数据,则可以将数据提取到新表中,或者将其他列添加到现有表中并使用UPDATE命令将每个字段提取到一个新列中。

或者,最糟糕的情况是,您可以使用JSON Functions中的一个来访问JSON字段中的信息,但这对于大型请求(例如在WHERE子句中)来说效率非常低。