问题产生
ads层由于本身的数据很少,一天只有几条或几十条,并且数据导出常常为全量导出。所以没有进行分区,,也没有才有压缩和列式存储。采用的数据装载语句也是insert into,而不是insert override。但这样就会带来一个在hdfs中非常严重的问题——小文件过多。ads层每插入一条数据,就会生成一个小文件,这样就会形成大量小文件。
问题解决
可以在每次导入数据时,把历史数据查出来,不用修改,再把今天的数据拿过来,两者union all。这样就不会产生小文件了。
insert override table ads_order_daycount
select
'2020-06-24',
sum(order_count),
sum(order_amount),
sum(if(order_count>0,1,0))
from
dws_user_action_daycount
where
dt='2020-06-24'
union all
select
*
from
dws_user_action_daycount;