Извлечение грязных значений JSON в PrestoDB - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть столбец json в таблице PrestoDB mytable.Строки содержат различное количество пар ключ-значение - иногда ключи присутствуют, а иногда ключи отсутствуют, а иногда JSON, содержащийся в строке, заключен в кавычки, а иногда нет:

SELECT mycolumm from mytable 
ORDER BY id DESC
LIMIT 3


{u'foo': 123,  u'bar': u'abc', u'baz': 456}
{u'bar': u'abc'}
"{u'baz': 456}"

Моя цель - получить только значения строк, которые содержат ключ baz Однако следующий метод не работает:

SELECT
JSON_EXTRACT_SCALAR(mycolumn, '$["baz"]')
from mytable
WHERE JSON_EXTRACT_SCALAR(mycolumn, '$["baz"]') IS NOT NULL
ORDER BY id
DESC

Он должен вернуть

456
456

Но запрос ничего не возвращает.Что я делаю неправильно?

1 Ответ

0 голосов
/ 26 сентября 2018

Я думаю, что ваш синтаксис неверен.Попробуйте это:

   select
   JSON_EXTRACT_SCALAR(mycolumn, '$.baz')
   from mytable
   WHERE JSON_EXTRACT_SCALAR(mycolumn, '$.baz') IS NOT NULL
   ORDER BY ID DESC

Здесь вы можете увидеть, как работает json_path: https://github.com/json-path/JsonPath#path-examples. Это обозначение, которое Presto использует для навигации по строкам json.

...