Gui*_*des 5 amazon-web-services amazon-athena
是否可以通过Athena查询删除存储在S3中的数据?我有一些行,我必须从几个表中删除(它们指向S3中的单独存储桶).
我无法找到一个方法来做到这一点的雅典娜用户指南:https://docs.aws.amazon.com/athena/latest/ug/athena-ug.pdf和DELETE FROM不支持,但我想知道如果有一种比尝试在S3中找到文件并删除它们更简单的方法.
您可以利用Athena找出要删除的所有文件,然后单独删除它们.有一个特殊变量"$ path".
Select "$path" from <table> where <condition to get row of files to delete>
Run Code Online (Sandbox Code Playgroud)
要自动执行此操作,您可以在Athena结果上使用迭代器,然后获取文件名并从S3中删除它们.
我还想补充一点,找到要更新的文件后,您可以过滤要删除的行,并使用 CTAS 创建新文件:https: //docs.aws.amazon.com/athena/latest/ug/ ctas.html
稍后您可以用 CTAS 创建的新文件替换旧文件。我认为这是最简单的方法
答案是肯定的,现在你可以从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 = 新创建的表
您还可以使用 SYSTEM_TIME 进行时间旅行。
#更新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)
谢谢。
| 归档时间: |
|
| 查看次数: |
5353 次 |
| 最近记录: |