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
我使用 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