如何使用sqoop将列类型sdo\u几何体从oracle导入hdfs?

d8tt03nd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(384)

问题
我使用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命令:

  1. 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
mwg9r5ms

mwg9r5ms1#

sqoop在关系数据库和hadoop之间提供的默认类型Map在您的情况下不起作用,这就是sqoop作业失败的原因。您需要将Map重写为sqoop不支持的几何数据类型。
在sqoop作业中使用以下参数
syntax:--map-column-java col1=javadatatype,col2=javadatatype。。。。。

  1. sqoop import
  2. .......
  3. ........
  4. --map-column-java columnNameforSDO_GEOMETRY=String

因为你的列名是shape

  1. --map-column-java Shape=String
chhkpiq4

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类型,并在相应的配置单元类型中转换它们:

  1. INTEGER
  2. SMALLINT
  3. VARCHAR
  4. CHAR
  5. LONGVARCHAR
  6. NVARCHAR
  7. NCHAR
  8. LONGNVARCHAR
  9. DATE
  10. TIME
  11. TIMESTAMP
  12. CLOB
  13. NUMERIC
  14. DECIMAL
  15. FLOAT
  16. DOUBLE
  17. REAL
  18. BIT
  19. BOOLEAN
  20. TINYINT
  21. BIGINT

如果您的数据类型不在此列表中,则会出现如下错误:
配置单元不支持…..的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 .

展开查看全部

相关问题