【问题标题】:How can use WHERE clause in AWS Athena Json queries?如何在 AWS Athena Json 查询中使用 WHERE 子句?
【发布时间】:2021-05-26 10:05:25
【问题描述】:

我有一个表,其中存储了来自 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";

有什么帮助吗?

【问题讨论】:

    标签: sql json presto amazon-athena trino


    【解决方案1】:

    您的问题似乎有一些错别字。

    • Date in Unit Date 应该是 Data
    • key 指的是什么。也许你的意思是Data

    另外,请注意 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 |
    

    【讨论】:

    • 我发誓我已经尝试过了,但它就在这里.. 显然我没有.. 谢谢伙计,工作正常!!
    猜你喜欢
    • 2020-11-02
    • 2017-01-05
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多