我可以从Athena删除数据(表格中的行)吗?

时间:2018-02-15 20:14:12

标签: amazon-web-services amazon-athena

是否可以通过Athena查询删除存储在S3中的数据?我有一些行,我必须从几个表中删除(它们指向S3中的单独存储桶)。

我无法在雅典娜用户指南中找到方法:https://docs.aws.amazon.com/athena/latest/ug/athena-ug.pdf并且DELETE FROM不受支持,但我想知道是否有比尝试在S3中找到文件并删除它们更容易。

4 个答案:

答案 0 :(得分:5)

您可以利用Athena查找要删除的所有文件,然后单独删除它们。有一个特殊变量“$ path”。

Select "$path" from <table> where <condition to get row of files to delete>

要自动执行此操作,您可以在Athena结果上使用迭代器,然后获取文件名并从S3中删除它们。

答案 1 :(得分:1)

我只想补充Dhaval的答案。

您可以找到包含要删除的行的文件路径,而不是删除整个文件,您可以仅从S3文件中删除行(假设是Json格式)。

此过程是下载具有那些行的特定文件,从该文件中删除这些行,然后将同一文件上载到S3。

这只会用修改后的数据替换原始文件(在您的情况下,不会删除已删除的行)。上传后,Athena会再次转换数据,并且删除的行将不会显示。

答案 2 :(得分:0)

我还想补充一点,在找到要更新的文件之后,您可以过滤要删除的行,并使用CTAS创建新文件: https://docs.aws.amazon.com/athena/latest/ug/ctas.html

稍后,您可以将旧文件替换为CTAS创建的新文件。我认为这是最简单的方法

答案 3 :(得分:0)

为此使用AWS Glue。 加载数据,删除需要删除的内容,然后将数据保存回去。

现在,您还可以从s3中删除文件并合并数据:https://aws.amazon.com/about-aws/whats-new/2020/01/aws-glue-adds-new-transforms-apache-spark-applications-datasets-amazon-s3/