hive报错return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
生活随笔
收集整理的這篇文章主要介紹了
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 h1left 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 turnovercntfrom dp.tmp5 h1left join dp.tmp_ciqpriceequity h3 on h1.secucode = h3.secucode and h1.natualday=h3.pricingdate總結:
其實工作中確實會遇到很多莫名其妙的問題,關鍵問題還是對核心理解的不夠深,不過深入理解也是不太現實的。這種情況下最好能夠排查出出現問題的點,找到之后一般是源數據不符合接口導致的,要不然就修改源,要不然就替換接口。總之對于理論能夠實現的邏輯總歸是有辦法的。
總結
以上是生活随笔為你收集整理的hive报错return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Execution Error, r
- 下一篇: Hive查询报错,return code