我在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
但是查询不返回任何内容。我究竟做错了什么?
答案 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字符串的表示法。