本文转自:https://www.cnblogs.com/yfb918/p/10858355.html

增量导入

一、说明

当在生产环境中,我们可能会定期从与业务相关的关系型数据库向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设置为3sqoop 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

Sqoop(四)增量导入、全量导入、减量导入相关推荐

  1. solr java 全量,Solr实时创建增量或全量索引

    1,为了支持增量建索引,我们需要把上述文中的mysql-data-config.xml内容改为 query="SELECT id, title, content FROM article&q ...

  2. kylin cube 增量和全量

    2019独角兽企业重金招聘Python工程师标准>>> 全量构建与增量构建 全量构建 对数据模型中没有指定分割时间列信息的Cube,Kylin会采用全量构建,即每次从Hive中读取全 ...

  3. 4. 同步方式(增量和全量)

    4. 同步方式(增量和全量) 4.1 数据同步一般分为两种方式:全量和增量. 全量 全量,这个很好理解.就是每天定时(避开业务高峰期)或者周期性全量把数据从一个地方拷贝到另外一个地方: 全量的话,可以 ...

  4. 判断数据是增量分区全量分区

    如何判断数据是增量分区,还是全量分区 (保存数据T-1的全量,通常保存进一个月的数据为T-1的全量) 增量形式:不包含历史所有的数据,只是当天的数据 where dt between 'T-7' an ...

  5. oracle增量和全量的区别,ORACLE全备份和0级增量备份的区别

    比较官方的说法 Full A backup of a datafile that includes every allocated block in the file being backed up. ...

  6. solr 从数据库导入数据,全量索引和增量索引(实例配置原理)

    http://blog.csdn.net/u013378306/article/details/50761610 为防止原文删除特此备份 ------------------------------- ...

  7. solr 从数据库导入数据,全量索引和增量索引

    首先说一下是从MySQL数据库导入数据 这里使用的是mysql测试. 1.先在mysql中建一个表:solr_test 2.插入几条测试数据: 3.用记事本打solrconfig.xml文件,在sol ...

  8. 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)

    http://blog.csdn.net/u013378306/article/details/50761610 为防止原文删除特此备份 ------------------------------- ...

  9. 数据的增量采集与全量采集

    文章目录 前言 1. 传统数据库的增量与全量 1.1 Oracle 1.2 Mysql 2. 大数据框架的增量与全量 2.1 业务数据 2.2 日志数据 前言 本文简单示例传统数据库与大数据系统下数据 ...

  10. DM 源码阅读系列文章(四)dump/load 全量同步的实现

    作者:杨非 本文为 DM 源码阅读系列文章的第四篇,上篇文章 介绍了数据同步处理单元实现的功能,数据同步流程的运行逻辑以及数据同步处理单元的 interface 设计.本篇文章在此基础上展开,详细介绍 ...

最新文章

  1. OTA:目标检测中的最优传输分配
  2. Graves of the Internet - 互联网坟墓
  3. asp.net html5 异步,asp.net core 系列 5 项目实战之:NetCore 的 async 和 await(参考自:Microsoft教程)...
  4. 本地区间管理 oracle,Oracle:本地表空间管理,字典表空间管理
  5. 【C语言】数组名作函数参数完成数据的升序排列
  6. maven多个子项目、父项目之间的引用问题
  7. DB2数据库关于delete in id和batch delete的性能对比
  8. 如何用微观数据分析玩家流失
  9. STM32_WS2811驱动
  10. html5制作国际象棋棋盘,用3DS MAX打造国际象棋的棋盘效果 -工程
  11. MySQL时间分区案例
  12. 因子分析法(Matlab与SPSS对比)
  13. 深度Linux的安装
  14. 永远不要忽视 粉红色/红色的异样字体 在你不知道为什么跟你期望偏差那么大的时候,,不要急记得去问问为什么
  15. 永恒之蓝实验 MS17-010
  16. 做自媒体如何写好一个标题获得更多的流量
  17. 做网站服务器空间,做网站服务器空间
  18. JavaSE-Adventure(VII) Java OOP 面向对象程序设计
  19. cydia java_Cydia Substrate 使用
  20. 软件测试团队收获,软件测试中如何团队合作才能和谐?

热门文章

  1. php中如何调用datepicker,如何使用datepicker,ajax,php,mysql在两个日期之间生成报告?...
  2. 经典4大Python面试题!初级者,你所需知的(附标准答案)-上篇
  3. 深入理解Python中的生成器
  4. 5.Hadoop的学习(Hadoop的配置(伪分布式的搭建)-1)
  5. Java8 PriorityBlockingQueue源码分析
  6. 《Redis 设计与实现》读书笔记-Redis 对象
  7. VTK:Kochanek样条用法实战
  8. VTK:图像拉普拉斯算子用法实战
  9. JavaScript实现eulerianPath欧拉路径算法(附完整源码)
  10. wxWidgets:wxShowEvent类用法