Извлечение значений объекта из JSON в Афине / Престо - PullRequest
1 голос
/ 31 января 2020

У меня есть столбец с JSON объектами. Мне нужно извлечь все значения из этих объектов. Проблема в том, что ключи не исправлены и содержат некоторые идентификаторы, поэтому я не могу извлечь значения по точному значению ключа. Вот пример:

{
    "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 и $.* не работает. Есть ли обходной путь?

1 Ответ

4 голосов
/ 31 января 2020

Вы можете привести 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"}]
...