在 PrestoDB 中提取凌乱的 JSON 值
Extracting messy JSON values in PrestoDB
我在 PrestoDB table 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}"
我的objective是只获取包含键baz
的行的值
但是,以下方法不起作用:
SELECT
JSON_EXTRACT_SCALAR(mycolumn, '$["baz"]')
from mytable
WHERE JSON_EXTRACT_SCALAR(mycolumn, '$["baz"]') IS NOT NULL
ORDER BY id
DESC
应该return
456
456
但是查询 return 什么也没有。我究竟做错了什么?
我认为您的语法不正确。试试这个:
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 字符串的表示法。
我在 PrestoDB table 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}"
我的objective是只获取包含键baz
的行的值
但是,以下方法不起作用:
SELECT
JSON_EXTRACT_SCALAR(mycolumn, '$["baz"]')
from mytable
WHERE JSON_EXTRACT_SCALAR(mycolumn, '$["baz"]') IS NOT NULL
ORDER BY id
DESC
应该return
456
456
但是查询 return 什么也没有。我究竟做错了什么?
我认为您的语法不正确。试试这个:
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 字符串的表示法。