从 JSON 中提取对象值 Athena/Presto

Extracting object values from JSON in Athena/Presto

我有一列包含 JSON 个对象。我需要从此对象中提取所有值。问题是键不是固定的并且包含一些 id,所以我不能通过精确的键值提取值。这是一个例子:

{
    "1220202132188388": {
        "id": "1220202132188388",
        "date": "2019-04-03"
    },
    "482928839992": {
        "id": "482928839992",
        "date": "2019-04-06"
    }
}

所以我想得到一个数组:

[
  {
    "id": "1220202132188388",
    "date": "2019-04-03"
  },
  {
    "id": "482928839992",
    "date": "2019-04-06"
  }
]

Presto 对 JSONPath 的支持有限,$.* 不起作用。有什么解决方法吗?

您可以将 json 转换为映射并使用 map_values 函数。

select
 map_values(cast(json_parse(c1) as map<varchar, json>)) 
from 
(
    values '{
    "1220202132188388": {
        "id": "1220202132188388",
        "date": "2019-04-03"
    },
    "482928839992": {
        "id": "482928839992",
        "date": "2019-04-06"
    }
}'
) t(c1)
[{"id":"1220202132188388","date":"2019-04-03"}, {"id":"482928839992","date":"2019-04-06"}]