在PrestoDB中提取混乱的JSON值

时间:2018-09-25 02:20:14

标签: sql presto

我在PrestoDB表mytable中有一个json列。这些行包含键值对的不同数量-有时存在键,有时不存在键,有时行中包含的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 :(得分:1)

我认为您的语法不正确。试试这个:

   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字符串的表示法。