微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Sqoop把Oracle表导入Hive

感谢分享:http://blog.csdn.net/lichangzai/article/details/19206479

导入oracle数据

--导入方法

$ sqoop import--hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:dbnAME --username USERNAME --password PASSWORD --verbose -m 1 --table TABLENAME

说明:

dbnAME:数据库实例名

USERNAME:用户名

PASSWORD:密码

TABLENAME:表名

-m:导入数据的进程的并发数,认是4。如果导入的数据不大的话,不妨设置成1,这样导入更快。一般来说Sqoop会使用主键来平均地分割数据。并发导入的时候可以设置相关的分割列等等,具体的做法参考官方的文档。

官方文档:

http://sqoop.apache.org/docs/1.4.4/index.html

参数说明参考:

http://www.jb51.cc/article/p-ojepmiio-qn.html

注意:

l用户名和表名必需是大写的,除非它们在创建的时候是名字是放在引号中的大小写混合的形式。

lSqoop会把Oracle中的表自动在hive中中创建,不用手工创建

l 表自动创建在default数据库中,如果想导入到其它库中,可加--hive-table mydb.tbname方式导入。

--导入实例

sqoop import--hive-import --connect jdbc:oracle:thin:@172.16.80.115:1521:CUSTOMER2--username WEBMEMBER --password webmem123 --verbose -m 1 --table MEMBERS


增量导入

另外一个问题,如果我们要导入某个表中的新加入的部分,可以使用--check-column、--incremental、--last-value三个参数,--check-column指定要检查的列,--incremental指定某种增加的模式,只有两个合法的值,append 和lastmodified。如果--incremental为append,则Sqoop会导入--check-column指定的列的值大于--last-value所指定的值的记录。如果--incremental为lastmodified,则Sqoop会导入--check-column指定的列的值(这是一个时间戳)近于--last-value所指定的时间戳的记录。

例如下面的命令可以导入列ID的值大于4的所有记录。

$ sqoop import--hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:dbnAME --usernameUSERNAME --password PASSWORD --verbose -m 1 --table TABLENAME --check-column ID--incremental append --last-value 4

遇到的问题

1.导入hive时报错

ERROR tool.ImportTool:Imported Failed: Attempted to generate class with no columns

原因和解决办法:

是因导入时表名或用户名没有大写所致

sqoop import --hive-import --connectjdbc:oracle:thin:@172.16.80.115:1521:CUSTOMER2 --username WEBMEMBER --passwordwebmem123 --verbose -m 1 --tablemembers

原文地址:https://www.jb51.cc/oracle/206789.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐