数仓sql小技巧(一)

避免ADS层小文件产生

  • 问题产生
  • 问题解决

问题产生

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;  

你可能感兴趣的:(数仓sql小技巧(一))