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