使用aws cli命令删除athena表中的记录

本文档介绍如何使用AWS CLI在不支持更新和删除操作的Athena表中删除记录。通过创建临时表(CTAS)并利用数据迁移,实现了类似删除的效果。首先清空S3上的临时文件夹,然后使用Athena创建临时表,并从原始表中选择部分记录。接着删除原表数据并拷贝临时表数据到原表位置。最后,清理临时表和文件夹,完成记录删除过程。

目标:使用aws cli命令,删除athena表中的记录。

aws athena管理的表中是不支持 updata,delete操作的;甚至下面操作也是不允许的:

truncate table testdb.testtable;

insert overwrite table testdb.testtable select * from [other_table or current_table];

insert into table testdb.testtable select * from [other_table or current_table];

需要说明的是,使用spark编写的程序运行在EMR集群上是可以执行insert overrite的hive sql语句的;但我们的目标是使用aws cli 命令来达到删除表记录的目的。

================================================================================

通过网上搜索,找到了以下处理办法:



 

增加红色设置创建的表,可以支持update,delete等操作;但实际使用时发现,该功能只在指定的地区提供。

以下是网络搜索后,采用的更通用的办法(aws 术语:Creating a Table from Query Results (CTAS)),

具体实施步骤如下:

1. s3上建立一个临时文件夹,专用于存放临时表对应的数据库文件

每次执行前都需将该文件夹下的文件清空,否则临时表会建立失败;

由于没有文件了,所以tmp_for_update文件夹也会被删除,没有关系,下面操作会自动创建文件夹的

aws s3 rm s3://xxx/yyy/tmp_for_update/ --recursive

2. 使用 aws athena 命令执行下面的操作,具体命令形式请上网搜索:

下面的命令将创建一张名为tmp_for_update的表,表中内容是testdb.testtable表中内容的子集(根据条件过滤了部分记录)

CREATE TABLE testdb.tmp_for_update

WITH (

      external_location = 's3://xxx/yyy/tmp_for_update',

      parquet_compression = 'lzo')

AS select * from testdb.testtable where [Filter conditions];

3. 将原表对应的数据文件删除;再拷入临时表中的数据文件

aws s3 rm s3://xxx/yyy/testtable/ --recursive

aws s3 mv s3://xxx/yyy/tmp_for_update  s3://xxx/yyy/testtable/ --recursive

此时原表中再查看,满足指定条件的记录已经不存在了

4.使用aws athena命令对临时表进行清理

drop table dw_rec_db.tmp_for_update;

aws s3 rm s3://rec-collect/db/tmp_for_update/ --recursive

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值