内容简介:在使用Sqoop的导入RDBMS数据到Hive的过程中,常常会遇到1种情况,那就是某个字段的类型是Blob或Clob这样的大文本类型,如果直接使用Sqoop进行导入的话,会发现无法正常导入。这里,我们以PostgreSQL数据库作为例子,进行相关问题的说明:在这里,我们创建了1张test的表,其中字段ID为主键并自增,而content是字节数组,即所谓的Blob类型。
在使用Sqoop的导入RDBMS数据到Hive的过程中,常常会遇到1种情况,那就是某个字段的类型是Blob或Clob这样的大文本类型,如果直接使用Sqoop进行导入的话,会发现无法正常导入。
这里,我们以PostgreSQL数据库作为例子,进行相关问题的说明:
create table test (id serial primary key,content bytea); insert into test values (1,E'\\0344\\0270\\0255\\0345\\0233\\0275\\0344\\0272\\0272'); insert into test values (2,E'\\0345\\0203\\0217\\0351\\0243\\0216\\0344\\0270\\0200\\0346\\0240\\0267\\0345\\0255\\0230\\0345\\0234\\0250'); insert into test values (3,'世界你好');
在这里,我们创建了1张test的表,其中字段ID为主键并自增,而content是字节数组,即所谓的Blob类型。
而在插入记录的时候,我们可以使用E转义符号进行字节的转义,将对应的8进制数据插入到数据库中。当然也可以直接插入字符串,PostgreSQL会进行相关的转换操作。
其结果类似如下:
id | content ----+---------------------------------------------------------------------------- 1 | \x1c34173015351c35133317351c3417321732 2 | \x1c35103311371d31143311361c34173010301c36143016371c35153513301c3513341530 3 | \xe4b896e7958ce4bda0e5a5bd (3 rows)
接着我们使用Sqoop工具进行调入,其操作类似如下:
sqoop import --connect jdbc:postgresql://localhost/dog --table test --hive-import --create-hive-table --username dog --delete-target-dir --hive-table test -P
这个操作与我们之前的操作一致,我们指定对应的表及要创建的表的。但是,在执行的过程中会出现这样的异常:
19/01/13 12:54:45 ERROR tool.ImportTool: Import failed: java.io.IOException: Hive does not support the SQL type for column content
从其异常可以看到,Hive不支持对应列的 SQL 类型。对于这样的情况,我们有2种方法:
- 不导入对应的字段
- 对对应的字段进行类型转换
对于不想导入的字段,可以通过选项 --columns
指定要导入的列。另外还可以通过配置文件中设置选项 oraoop.import.omit.lobs.and.long
的值为true来忽略对应列的导入。该插件可以通过 https://downloads.cloudera.com/connectors/oraoop-1.6.0-cdh4.tgz
进行下载,只对Oracle数据库有效。
对于指定字段类型的匹配,我们可以使用参数 --map-column-hiv
来指定,其参数为1个键值对。因此,我们可以将之前的操作修改为如下:
sqoop import --connect jdbc:postgresql://localhost/dog --table test --hive-import --create-hive-table --username dog --delete-target-dir --hive-table test --map-column-hive content=STRING -P
我们指定字段content的类型为STRING类型,这样在导入的时候就会将其转换为字符串。最后,导入成功后,我们可以查看到其对应的内容:
hive> select * from test; OK 2 1c 35 10 33 11 37 1d 31 14 33 11 36 1c 34 17 30 10 30 1c 36 14 30 16 37 1c 35 15 35 13 30 1c 35 13 34 15 30 3 e4 b8 96 e7 95 8c e4 bd a0 e5 a5 bd 1 1c 34 17 30 15 35 1c 35 13 33 17 35 1c 34 17 32 17 32 Time taken: 3.071 seconds, Fetched: 3 row(s)
另外,对应的,我们还可以使用参数 --map-column-java
指定对应列的 Java 类型。在Hive中,对于大文件的大小也是有限制的,如果对应的内容太大,可以通过参数 --inline-lob-limit
进行设置,将其设置为1个较大的数值即可实现导入。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Phoenix 数据导入与导出
- Redis批量导入数据的方法
- MySQL也能并发导入数据
- JanusGraph批量导入数据代码总结
- 数据搬运组件:基于 Sqoop 管理数据导入和导出
- 批量将本地gis数据导入postgis数据库
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JSP 应用开发详解(第二版)
飞思科技产品研发中心 / 电子工业出版社 / 2004-1-1 / 55.00
本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JSP 开发中的种种问题。以精简的内容介绍了JSP的语法、Servlet技术、JDBC技术、标签库技术、表达式语言、Struts、JavaServer Face等技术;对于JSP开发中常遇到的典型的难点,专门设置了专题进行集中讨论。本书的最后一篇围绕一个电子商务......一起来看看 《JSP 应用开发详解(第二版)》 这本书的介绍吧!