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

cos*_*r11 10 amazon-web-services amazon-athena aws-glue-data-catalog

我使用 awsglue 爬取数据,从 s3 文件夹导入 json 数据,该文件夹包含根大括号是如下数组的数据:

[{id: '1', name: 'rick'},{id: '2', name: 'morty'}]
Run Code Online (Sandbox Code Playgroud)

这最终会产生这样的模式:

array<struct<expand:string,id:string,name:string>>
Run Code Online (Sandbox Code Playgroud)

如何name在 Athena 中查询?

如果我尝试这个:

SELECT * FROM people_s3_buckets WHERE name = "rick";
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

SYNTAX_ERROR: Column 'name' cannot be resolved
Run Code Online (Sandbox Code Playgroud)

也许,有一种方法可以设置 Glue 爬虫以仅添加数组中的元素并避免完全嵌套?

Ily*_*sil 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'
Run Code Online (Sandbox Code Playgroud)

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

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