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

AWS Athena: Querying by an attributes of a struct with an array

我使用 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 爬虫只添加数组中的元素并避免嵌套在一起?

为了查询数组中元素的字段,您需要先 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 Athena 中处理数组的官方 AWS 文档:Querying Arrays