sqoop是一款开源的关系型数据库到Hadoop的迁移工具,对于通用的数据类型,如数值类型、字符类型、日期类型等sqoop可以提供无缝地迁移到Hadoop平台。但对于特殊类型,如LOB,使用sqoop迁移则有所限制。
对于CLOB,如xml文本,sqoop可以迁移到Hive表,对应字段存储为字符类型。
对于BLOB,如jpg图片,sqoop无法直接迁移到Hive表,只能先迁移到HDFS路径,然后再使用Hive命令加载到Hive表。迁移到HDFS后BLOB字段存储为16进制形式。本文我们介绍如果使用sqoop迁移Oracle中带blob字段的表到相应地Hive表。
1 首先,假设我们已经有现成的Oracle环境,且Oracle中有一张带BLOB(存储图片)字段的表,如t_blob。关于演示如何存储图片到Oracle表中,可参考我的另外一篇博客:使用plsql往Oracle的blob插入图片
2 其次,假设我们有现成的Hadoop集群且装有sqoop,我们验证sqoop可以正常访问Oracle环境并能访问上述带BLOB的表。关于如果配置sqoop与Oracle的连接,可以参考博客:Sqoop1 从Oracle往Hive迁移数据
sqoop-list-tables --driver oracle.jdbc.OracleDriver --connect jdbc:oracle:thin:@10.10.10.7:1521/orcl --username itlr --password itlr
3 现在我们可以使用sqoop的import命令来把带BLOB的表抽取到指定的HDFS路径下
sqoop-import --connect jdbc:oracle:thin:@10.10.10.7:1521/orcl --username itlr --p