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后,不再有此问题