Oracle存儲過程向Hadoop遷移中的問題及方案


本文記錄Oracle存儲過程向Hadoop遷移中遇到的問題及響應的解決辦法,作為初學者,文中內容有不妥之處歡迎指正,

1、不支持IN中的子查詢,
Solution,使用INNER JOIN將子查詢操作添加到WHERE子句之前,
2、因腳本中同時使用hive(即HQL)語句和SQL語句,注釋不能混用,
Solution,腳本的hive語句中的注釋中應該是“#”,子句中不能出現“--”,否則會使腳本運行出現執行異常;同時注意/**/注釋的使用,
3、腳本中語句末尾是否需要標點需要嚴格檢查,
Solution,根據語法判斷,對比前后語句的格式是否一致,
4、腳本中不要出現英文分號,因為hive會認為英文分號為語句結束符,英文分號之后的語句會被認為新的執行語句,即便是在注釋中,
5、平台搭建時設置了set hive.groupby.skewindata=true;解決數據平衡問題,但執行中出現“DISTINCT on different columns not supported with skew in data”問題,
Solution,DISTINCT問題,刪除hive語句中配置的“set hive.groupby.skewindata=true;”
6、hive語句中不支持NULLIF,
Solution,NULLIF(t1, '**') 可以用下面的語句替換
if(t1= '**',null,t1)
7、hive語句中不支持DECODE
DECODE(A,'1','1','2','2','0') 可轉換為
CASE WHEN A = '1' THEN '1' WHEN A = '2' THEN '2' ELSE '0' END
8、只報空指針錯誤,
Solution,可先不查詢數據結果,先列表檢查最終檢索字段,各個需要UNION ALL拼接結果的字段是否一致;拼接字段一致,仍報空指針時可查詢數據進一步檢查,

當SELECT查詢的列的字段名相同時會報“字段名歧義”錯誤,應同時為兩個字段添加別名,


所以團隊聯合開發腳本前最好約定好一些通用規范,比如,腳本中針對hive語句和SQL語句如何使用注釋,規范SQL語句格式(保留字的大小寫問題),等等,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM