sql - 在 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
但是查询什么也不返回。我究竟做错了什么?
解决方案
我认为您的语法不正确。尝试这个:
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 字符串的符号。
推荐阅读
- angular - Angular 6 - html 中的秒数
- ghost-blog - 在作者循环中获取最新帖子
- ios - MapView 委托返回 nil
- xml - 如何修复 Shopware 图像导入错误 - 需要订单号和图像
- javafx - 通过单击或悬停等获取 GridPane 对象中的单元格位置。javafx
- go - 是否有自动检测 pubsub 的新分片的 golang redis 客户端?
- reactjs - 在构造函数中声明从未使用过的 React 道具的正确方法
- javascript - 没被选中的字段怎么取?
- reactjs - 在另一个展示组件中包含一个展示组件是一种反模式吗?
- c# - Unity3D:从 unity 2018.2.5 启动本地文档