数仓项目中,每日更新一些表(比如日活表),会向表中新增一条数据。
如果写成insert into xxx, 新写的数据会在hdfs形成一个小文件。
每日如此的话,小文件的数量会非常大。
为了解决此问题,可以使用union来解决
insert overwrite table xxx
select * from xxx
union
select …
通过union将新的那条数据和原来老的数据合并,再overwrite,这样就会避免小文件问题。
注意:union all 没有此效果。因为hive比较智能,你写union all它会判断出你就是新增了一条数据而已,执行的结果会和insert into相同,也会生成小文件。