hive报错return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

场景:计算一年中每一天的数据,每一天的取值是前一年或者半年的平均值,所以我有两张临时表,第一张存放主体的一年中每一天的数据,第二张存放主体近两年的每一天对应的数据,第一张表左连接第二张表,这样子进行窗口函数计算即可。
select h1.*,h3.volume,h3.vwap,
     avg(h3.turnoverval)over(PARTITION by h1.TRADINGITEMID order by h1.natualday asc rows BETWEEN 364 PRECEDING and CURRENT ROW) as turnoverval
from  dp.tmp5 h1
     left join dp.tmp6 h3 
     on h1.TRADINGITEMID = h3.TRADINGITEMID and h1.natualday=h3.pricingdate 
    and h3.volume!=0 and h3.vwap!=0
但是这样子确报错,语法没有问题,单纯 avg 会有问题,如果求max 后者其他就不会报错。尝试了很久,而跑2019年、2020年的数据是没有问题的,然而跑2018年是会报错的,预估是脏数据导致的,但是不管怎样查询都查不出数据的问题, 最后发现需要把 h1的非交易日排除掉才行正常执行(这样子就不能准确的计算前180天的平均值了)
最后想到的办法是求出sum 和 count,确实可行
     select h1.secucode,h1.natualday,h3.volume,h3.vwap, h3.volume * h3.vwap ,
     SUM(h3.volume * h3.vwap)over(PARTITION by h1.secucode order by h1.natualday asc rows BETWEEN 180 PRECEDING and CURRENT ROW) as turnoverval,
     count(h3.volume * h3.vwap )over(PARTITION by h1.secucode order by h1.natualday asc rows BETWEEN 180 PRECEDING and CURRENT ROW) as turnovercnt
     from dp.tmp5 h1
     left join dp.tmp_ciqpriceequity h3 
     on h1.secucode = h3.secucode and h1.natualday=h3.pricingdate
总结:
其实工作中确实会遇到很多莫名其妙的问题,关键问题还是对核心理解的不够深,不过深入理解也是不太现实的。这种情况下最好能够排查出出现问题的点,找到之后一般是源数据不符合接口导致的,要不然就修改源,要不然就替换接口。总之对于理论能够实现的逻辑总归是有办法的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值