AWS Athena 能否更新或插入存储在 S3 中的数据?

Can AWS Athena update or insert data stored in S3?

文档只说是查询服务,并没有明确说明可以或不可以进行数据更新

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

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

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

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

由于 automatically-generated header 的问题,我之前在另一个 Athena 查询中使用 Athena 输出的尝试没有成功,但可能有一些解决方法可用。

如果您正在寻找可以在 S3 中更新信息的服务,您可以使用 Amazon EMR,它基本上是一个托管的 Hadoop簇。很强大,很能干,肯定能更新S3的信息,但是学起来比较复杂。

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

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

要插入 tables,您可以将相同格式的其他文件写入给定 table 的 S3 路径(这有点 hack),或者最好为新数据。

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

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

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

Amazon Athena 现在支持使用 INSERT INTO 语句向现有 table 插入新数据。

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

已分桶 table 不支持

INSERT INTO 在分桶 table 上不受支持。有关详细信息,请参阅 Bucketing vs Partitioning

终于有来自 AWS 的解决方案了。现在您可以在 AWS Athena 上执行 CRUD(创建、读取、更新和删除)操作。雅典娜 Iceberg integration is generally available now. Create table 与:

TBLPROPERTIES ( 'table_type' ='ICEBERG' [, property_name=property_value])

那么你就可以使用它的神奇功能了。

如需快速介绍,您可以观看此video。 (或在 Youtube 上搜索 Insert / Update / Delete on S3 With Amazon Athena and Apache Iceberg | Amazon Web Services

阅读Considerations and Limitations