【问题描述】oracle模式的ob库数据通过sqoop同步到hive中,sqoop脚本使用-m参数报错(sqoop脚本为附件1,报错信息为附件2)
【复现路径】问题出现前后相关操作
【脚本代码】sqoop import “-Dorg.apache.sqoop.splitter.allow_text_splitter=true”
–connect jdbc:oceanbase://xcdb.edhic.com:2883/nclaimuser?dontTrackOpenResources=true&defaultFetchSize=10000&useCursorFetch=true
–username sjzl@xc_ora_zh01
–password xxxxxx
–query “select id
,datatype
,datacode
,dataname
,pretype
,precode
,inserttimeforhis
,operatetimeforhis
,validstatus
,olddatacode
,olddataname
,enumid
,sysdate as inputdate
from nclaimuser.commondata
where 1 = 1
and $CONDITIONS”
–m 4
–hive-table ods_edw.ods_ncl_commondata
–hive-drop-import-delims
–fields-terminated-by ‘\001’
–delete-target-dir
–null-non-string ‘\N’
–null-string ‘\N’
–fetch-size 10000
–driver com.alipay.oceanbase.jdbc.Driver
–target-dir /user/hive/warehouse/ods_edw.db/ods_ncl_commondata_tmp
–hive-overwrite
–split-by id
–map-column-java ID=String,DATATYPE=String,DATACODE=String,DATANAME=String,PRETYPE=String,PRECODE=String,INSERTTIMEFORHIS=String,OPERATETIMEFORHIS=String,VALIDSTATUS=String,OLDDATACODE=String,OLDDATANAME=String,ENUMID=String
–hive-import
会的,这是sqoop自动生成的sql。
应该是ob的驱动生成的sql,表别名前面多了 as 关键字造成的报错
ob驱动不会改SQL吧
我同步oracle库数据时,开启-m参数。生成的sql就不会在表别名前加as
SQL不对,自然会报错,那就要从这SQL的来源入手了,到底是sqoop改写生成的SQL?还是驱动后改写生成的SQL?
脚本中的sql是
select id,xxx,xxx from table
开启-m 参数后 sql就变成了
select MIN(id), MAX(id) from (select id,xxx,xxx from table) as t1
同步oracle库时脚本中的sql是
select id,xxx,xxx from table
开启-m 参数后 sql就变成了
select MIN(id), MAX(id) from (select id,xxx,xxx from table) t1
在同步ob库的oracle模式时sql会在表别名前多一个as
ob的驱动版本发一下?
SQL 是什么组件改写的??
oceanbase-client-1.1.10.jar
脚本中的sql
select id,xxx,xxx from table
是写在sqoop脚本里面的,sqoop是通过jdbc连的ob库
正常情况下,开启-m 参数后 sql就变成了
select MIN(id), MAX(id) from (select id,xxx,xxx from table) t1
这个该SQL的动作是哪个组件负责???
这个sql是sqoop生成的。。同步oracle时生成的是不带as的sql,同步ob的oracle时就会加as
能确定 snoop 在什么条件下会自动加 as吗?
sqoop同步来源库为mysql时会生成as
驱动问题可能比较大,oboracle需要使用OB提供的驱动,你可以换高版本一点的OB驱动试试。
请帮忙给一个高版本的oboracle驱动下载连接