微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 AWS Athena 检索原始 S3 数据

如何解决如何从 AWS Athena 检索原始 S3 数据

我有一个通过 Kinesis Firehose 归档 JSON 对象的 S3 存储桶。每个存储桶对象可以包含多个 JSON 对象,这些对象在架构中可能会有所不同。

桶结构

bucket
└── archive
    └── 2021
        └── 04
            ├── 11
            |   ├── 10
            |   |   └── object-1
            └── 14
                └── 09
                    └── object-2

一个对象 - s3://bucket/archive/2021/04/11/10/object-1

{"id":1,"timestamp":"2021-04-11T10:01:20Z","nestedData":{"morenesting":{"someData":"value"}}}
{"id":2,"timestamp":"2021-04-11T12:00:31Z","someDifferentlynestedData":{"differentnesting":{"someOtherData":"value"}}}

第二个对象 - s3://bucket/archive/2021/04/14/09/object-2

{"id":3,"timestamp":"2021-04-14T09:02:30Z","nonestedData":"value"}

我已经设置了一个 glue Crawler 来根据我的数据创建数据目录表。

数据目录表

Data Catalogue Table

我正在使用 AWS Athena 查询该数据。查询时,我可以使用以下查询检索目标 JSON 对象的所有列:

所有列查询

SELECT *
FROM archive
WHERE nesteddata.morenesting.somedata = 'value';

所有列查询结果

Query results

我还可以使用以下查询检索 JSON 对象的 S3 对象路径:

S3 路径查询

SELECT "$path"
FROM archive
WHERE nesteddata.morenesting.somedata = 'value';

S3 路径查询结果

Query results

问题

我的问题是,如何通过查询检索原始 JSON 对象,即如何获得返回如下内容查询结果:

Expected query results

解决方法

如果您不介意在另一个表上使用这种表示,您可以使用 string 链接通过 Athena 控制台简单地创建一个带有单个 Create table 字段的表。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。