使用sqoop工具进行数据表增量导入

sqoop工具是hadoop环境下连接关系数据库和hadoop存储系统的桥梁,支持多种关系数据源和hive,hbase表格的相互导入。
一般情况下,关系数据表存在于线上环境的备份环境,需要每天进行数据导入。如果数据表较大,我们通常不可能每次都进行全表的导入。幸运的是,sqoop提供了增量导入数据的机制。下面就以mysql数据表为例,看一个例子。
假设在本地假设了Mysql服务器,我们需要每天从main数据库中导入visit_log表,表结构是 id, url, time。
首先指定sqoop中源参数:
--connect jdbc:mysql://localhost:3306/main 
--username root 
--password pass
--table user
--columns "id,url,time"

--direct

我们需要将数据表导入hive中,所以在hive中建立新表

create table hive_visit_log ( id int, url string, time string);

然后指定sqoop中关于目标数据源的参数:

--hive-import  

--hive-table hive_visit_log

最后指定增量的参数:

--incremental append 

 --check-column id

--last-value 0 

这样,sqoop会从visit_log中id比0大的id开始导入,实现了增量导入。可以采用非增量导入,但是sqoop似乎会在warehouse-dir目录下建立一个源表名的目录,如果有此目录存在会报错,所以建议采用增量导入。

* 如果导入时候需要采用分区,可以用--where控制条件配合--hive-partition-key dt --hive-partition-value '2011-03-21' 参数

还有一个问题,每天导入时候的last value值不一样,如何做到每天动态的读取新的last value呢?这点sqoop也想到了,在技术指南中,sqoop支持把一条sqoop命令变为一个job,sqoop会通过job结果自动的更换last value的值。将sqoop命令建立为job的命令很简单,在原来命令基础上将import 替换为job <job_name> --create  -- import就可以命名一个job_name的任务。执行任务是直接用 sqoop job --exec <job_name>

最后我们得到的sqoop命令是:

sqoop job visit_import --create -- import  --connect jdbc:mysql://localhost:3306/main  --username root  --password pass --table user --columns "id,url,time" --direct --hive-import   --hive-table hive_visit_log --incremental append  --check-column id --last-value 0 

sqoop job --exec visit_import

参考:Sqoop User Guide (v1.3.0-cdh3u6)

转自:http://blog.csdn.net/awayyao/article/details/7635094

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈振阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值