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