问题
我使用sqoop从oracle获取数据并将其放入hdfs。与其他基本数据类型不同,我理解sdoèU几何体是用于空间数据的。
我的sqoop作业在获取数据类型sdo\u geometry时失败。
需要帮助才能将sdo\ U geometry数据类型为的列形状从oracle导入hdfs。
我有1000多个表具有sdo\u geometry数据类型,在发生sqoop导入时如何处理数据类型?
我尝试了--map column java和--map column hive,但仍然出现了错误。
错误:
error tool.importtool:运行导入作业时遇到ioexception:java.io.ioexception:配置单元不支持列形状的sql类型
sqoop命令
下面是我的sqoop命令:
sqoop import --connect 'jdbc:oracle:thin:XXXXX/xxxxx@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=xxxxxxx)(Port=1521))(CONNECT_DATA=(SID=xxxxx)))' -m 1 --create-hive-table --hive-import --fields-terminated-by '^' --null-string '\\\\N' --null-non-string '\\\\N' --hive-overwrite --hive-table PROD.PLAN1 --target-dir test/PLAN1 --table PROD.PLAN --map-column-hive SE_XAO_CAD_DATA=BINARY --map-column-java SHAPE=String --map-column-hive SHAPE=STRING --delete-target-dir
2条答案
按热度按时间mwg9r5ms1#
sqoop在关系数据库和hadoop之间提供的默认类型Map在您的情况下不起作用,这就是sqoop作业失败的原因。您需要将Map重写为sqoop不支持的几何数据类型。
在sqoop作业中使用以下参数
syntax:--map-column-java col1=javadatatype,col2=javadatatype。。。。。
因为你的列名是shape
chhkpiq42#
sqoop导入到hdfs
sqoop不支持所有rdbms数据类型。
如果不支持特定的数据类型,则会出现如下错误:
sql类型没有java类型。。。。。
解决方案
添加
--map-column-java
在sqoop命令中。语法:
--map-column-java col-name=java-type,...
例如,--map-column-java col1=String,col2=String
###sqoop导入到配置单元你也需要
--map-column-java
如上所述。默认情况下,sqoop支持这些jdbc类型,并在相应的配置单元类型中转换它们:
如果您的数据类型不在此列表中,则会出现如下错误:
配置单元不支持…..的sql类型。。。。。
解决方案
你需要加上
--map-column-hive
在sqoop导入命令中。语法:
--map-column-hive col-name=hive-type,...
例如,--map-column-hive col1=string,col2='varchar(100)'
添加--map-column-java SE_XAO_CAD_DATA=String,SHAPE=String --map-column-hive SE_XAO_CAD_DATA=BINARY,SHAPE=STRING
听你指挥。不要使用多个
--map-column-java
以及--map-column-hive
.