我可以从 Athena 中删除数据(表中的行)吗?
Posted
技术标签:
【中文标题】我可以从 Athena 中删除数据(表中的行)吗?【英文标题】:Can I delete data (rows in tables) from Athena? 【发布时间】:2018-07-26 16:44:38 【问题描述】:是否可以通过 Athena 查询删除存储在 S3 中的数据?我必须从几个表中删除一些行(它们指向 S3 中的单独存储桶)。
我在 Athena 用户指南中找不到方法:不支持 https://docs.aws.amazon.com/athena/latest/ug/athena-ug.pdf 和 DELETE FROM
,但我想知道是否有比在 S3 中查找文件更简单的方法并删除它们。
【问题讨论】:
您是否能够找到解决此问题的方法,例如自定义解决方案? 【参考方案1】:您可以利用 Athena 找出您要删除的所有文件,然后单独删除它们。有一个特殊的变量“$path”。
Select "$path" from <table> where <condition to get row of files to delete>
要自动执行此操作,您可以对 Athena 结果进行迭代,然后获取文件名并从 S3 中删除它们。
【讨论】:
这个很酷,感谢分享,但是我不能删除整个文件,我需要删除文件中包含坏数据的特定行。 Athena 目前还没有这种支持。此外,我认为它不属于 Athena 的章程,因为它只是一个对存储在某处的数据的分析引擎。【参考方案2】:我只想补充 Dhaval 的答案。
您可以找到包含要删除的行的文件的路径,而不是删除整个文件,您可以从我假设为 Json 格式的 S3 文件中删除行。
该过程是下载具有这些行的特定文件,从该文件中删除行并将相同的文件上传到 S3。
这只是将原始文件替换为具有修改数据的文件(在您的情况下,没有删除的行)。上传后,Athena 会再次转换数据,删除的行不会显示出来。
【讨论】:
【参考方案3】:我还想补充一点,在找到要更新的文件后,您可以过滤要删除的行,并使用 CTAS 创建新文件: https://docs.aws.amazon.com/athena/latest/ug/ctas.html
稍后您可以用 CTAS 创建的新文件替换旧文件。我认为这是最简单的方法
【讨论】:
【参考方案4】:为此使用 AWS Glue。 加载您的数据,删除您需要删除的内容,然后保存数据。
现在您还可以从 s3 中删除文件并合并数据:https://aws.amazon.com/about-aws/whats-new/2020/01/aws-glue-adds-new-transforms-apache-spark-applications-datasets-amazon-s3/
【讨论】:
以上是关于我可以从 Athena 中删除数据(表中的行)吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Athena / Presto 从多个表返回 SQL 数据,受 1 个表中的日期范围限制
我可以从存储在 S3 中的 sql 文件运行 Athena 查询吗