sqoop将oracle数据导入到hive报错:Error: java.io.IOException: SQLException in nextKeyValue
sqoop将oracle数据导入到hive报错:Error: java.io.IOException: SQLException in nextKeyValue1、字段属性不匹配
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
问题
sqoop将oracle数据导入到hive报错:Error: java.io.IOException: SQLException in nextKeyValue
提示:以下是本篇文章正文内容,下面案例可供参考
一、问题是什么导致的?
1、字段属性不匹配
2、日期格式问题
3、资源不足
错误截图:
二、验证问题
导入语句:
/export/servers/sqoop/bin/sqoop import \
--connect jdbc:oracle:thin:@192.168.xxx.xx:1521/zhuting \
--username root \
--password 123456 \
--target-dir /data1/zhuting/db/ODS_R_PRO_PRODUCT/2022-06-09 \
--hive-drop-import-delims \
--null-string '\\N' \
--null-non-string '\\N' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by '\001' \
--query "select SKUID,SKU,MAINSKU,NAME_CN,NAME_EN,COSTPRICE,PURPRICE,WEIGHT,PACKWEIGHT,PURUSERID,PURUSERNAME,DEVELOPUSERID,DEVELOPUSERNAME,FIRSTSUPPLIERID,FIRSTSUPPLIERNAME,WAITORDERNUM,BENUM,USERTIME,CHECKTIME,ORDERNUM,STATUS,KEYWORD_CN,
KEYWORD_EN,PREPACKID,PREPACKNAME,DESCR,QCDESCR,USER_ID,USERNAME,CATALOGUEID,CATALOGUENAME,PIC1,PIC2,PIC3,CUSTSTATUS_ID,CUSTSTATUS_NAME,PURDAY,ONEDAYNUM,TORTCLASS,DECLAREDPRICE,STOCKOUT_QTY,TBD_QTY,STORAGE_ID,STORAGE_NAME,
LOCATION_ID,LOCATION_NAME,INVENTORY,ALERTDAY,ALERTNUM,PURPRICE2,YESTERDAYSALES,DISABLEFLAG,ISABLESEE,ISABLETIME,LOCATION_BAK,FIRSTSUPPLIERLINK,NEWORDERSKUNUM,NEWBENUM,SEVEN_DAYS,THIRTY_DAYS,SIXTY_DAYS,NINTY_DAYS,
INVENTORY_TURNOVER,CUTPRICETIME,ONE_DAYS,TWO_DAYS,THREE_DAYS,FOURTEENTH_DAYS,TWENTYEIGHT_DAYS,DEVLINEABBR,ORIGINALSTATUS,SPECIMENTIME,QUALITY,FIFTEEN_DAYS,ISCUSTOMIZATION,CUSTOMIZATIONTIME,SUPPLYERID,SUPPLYERNAME,
DEVELOPUSERREALNAME,DEPRECIATEDAYS,PROPACKID,PROPACKNAME,OVERSEAS_INVENTORY,OFFERID_1688,SPECID,ACTUAL_LENGTH,ACTUAL_WIDTH,ACTUAL_HEIGHT,PRETEND_LENGTH,PRETEND_WIDTH,PRETENDL_HEIGHT,INITIAL_SORTING,ALIMINPURQTY,SORTING_MODE,
SORTINGQTY,INITIAL_SORTING_COST,WAREHOUSE_SORTING_COST,NPURPRICE,INITIAL_PURPRICE,PROFREIGHT,CSORTINGPRICE,SORTINGFEE,UPDATEFLAG,EXPRESSFLAG,DECNAME,SPECIDVALUE,ISFILE,LOGISTICS_STATUS,PROCUREMENT_STATUS,ENDECNAME from R_PRO_PRODUCT where 1=1 and \$CONDITIONS"
方法:
1、如果报错中有涉及到字段或者字段值的,就查看是否是字段属性不匹配
2、有时候是时间字段错误数据,mysql会报这种错,具体文章:https://www.freesion.com/article/7184430494/
3、我首先是在原oracle主库测试,使用部分字段,看能否导入,结果10个字段可以导入,但是多加一个11个字段导入失败,将第11个字段放在sql最前面,可以导入,排除字段问题,将第11个字段的值固定写为1,导入成功,判断是oracle数据库资源不够,让DBA查询oracle后台资源,表示磁盘利用率已达到100%,所以导入过程会失败,切换到oracle从库,同步的语句可以导入,所以根本原因是磁盘资源不足,要么优化程序,减少磁盘利用率,要么切换到其他备份数据库,不要使用主库,主库连接比较多,资源可能不够。参考文章:https://www.136.la/java/show-98705.html
总结
遇到问题可以从以下几方面来检查,一定要仔细查看报错日志,日志本身看不出问题,就从数据本身、数据结构、程序逻辑、集群资源等方面一一检查!
更多推荐
所有评论(0)