我有一个表,其中存储了来自Json对象的一些信息:
表:
investment
unit(string)
data(string)
如果运行查询SELECT * FROM "db"."investment" limit 10;
我得到了以下结果:
Unit Data
CH [{"from":"CH","when":"2021-02-16","who":"pp@gmail.com"}]
AB [{"from":"AB","when":"2020-02-16","who":"jj@gmail.com"}]
现在,我运行以下基本查询在Json嵌套对象中返回值:
SELECT json_extract_scalar(Data, '$[0].who') email FROM "db"."investment";
我得到了以下结果:
email
jj@gmail.com
pp@gmail.com
如何使用过滤此查询WHERE
子句只返回一个值:
我已经尝试过了,但显然它不能像普通的包含行和列的SQL表那样工作:
SELECT json_extract_scalar(Data, '$[0].who') email FROM "db"."investment" WHERE email = "pp@gmail.com";
有什么帮助吗?
发布于 2021-02-24 13:10:28
你的问题似乎有几个打字错误。
Date
在Unit Date
可能应该是Data
key
指的是。也许你的意思是Data
另外,请注意,athena不区分大小写,列名被转换为小写(即使您引用它们)。中的json文档中提取电子邮件的完整表达式。where
子句。查询的其余部分无法访问定义的列别名。
下面是一个自包含的示例:
with test (unit, data) as (
values
('CH', JSON '[{"from":"CH","when":"2021-02-16","who":"pp@gmail.com"}]'),
('AB', JSON '[{"from":"AB","when":"2020-02-16","who":"jj@gmail.com"}]')
)
select json_extract_scalar(data, '$[0].who') email
from test
where json_extract_scalar(data, '$[0].who') = 'pp@gmail.com';
outputs:
| email |
+--------------+
| pp@gmail.com |
https://stackoverflow.com/questions/66344925
复制相似问题