Выберите определенные значения из столбца JSON в Presto

У меня есть столбец JSON points типа VARCHAR в таблице, которую я хочу проанализировать в Presto. Например:

points = {"0": 0.2, "1": 1.2, "2": 0.5, "15": 1.2, "20": 0.7}

Я хочу выбрать только значения для ключей "0", "2" and "20". Как использовать НЕСКОЛЬКО функциональных возможностей Presto для их получения. До сих пор я делал следующее:

select t.value from myTable CROSS JOIN UNNEST(points) AS t(key, value) limit 1

Но это дает эту ошибку:

Cannot unnest type: varchar

Update:

Я выполнил следующий запрос и получил результат, но он возвращает одну случайную пару ключ-значение из JSON, тогда как мне нужны определенные ключи.

select key, value from myTable CROSS JOIN UNNEST(SPLIT_TO_MAP(points, ',', ':')) AS t(key, value) limit 1


person Hellboy    schedule 27.06.2017    source источник


Ответы (2)


Вы можете разложить массив или карту. Итак, сначала вам нужно преобразовать строку JSON в MAP:

CAST(json_parse(str) AS MAP<BIGINT, DOUBLE>)

Вот пример:

presto> select tt.value
     -> from (VALUES '{"0": 0.2, "1": 1.2, "2": 0.5, "15": 1.2, "20": 0.7}') as t(json)
     -> CROSS JOIN UNNEST(CAST(json_parse(json) AS MAP<BIGINT, DOUBLE>)) AS tt(key, value)
     -> ;
 value
-------
   0.2
   1.2
   1.2
   0.5
   0.7
(5 rows)
person FreePeter    schedule 05.08.2017