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 的表?