【问题标题】:Extracting messy JSON values in PrestoDB在 PrestoDB 中提取凌乱的 JSON 值
【发布时间】:2018-09-26 20:56:18
【问题描述】:

我在 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

但是查询没有返回任何内容。我究竟做错了什么?

【问题讨论】:

    标签: sql presto


    【解决方案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 字符串的表示法。

    【讨论】:

    • 例如,$..* 给了我错误(无效的 json 路径),至少在通过 Amazon Athena 使用时是这样。
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多