将 BLOB(图像)从 oracle 导入到 hive

Posted

技术标签:

【中文标题】将 BLOB(图像)从 oracle 导入到 hive【英文标题】:Import BLOB (Image) from oracle to hive 【发布时间】:2016-06-08 12:55:15 【问题描述】:

我正在尝试使用以下 Sqoop 命令将 BLOB(图像)数据从 oracle 导入 Hive。

sqoop import --connect jdbc:oracle:thin:@host --username --password  --m 3 --table tablename  --hive-drop-import-delims  --hive-table tablename --target-dir '' --split-by id;

但不成功。请记住,BLOB 数据以十六进制形式存储在 oracle 数据库中,我们需要将其以文本或二进制形式存储到 Hive 表中。

有什么方法可以做到这一点?

【问题讨论】:

【参考方案1】:

Sqoop 不知道如何将 oracle 中的 blob 数据类型映射到 Hive。所以你需要指定--map-column-hive COLUMN_BLOB=binary

sqoop import --connect 'jdbc:oracle:thin:@host' --username $USER --password $Password  --table $TABLE  --hive-import --hive-table $HiveTable  --map-column-hive COL_BLOB=binary --delete-target-dir --target-dir $TargetDir  -m 1 -verbose

【讨论】:

非常感谢您的帮助。当我们尝试将十六进制数据 (BLOB) 作为二进制加载到 HIVE 时,它工作正常。但是当我们尝试使用 Select 查询显示数据时,我们发现 HIVE 表中存储了损坏的二进制数据(如“?”、“”等)。我还观察到运行 sqoop 命令后,十六进制数据存储在 HDFS 中,但由于 HIVE 不支持十六进制数据,它试图将 HEX 数据转换为二进制并在我们执行任何选择查询时破坏所有数据。 数据没有被破坏,但它是蜂巢控制台无法正确显示。在 RDBMS 中导出相同的数据,然后使用 $where 条件应用 select,您将获得适当的记录。 嗨,我也面临同样的问题。你解决了吗?我认为从 hive 导出到 rdbms 并不是人们想要做的。大多数时候是从 rdbms 到 hive..

以上是关于将 BLOB(图像)从 oracle 导入到 hive的主要内容,如果未能解决你的问题,请参考以下文章

将 blob 从 JS 保存到 Oracle SQL?

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

oracle--导出导入blob类型的字段

使用 PL/SQL 将 base64 图像解码为 BLOB

如何从 HDFS 获取和查看 oracle BLOB (Image) 数据到本地系统?

ORACLE SQL中获取BLOB的图像格式