AWS Athena:通过结构体数组中的属性进行查询

10
我使用 AWS Glue 爬取数据,从包含数据的 S3 文件夹中导入 JSON 数据。这些数据的根大括号是像这样的数组形式:
[{id: '1', name: 'rick'},{id: '2', name: 'morty'}]

这最终会导致生成以下这样的模式:
array<struct<expand:string,id:string,name:string>>

我该如何在 Athena 中通过 name 进行查询?

如果我尝试这样做:

SELECT * FROM people_s3_buckets WHERE name = "rick";

我收到以下错误信息:
SYNTAX_ERROR: Column 'name' cannot be resolved

也许可以通过设置Glue爬虫,仅添加数组中的元素而避免嵌套?
1个回答

16
为了查询数组中元素的字段,您需要首先使用UNNEST。假设结构array<struct<expand:string,id:string,name:string>>对应于列members,则需要执行以下操作:
SELECT
    *
FROM
    people_s3_buckets,
    UNNEST(members) as t(member)
WHERE
    member.name = 'rick'

请注意,您需要使用单引号而不是双引号。

以下是官方AWS文档有关在AWS Athena中处理数组的说明:查询数组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接