首页 > 解决方案 > 在 PrestoDB 中提取凌乱的 JSON 值

问题描述

我在 PrestoDB 表中有一个 json 列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

但是查询什么也不返回。我究竟做错了什么?

标签: sqlpresto

解决方案


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

   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 字符串的符号。


推荐阅读