问题
我正在使用 Sqoop 从 Oracle 获取数据并将其放入 HDFS。与其他基本数据类型不同,我知道 SDO_GEOMETRY 用于空间数据。
我的 Sqoop 作业在获取数据类型 SDO_GEOMETRY 时失败。
需要帮助将数据类型为 SDO_GEOMETRY 的列 Shape 从 Oracle 导入到 Hdfs。
我有超过 1000 个具有 SDO_GEOMETRY 数据类型的表,当 sqoop 导入发生时,我如何处理一般数据类型?
我已经尝试了 --map-column-java 和 --map-column-hive ,但我仍然遇到错误。
error :
ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive does not support the SQL type for column SHAPE
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
最佳答案
Sqoop 在关系数据库和 Hadoop 之间提供的默认类型映射在您的情况下不起作用,这就是 Sqoop 作业失败的原因。您需要将映射覆盖为 sqoop 不支持的几何数据类型。
在您的 sqoop 作业中使用以下参数
syntax:--map-column-java col1=javaDatatype,col2=javaDatatype.....
sqoop import
.......
........
--map-column-java columnNameforSDO_GEOMETRY=String
因为你的列名是 Shape
--map-column-java Shape=String
关于hadoop - 如何使用 Sqoop 将列类型 SDO_GEOMETRY 从 Oracle 导入到 HDFS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43271163/