使用sqoop导入增量数据.

核心参数

--check-column

用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系行数据库中的自增字段及时间戳类似
这些被指定的列的类型不能使用任意字符类型,如char、varchar等类型都是不可以的,同时 --check-column 可以去指定多个列

--incremental

用来指定增量导入的模式,两种模式分别为append 和 lastmodified

--last-value

指定上一次导入中检查列指定字段的最大值

append模式

  • 创建mysql表
CREATE TABLE `sqoop_test` (
`id` int() DEFAULT NULL,
`name` varchar() DEFAULT NULL,
`age` int() DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
  • 创建hive表(表结构与mysql一致)
hive> create external table sqoop_test(id int,name string,age int)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','
> STORED AS TEXTFILE
> location '/user/hive/external/sqoop_test';
OK
Time taken: 0.126 seconds
  • 先导入mysql中的原始数据
sqoop import --connect jdbc:mysql://localhost:3306/sqooptest --username root --password 123qwe --table sqoop_test
--hive-import --hive-overwrite --hive-table sqoop_test --fields-terminated-by ',' -m 1

导入成功,查看hive表中的数据

hive> select * from sqoop_test;
OK
fz
dx
test
Time taken: 0.074 seconds, Fetched: row(s)
  • 在mysql中添加几条增量数据
    fz
dx
test
test_add_1
test_add_2
test-add-
test-
test-
  • 现在开始导入增量数据,增量数据加入前最大id值为3

开始尝试这样写

sqoop import --connect jdbc:mysql://localhost:3306/sqooptest --username root --password 123qwe --table sqoop_test
--hive-import --hive-table sqoop_test --check-column id --incremental append --last-value 3 -m 1

但是提示append模式不支持写入到hive表中

Append mode for hive imports is not yet supported. Please remove the parameter --append-mode

正确写法,直接写入到hdfs

sqoop import --connect jdbc:mysql://localhost:3306/sqooptest --username root --password 123qwe --table sqoop_test
--target-dir '/user/hive/external/sqoop_test' --incremental append --check-column id --last-value 3 -m 1

job完成,在hive查看表数据

hive> select * from sqoop_test;
OK
fz
dx
test
test_add_1
test_add_2
test-add-
test-
test-
Time taken: 0.075 seconds, Fetched: row(s)

成功。

Lastmodified模式

  • Mysql新建一个表customertest
CREATE TABLE customertest (
id INT,
name VARCHAR (),
last_mod TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

插入数据

insert into customertest(id,name) values(,'enzo');
insert into customertest(id,name) values(,'din');
insert into customertest(id,name) values(,'fz');
insert into customertest(id,name) values(,'dx');
insert into customertest(id,name) values(,'ef');
    enzo    -- ::
din -- ::
fz -- ::
dx -- ::
ef -- ::
  • 在hive中新建表customertest,表结构类似
hive> create table customertest(id int,name string,last_mod string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','
> STORED AS TEXTFILE;
OK
Time taken: 0.189 seconds
  • 导入mysql表中的数据
sqoop import --connect jdbc:mysql://localhost:3306/sqooptest --username root --password 123qwe --table customertest
--hive-import --hive-table customertest --fields-terminated-by ',' -m 1
hive> select * from customertest;
OK
enzo -- ::54.0
din -- ::58.0
fz -- ::01.0
dx -- ::05.0
ef -- ::09.0
Time taken: 0.064 seconds, Fetched: row(s)
  • 此时在mysql中插入一条数据
insert into customertest(id,name) values(,'enzoDin')

插入之后表中的数据

    enzo    -- ::
din -- ::
fz -- ::
dx -- ::
ef -- ::
enzoDin -- ::
  • 再来根据last_mod来导入增量数据
sqoop import --connect jdbc:mysql://localhost:3306/sqooptest --username root --password 123qwe --table customertest
--hive-import --hive-table customertest --check-column last_mod --incremental lastmodified --last-value "2017-09-20 16:13:09" --fields-terminated-by ',' -m 1

导入成功

hive> select * from customertest;
OK
enzo -- ::54.0
din -- ::58.0
fz -- ::01.0
dx -- ::05.0
ef -- ::09.0
ef -- ::09.0
enzoDin -- ::53.0
Time taken: 0.064 seconds, Fetched: row(s)

查看hive中的数据会发现插入了两条数据,这是因为使用lastmodified 会将大于等于 –last-value 的值都导入进来,所以会造成数据的重复

研究下merge-key....

sqoop导入增量数据的更多相关文章

  1. sqoop 导入增量数据到hive

    版本 hive:apache-hive-2.1.0 sqoop:sqoop-1.4.6 hadoop:hadoop-2.7.3 导入方式 1.append方式 2.lastmodified方式,必须要 ...

  2. Sqoop导入mysql数据到Hbase

    sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysql://11.143.18.29:3306/db_1" ...

  3. Sqoop导入MySQL数据

    导入所有表: sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password p ...

  4. 第3节 sqoop:6、sqoop的数据增量导入和数据导出

    增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...

  5. sqoop导入数据

    来源https://www.cnblogs.com/qingyunzong/p/8807252.html 一.概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据 ...

  6. 大数据学习——sqoop导入数据

    把数据从关系型数据库导入到hadoop 启动sqoop 导入表表数据到HDFS 下面的命令用于从MySQL数据库服务器中的emp表导入HDFS. sqoop import \ --connect jd ...

  7. sqoop上传数据到hdfs,并用hive管理数据。

    sqoop导入mysql数据表到HDFS中sqoop import --connect jdbc:mysql://master:3306/test --username root --password ...

  8. 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct

    一.增量数据的导入 1.两种方式 ## query 有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime where createtime => 201509240000 ...

  9. Sqoop将mysql数据导入hbase的血与泪

    Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天)  版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunsh ...

随机推荐

  1. hdu 1159(Common Subsequence)简单dp,求出最大的公共的字符数

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. 使用OSChina代码托管管理项目(四)

    本篇主要介绍使用Eclipse的Egit插件克隆远程project到本地的操作步骤 一.在Git资源库管理视图中新建一个远程资源库位置 点击红框中button进行加入 二.输入远程资源库相关信息.选择 ...

  3. Away3D引擎学习笔记(二)CameraController相机控制的应用

    cameraController---相机控制器 这里针对Away3D里面封装的CameraController的区别和使用做些简单介绍.相机控制器的设计思路比较清晰,所以难点东西不多.使用方面附上源 ...

  4. (二)spark算子 分为3大类

     transgormation的算子对key-value类型的数据有三种: (1)输入 与 输出为一对一关系 mapValue();针对key-value类型的数据并只对其中的value进行操作,不对 ...

  5. 简洁方便的集合处理——Java 8 stream流

    背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表 ...

  6. shell脚本中8种字符串截取方法_转自脚本之家

    转自:http://www.jb51.net/article/56563.htm 参考:http://blog.csdn.net/taiyang1987912/article/details/3955 ...

  7. 【SQLServer2008】之Win10 安装 SQL Server 2008

    查看安装步骤链接: http://jingyan.baidu.com/article/1709ad8092be974634c4f0e7.html

  8. java服务安装(一):使用java service wrapper及maven打zip包

    目录(?)[+] 1概述 1_1为什么要用服务形式运行 1_2如何让java程序以服务形式运行 1_3打包需求 2程序示例 3maven打zip包 3_1maven-assembly-plugin介绍 ...

  9. 电路分析二-------基尔霍夫定律KCL和KVL

    1.先了解几个名词 (1)支路----一个二端原件视为一条支路--图中6个二端原件所以有6条支路. (2)结点----两条或以上的支路连接的点. d,e可以看做一个结点. (3).回路----- (4 ...

  10. 20179209《Linux内核原理与分析》第十二周作

    缓冲区溢出漏洞实验 缓冲区溢出简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器 ...