Hive之同比环比的计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive之同比环比的计算相关的知识,希望对你有一定的参考价值。

参考技术A

Hive系列文章

与上年度数据对比称"同比",与上月数据对比称"环比"。
相关公式如下:

这里我们就用环比做个例子,同比类似

我们看到有null 值,这里我们可以使用,lag的默认值做一次优化

其实到这里我们就处理完了,但是这样真的对吗,我们看到\'2020-01\' 的last_num 是800 也就是\'2019-04\',其实到这里我们就明白了,我们的数据是不连续的,所以我们这样计算是不行的,如果每个月都齐全,都有数据lag(num,12)就可以。

那就只能做自关联了,这样的话我们可以对时间做精准的限制

这里的时间计算INTERVAL 你也可以换成其他函数

猜你喜欢
Hadoop3数据容错技术(纠删码)
Hadoop 数据迁移用法详解
Flink实时计算topN热榜
数仓建模分层理论
数仓建模方法论

大数据之hive:hive之add_months 函数(用于同比环比计算)

1、同比和环比

同比:同去年的今天进行比较
环比:同上个月的今天进行比较

2、add_months函数介绍

-1 代表减一个月;
+1 代表加一个月;

select add_months('2020-09-04',-1);
2020-08-04
select add_months('2020-03-31',-1);
2020-02-29

3、环比实战

select d.spotid,d.times,d.totalnumber,d.last_month_day,d.last_month_day_num,
concat(nvl(round((d.totalnumber - d.last_month_day_num) / d.last_month_day_num * 100,2),0),'%') as ratio
from 
(
select a.spotid,a.times,a.totalnumber,
if(b.times is null,0,b.times) as last_month_day,
if(b.totalnumber is null,0,b.totalnumber) as last_month_day_num from 
(select spotid,times,totalnumber from bas_cgj_ssrlsj1 where date_id = '20200904') a
left join 
(select spotid,times,totalnumber from bas_cgj_ssrlsj1 where date_id = '20200804') b
on a.spotid = b.spotid
and day(b.times) = day(a.times)
and month(b.times) = month(add_months(a.times,-1))
and year(b.times) = year(add_months(a.times,-1)))d;

这部分是以左表a 作为主表,为本月数据,b为上个月的数据
上月数据与本月数据关联不上 填充为0
关联条件为 day = day, month = month, year = year 再用left 连接,关联不上的就被0填充,保证数据关联的准确性;

4、同比

同比和环比一样的,就需要把add_months -1 改为 减 12个月就可以了
参考:https://blog.csdn.net/weixin_42279393/article/details/108405912

以上是关于Hive之同比环比的计算的主要内容,如果未能解决你的问题,请参考以下文章

DB2同比环比

实现同比环比计算的N种姿势

实现同比环比计算的N种姿势

计算同比和环比增长率

请教Oracle计算同比和环比sql语句

Hive SQL 求环比同比数据