需求
根据短信月详单实现Top 10短信联系人的功能。就是计算出每个号码发送短信最多的10个号码(由于电信业务规则,接收到的短信不会产生记录,所以只能计算发送短信最多的10个号码)。
数据全部通过datax从oracle导入到hdfs上,然后通过hive外部表的形式进行管理。
第一步
初步一看貌似用原生MapReduce比较好解决,毕竟以前用MR处理过类似的需求。但是最近刚刚建议老总将能转移到hive上用sql实现的业务全部转移过来,于是想想还是尝试用sql实现吧。
首先先试试根据发送短信号码、接收短信号码group来计算每个号码对的短信次数。
1 2 3 |
SELECT billing_nbr,case when length(called_nbr)>11 then substr(called_nbr,-11) else called_nbr end called_nbr,count(*) count from default.sms where yyyy='2015' and mm='05' GROUP BY billing_nbr, case when length(called_nbr)>11 then substr(called_nbr,-11) else called_nbr end having count(*)>1 |