AWS Athena 可以更新或插入存储在 S3 中的数据吗?

Posted

技术标签:

【中文标题】AWS Athena 可以更新或插入存储在 S3 中的数据吗?【英文标题】:Can AWS Athena update or insert data stored in S3? 【发布时间】:2018-06-20 13:17:31 【问题描述】:

文档只是说它是一个查询服务,但没有明确说明它可以或不能执行数据更新。

如果 Athena 无法进行插入或更新,是否有任何其他 aws 服务可以像普通数据库一样执行?

【问题讨论】:

【参考方案1】:

AWS S3 是一种对象存储。 Athena 和S3 Select 都用于查询。在 S3 中修改对象(文件)的唯一方法是从 S3 中检索、修改并上传回 S3。

【讨论】:

感谢您的回复。【参考方案2】:

Amazon Athena 确实是一种查询服务——它只允许从 Amazon S3读取数据。

但是,一个例外是查询的结果会自动写入 S3。因此,您可以使用查询来生成可以被其他东西使用的结果。这不是完全更新数据,而是生成数据。

由于自动生成的标头存在问题,我之前在另一个 Athena 查询中使用 Athena 输出的尝试没有成功,但可能有一些可用的解决方法。

如果您正在寻找可以更新 S3 中的信息的服务,您可以使用 Amazon EMR,它基本上是一个托管的 Hadoop 集群。非常强大和有能力,并且肯定可以在 S3 中更新信息,但学习起来相当复杂。

【讨论】:

感谢您的回复。如果我只有读取权限,是否可以将结果写入 s3?存储结果的默认路径是什么? 更新: Amazon Athena 现在可以CREATE TABLE AS 根据现有表的查询创建新表。数据将存储回 Amazon S3,并且可以采用各种格式,包括 Parquet 和 ORC。 更新:Amazon Athena 现在支持 INSERT INTO aws.amazon.com/about-aws/whats-new/2019/09/…【参考方案3】:

自 2018 年 10 月起,Athena 支持 CTAS(创建表为)语句。您可以在其他选项中指定输出位置和文件格式。

https://docs.aws.amazon.com/athena/latest/ug/ctas.html

要插入到表中,您可以将其他格式相同的文件写入给定表的 S3 路径(这有点像 hack),或者最好为新数据添加分区。

与许多大数据系统一样,Athena 无法处理 UPDATE 语句。

【讨论】:

【参考方案4】:

截至 2019 年 9 月 20 日,Athena 还支持INSERT INTO:https://aws.amazon.com/about-aws/whats-new/2019/09/amazon-athena-adds-support-inserting-data-into-table-results-of-select-query/

【讨论】:

【参考方案5】:

Amazon Athena 添加了对使用 SELECT 查询结果或使用一组提供的值将数据插入表的支持

Amazon Athena 现在支持使用 INSERT INTO 语句将新数据插入到现有表中。

https://aws.amazon.com/about-aws/whats-new/2019/09/amazon-athena-adds-support-inserting-data-into-table-results-of-select-query/

https://docs.aws.amazon.com/athena/latest/ug/insert-into.html

不支持分桶表

分桶表不支持 INSERT INTO。如需更多信息,请参阅Bucketing vs Partitioning。

【讨论】:

以上是关于AWS Athena 可以更新或插入存储在 S3 中的数据吗?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon AWS Athena S3 和 Glacier 混合存储桶

在同一个 Cloudformation 堆栈中连接 Athena 和 S3

AWS athena sql 查询以获取不同的数据

在 AWS Athena 的 json 文件中存储多个元素

从 s3 的 Athena 中的 2 个外部表更新 Athena 表

AWS Athena 无法将 .csv 整数转换为表值