hive overwrite into不会删除旧文件的一种情况

hive overwrite into不会删除旧文件的一种情况

近期工作中发现一个hive overwrite into table的一个bug,如下

1、创建两张表,指定同一目录
1.1 创建表aaa:

use tmp;
drop table tmp.aaa;
CREATE EXTERNAL TABLE tmp.aaa(
id string comment ‘id’
)
comment ‘aaa’
partitioned by (dt string)
ROW FORMAT SERDE ‘org.openx.data.jsonserde.JsonSerDe’
with SERDEPROPERTIES ( “ignore.malformed.json” = “true”)
stored as TEXTFILE
LOCATION ‘/user/hive/warehouse/tmp.db/djaaa’;

1.2 创建表bbb:

use tmp;
drop table tmp.bbb;
CREATE EXTERNAL TABLE tmp.aaa(
id string comment ‘id’
,name string comment ‘name’
)
comment ‘bbb’
partitioned by (dt string)
ROW FORMAT SERDE ‘org.openx.data.jsonserde.JsonSerDe’
with SERDEPROPERTIES ( “ignore.malformed.json” = “true”)
stored as TEXTFILE
LOCATION ‘/user/hive/warehouse/tmp.db/djaaa’;

1.3 如上,两个表LOCATION到了同一目录:"/user/hive/warehouse/tmp.db/djaaa"

2、下面进行bug测试
2.1 首先使用overwrite into 向表aaa导入数据:

load data local inpath ‘/home/supdev/dianjun.gao/qq.txt’ overwrite into table tmp.aaa partition (dt=‘2020-06-31’);
Loading data to table tmp.aaa partition (dt=2020-06-31)
OK
Time taken: 1.043 seconds

查看aaa的源文件目录
在这里插入图片描述
看到已经将本地文件“qq.txt”上传到hdfs了
2.2 接下来向表bbb导入数据:

hive> load data local inpath ‘/home/supdev/dianjun.gao/shanbudiao.txt’ overwrite into table tmp.bbb partition (dt=‘2020-06-31’);
Loading data to table tmp.bbb partition (dt=2020-06-31)
OK
Time taken: 1.109 seconds

3、BUG出现
现在来观察源文件目录,新文件导入成功了
在这里插入图片描述
但是本应被覆盖掉的“qq.txt”依旧存在,也就是说overwrite并没有覆盖掉原有分区下的文件

在这里插入图片描述
4、总结:经过多次测试,指定了相同文件位置的两张表:
1、表aaa第一次插入的数据,如果没有被overwrite过的话,表bbb第一次插入的数据会和表aaa的历史数据共存。
2、经过一次overwrite后,不再有此问题

Alt

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值