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

Gui*_*des 5 amazon-web-services amazon-athena

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

我无法找到一个方法来做到这一点的雅典娜用户指南:https://docs.aws.amazon.com/athena/latest/ug/athena-ug.pdfDELETE FROM不支持,但我想知道如果有一种比尝试在S3中找到文件并删除它们更简单的方法.

Dha*_*val 9

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

Select "$path" from <table> where <condition to get row of files to delete>
Run Code Online (Sandbox Code Playgroud)

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

  • 雅典娜目前没有这种支持。此外,我不认为它会属于 Athena 的章程,因为它只是存储在某处的数据的分析引擎。 (3认同)

Ori*_*i N 7

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

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


Shi*_*ngh 6

答案是肯定的,现在你可以从Athena中删除数据了,最近AWS推出了支持ACID属性的ICEBERG表。

您需要使用以下步骤创建一个 Iceberg 表,该表将具有与 Athena 表(您要删除/更新记录的位置)相同的数据。

创建冰山表

    Create table new_iceberg_table 
    (id double, name string)
    LOCATION 'S3://path/where/you/want/to_save/'
    TBLPROPERTIES (table_type='iceberg')
Run Code Online (Sandbox Code Playgroud)

将数据从数据目录加载到这个新的冰山表中。

   Insert into datasource.new_iceberg_table
   Select * from datasource.main_athena_table.
Run Code Online (Sandbox Code Playgroud)

main_athena_table = 您要在其中执行删除/更新或 ACID 的表。new_iceberg_table = 新创建的表

现在您可以插入、更新和删除 Iceberg 表中的数据。

您还可以使用 SYSTEM_TIME 进行时间旅行。

相关SQL

#更新SQL =

UPDATE from datasource.new_iceberg_table set id = 04 where name='ABC' ;
Run Code Online (Sandbox Code Playgroud)

#删除SQL=

DELETE from datasource.new_iceberg_table where name='ABC' ;
Run Code Online (Sandbox Code Playgroud)

#时间旅行SQL(如果你想要时间旅行并想查看较旧的数据)

SELECT * from datasource.new_iceberg_table for SYSTEM_TIME as of (current_timestamp - interval '10' minutes) where name='ABC'
Run Code Online (Sandbox Code Playgroud)

谢谢。