【问题标题】:Sqoop : import all tables converting blob typesSqoop:导入所有转换 blob 类型的表
【发布时间】: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 根据大小存储文件”?

标签: oracle sqoop


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多