Sqoop:导入所有转换 blob 类型的表

Posted

技术标签:

【中文标题】Sqoop:导入所有转换 blob 类型的表【英文标题】:Sqoop : import all tables converting blob types 【发布时间】:2017-02-06 14:46:19 【问题描述】:

我正在尝试从我的 Oracle 11g R2 (import-all-tables) 导入所有表,但遇到了 CLOB 类型的问题。 (使用CDH 5.9,Sqoop 1.4.6-cdh5.9.1)

第一次尝试:

sqoop import-all-tables --connect ... --hive-import --hive-overwrite --as-parquet-file --autoreset-to-one-mapper -m XX --direct

在找到一个具有 CLOB 列的表之前正确导入表并抛出以下错误:无法转换为 SQL 类型 2005。

第二次尝试:

sqoop import-all-tables -D oraoop.disabled=true --connect ... --hive-import --hive-overwrite --as-parquet-file --autoreset-to-one-mapper -m XX

我得到同样的错误。

第三次尝试

sqoop import --connect ... --hive-import --hive-overwrite --as-parquet-file --autoreset-to-one-mapper -m XX --table MyClobTable --map-column-java CLOBCOL=String

这行得通,所以我尝试让所有表格都一样:

sqoop import-all-tables --connect ... --hive-import --hive-overwrite --as-parquet-file --autoreset-to-one-mapper -m XX --map-column-java CLOBCOL=String

这失败了,因为我的一个表只有一个 CLOBCOL 列。

有没有办法使用 import-all-tables,修复 2005 SQL 类型错误,或者告诉 Sqoop 如何“即时”解决它?

谢谢!

【问题讨论】:

您看到的具体问题是什么?与其试图将 clob 强制转换为字符串,不如考虑让 sqoop 根据文件大小的需要存储文件(如果相对较小,可以内联,否则在 _lobs subdir 中)。 我编辑了我的帖子,试图更加明确。如何“让 Sqoop 根据大小存储文件”? 【参考方案1】:

你不应该使用 --direct 命令,因为 sqoop 文档说“Sqoop 的直接模式不支持导入 BLOB、CLOB 或 LONGVARBINARY 列。对这些列使用基于 JDBC 的导入;不要提供 --direct 参数到导入工具。”

【讨论】:

以上是关于Sqoop:导入所有转换 blob 类型的表的主要内容,如果未能解决你的问题,请参考以下文章

当表在不同的架构中时,如何从 SQL Server 导入所有带有 sqoop 的表?

Sqoop导入所有不与Hive数据库同步的表

如何用sqoop查看oracle的表

在 sqoop 中从 RDBMS 导入选定的表

我想知道为啥我使用 sqoop 从 sqlserver 导入的 hive db 中的表正在消失

Sqoop - 导入失败:无法转换 sql 类型 -102