HIVE 分析函数lead(),lag()等在数值计算时可能产生的问题

HIVE 分析函数lead(),lag()等在数值计算时可能产生的问题Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。在使用过程中,常常用来计算数据与邻近数据的差值。虽然操作可以用自连接实现,但是LAG和LEAD与left join、rightjoin等自连接相比,效率更高,SQL更简洁。函数语法如下:lag(exp_str,offset,defval) over(partion by …order by …)lead(exp_
摘要由CSDN通过智能技术生成

HIVE 分析函数lead(),lag()等在数值计算时可能产生的问题

Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。

在使用过程中,常常用来计算数据与邻近数据的差值。虽然操作可以用自连接实现,但是LAG和LEAD与left join、rightjoin等自连接相比,效率更高,SQL更简洁。

函数语法如下:

lag(exp_str,offset,defval) over(partion by …order by …)

lead(exp_str,offset,defval) over(partion by …order by …)

该函数必须与窗口函数同时使用,单独使用会报错:
Missing over clause for function : lead

记住这个结论

于是在求差值时可能会遇到一个隐秘的问题:看下面的SQL:
1.select id,time,(price-lead(price,1,0) over(partition by id order by replace(time,":","") )) bf from t2,
2.select id,time,(lead(price,1,0)-price over(partition by id order by replace(time,":","") )) af from t2;

第一条SQL使用lead 计算了当前price与后一条price的差值,没有问题
但是第二条计算后一条与当前price差值时报了无法识别的错误:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值