我将其他相关不必要的细节隐去,只保留最终的技术点,希望能对以后有需要的朋友提供些许帮助。
最近在进行hive表的统计的时候有这样的一个需求,
hive中增量统计
一 、任务需求:
有这样的两个表 table0,table01,
table0为原始数据表:
age | num | total | pday |
---|---|---|---|
50 | 20 | 100 | 20190420 |
60 | 20 | 100 | 20190420 |
70 | 20 | 100 | 20190420 |
80 | 20 | 100 | 20190420 |
age为年龄,50后 60后 70后 80后
num为在20190420这一天新增的人数
total 为截至到20190420这一天的所有人数
还有一张table1表,长这个样子
age | num | pday |
---|---|---|
50 | 10 | 20190421 |
60 | 10 | 20190421 |
70 | 10 | 20190421 |
80 | 10 | 20190421 |
很容易理解,年龄为50后的人 今天又新增了10人,年龄为60后的人今天也新增了10人,以此类推
需求是,需要统计在4月21日的总人数,生成像table0那样的表格,也就是以下这张表,我称为结果表 result_table
age | num | total | pday |
---|---|---|---|
50 | 10 | 110 | 20190421 |
60 | 10 | 110 | 20190421 |
70 | 10 | 110 | 20190421 |
80 | 10 | 110 | 20190421 |
我们以50后为例,表中num表示的是今日新增10人,总人数变成了昨天的100加上今天的10人,共110人。
sql语句如下,比较简单
select
t0.age,
t1.num,
t1.num+t0.total as total
from
(select age,num,total from table0 where pday=20190420) as t0
join
(select age ,num from table1 where pday=20190421) as t1
on
t0.age=t1.age
二、出现的问题
1 很容易产生的问题如下:在未来的某一天,新增的人只有50后 60后,没有80 90后,那table0与table1进行join的结果就只能有50后60后, 80和90的就会消失,大家想想是不是这个道理。如下表,就是在4月25日新增的人只有50和60的人,那么80 90