sqoop增量导入hive_Sqoop(四)增量导入、全量导入、减量导入

本文详细介绍了如何使用Sqoop进行Hive数据的增量导入,包括基于递增列的Append方式和基于时间列的LastModified方式。此外,还提到了全量导入和减量导入的实现方法,提供了具体的SQL语句和操作步骤。
摘要由CSDN通过智能技术生成

增量导入

一、说明

当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数据,导入数仓后进行后续离线分析。这种情况下我们不可能将所有数据重新再导入一遍,所以此时需要数据增量导入。

增量导入数据分为两种方式:

一是基于递增列的增量数据导入(Append方式)。

二是基于时间列的数据增量导入(LastModified方式)。

二、增量导入

方式一:Append方式

比如:有一个订单表,里面每个订单有一个唯一标识自增列ID,在关系型数据库中以主键形式存在,之前已经将id在1-3的编号的订单导入到了Hive中,现在一段时间后我们需要将近期产生的新的订单数据(id为4、5的两条数据)导入Hive,供后续数仓进行分析。此时我们只需要指定-incremental参数为append,-last-value参数为3即可。表示只从大于3后开始导入。

1、MYSQL建表

CREATE TABLE `appendTest` (

`id`int(11) ,

`name` varchar(255)

)

2、导入数据

insert into appendTest(id,name) values(1,'name1');

insert into appendTest(id,name) values(2,'name2');

insert into appendTest(id,name) values(3,'name3');

3、创建一张跟mysql中的appendTest表一样的hive表appendTest

sqoop create-hive-table \--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \--password 010209\--table appendTest \--hive-table appendTest

4、进行导入,将id>0的三条数据进行导入

sqoop import \--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \--P \--table appendTest \--hive-import \-m 1\

--hive-table appendTest \--incremental append \--check-column id \--last-value 0

结果:

5、查看

6、向mysql表appendTest再次插入数据

insert into appendTest(id,name) values(4,'name4');

insert into appendTest(id,name) values(5,'name5');

7、再次执行增量导入

由于上一次导入的时候,,将--last-value设置为0,将id>0的三条数据导入后,现在进行导入了时候需要将last-value设置为3

sqoop import \--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \--P \--table appendTest \--hive-import \-m 1\

--hive-table appendTest \--incremental append \--check-column id \--last-value 3

结果:

8、查看hive表appendTest

重要参数说明:

9、说明

说明:

增量抽取,需要指定--incremental append,同时指定按照源表中哪个字段进行增量--check-column id,

并指定hive表appendTest当前最大值--last-value 3。创建sqoop job的目的是,每次执行job以后,sqoop会自动记录appedndTest的last-value,

下次再执行时,就会自动指定last-value,不需要手工去改了。

方式二:lastModify方式

基于lastModify的方式,要求原表中有time字段,它能指定一个时间戳,让SQoop把该时间戳之后的数据导入至Hive,因为后续订单可能状态会发生变化,变化后time字段时间戳也会发生变化,此时SQoop依然会将相同状态更改后的订单导入Hive,当然我们可以指定merge-key参数为id,表示将后续新的记录与原有记录合并。

1、Mysql建表

CREATE TABLE lastModifyTest (

id INT,

name VARCHAR (20),

last_mod TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

);

2、导入数据

insert into lastModifyTest(id,name) values(1,'enzo');

insert into lastModifyTest(id,name) values(2,'din');

insert into lastModifyTest(id,name) values(3,'fz');

insert into lastModifyTest(id,name) values(4,'dx');

insert into lastModifyTest(id,name) values(5,'ef');

3、HIve建表

sqoop create-hive-table \

--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \

--password 010209\

--table lastModifyTest \

--hive-table lastModifyTest

4、导入数据,将

时间以后的数据进行导入

sqoop import \--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \--P \--table lastModifyTest \--hive-import \-m 1\--hive-table lastModifyTest \--incremental lastmodified \--check-column last_mod \--last-value "2019-05-14 15:17:23"

结果:

5、查看数据导入结果

6、参数说明

全量导入

将mysql表中全部数据都导入Hive,下面来查看实例:

1、MYSQL数据

2、一次性将mysql表im数据全量导入hive中

sqoop import \--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \--password 010209\--table im \--hive-import \--hive-table im \-m 1

减量导入

设置where条件,通过判断条件可以判断减少的数据和增加的数据,控制更加灵活。

sqoop import \--connect jdbc:mysql://192.168.200.100:3306/yang \

--username root \--P \--table appendTest \--hive-import \-m 1\--incremental append \--where "age>30"

--check-column id \--last-value 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值