Sql 如何在AWS Athena Json查询中使用WHERE子句?

Sql 如何在AWS Athena Json查询中使用WHERE子句?,sql,json,presto,amazon-athena,trino,Sql,Json,Presto,Amazon Athena,Trino,我有一个表,其中存储了Json对象的一些信息: 表: investment unit(string) data(string) 如果运行查询SELECT*FROM“db”。“investment”限制为10我得到了以下结果: Unit Data CH [{"from":"CH","when":"2021-02-16","who":"pp@gmail.com"

我有一个表,其中存储了Json对象的一些信息:

表:

investment
    unit(string)
    data(string)
如果运行查询
SELECT*FROM“db”。“investment”限制为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"}]
email
jj@gmail.com
pp@gmail.com
现在,我运行以下基本查询以返回Json嵌套对象中的值:

SELECT json\u extract\u scalar(数据,$[0].who')来自“db”“investment”的电子邮件

我得到了以下结果:

Unit Data
CH  [{"from":"CH","when":"2021-02-16","who":"pp@gmail.com"}]
AB  [{"from":"AB","when":"2020-02-16","who":"jj@gmail.com"}]
email
jj@gmail.com
pp@gmail.com
如何使用
WHERE
子句筛选此查询以仅返回单个值:

我已经试过了,但显然它不能像普通的SQL表那样使用行和列:

选择json\u extract\u scalar(数据,$[0]。who')从“db”“investment”发送电子邮件,其中电子邮件=”pp@gmail.com";


有什么帮助吗?

您的问题似乎有一些拼写错误

  • 单元日期中的
    日期
    可能应该是
    数据
  • 键所指的是什么。也许你的意思是
    数据
另外,请注意athena不区分大小写,列名转换为小写(即使您引用它们)

这样,您就必须在
where
子句中使用从json文档中提取电子邮件的完整表达式。查询的其余部分无法访问定义的列别名

下面是一个独立的示例:

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 |

我发誓我已经试过了,但现在。。显然我没有。。。。谢谢,伙计,很好用!!