雅典娜查询存储为字符串的JSON字段

时间:2020-10-22 01:11:56

标签: sql amazon-web-services amazon-athena

我有一个雅典娜表,其中有一个字段

fields (string)

数据看起来像

{"field_1":"value_1","field_2":"value_2"}
{"field_1":"value_3","field_2":"value_4"}
...

我想查询诸如:

select "fields"."field_1" as field_1 from table_name where field_1 = "something"

我尝试了许多方法,但是对于field_1来说只有一个错误或只有空值。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

基于示例数据,它看起来像是JSON字段。因此,我要做的第一件事就是使用json_parse进行转换。

"fields"."field_1"语法适用于row列-但是,似乎无法在Athena(基于Presto 0.172)中将json强制转换为行-参见{{ 3}}。

您可以将其转换为map<varchar,varchar>,然后通过Cast from JSON in the 0.172 Presto Release Documentation访问它:[]

示例:

with example as
(
    SELECT * FROM (
    VALUES
        ('{"field_1":"value_1","field_2":"value_2"}'),
        ('{"field_1":"value_3","field_2":"value_4"}')
    ) AS t (fields)
)
,example_cast as
(
    select *
    ,cast(json_parse(fields) AS map<varchar,varchar>) fields_parsed
    from example 
)
select *
,fields_parsed['field_1'] fields_field_1
from example_cast;