使用sqoop导入增量数据.

核心参数

--check-column

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

--incremental

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

--last-value

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

append模式

  • 创建mysql表
  1. CREATE TABLE `sqoop_test` (
  2. `id` int() DEFAULT NULL,
  3. `name` varchar() DEFAULT NULL,
  4. `age` int() DEFAULT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  • 创建hive表(表结构与mysql一致)
  1. hive> create external table sqoop_test(id int,name string,age int)
  2. > ROW FORMAT DELIMITED
  3. > FIELDS TERMINATED BY ','
  4. > STORED AS TEXTFILE
  5. > location '/user/hive/external/sqoop_test';
  6. OK
  7. Time taken: 0.126 seconds
  • 先导入mysql中的原始数据
  1. 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表中的数据

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

开始尝试这样写

  1. 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

  1. 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查看表数据

  1. hive> select * from sqoop_test;
  2. OK
  3. fz
  4. dx
  5. test
  6. test_add_1
  7. test_add_2
  8. test-add-
  9. test-
  10. test-
  11. Time taken: 0.075 seconds, Fetched: row(s)

成功。

Lastmodified模式

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

插入数据

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

插入之后表中的数据

  1. enzo -- ::
  2. din -- ::
  3. fz -- ::
  4. dx -- ::
  5. ef -- ::
  6. enzoDin -- ::
  • 再来根据last_mod来导入增量数据
  1. 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

导入成功

  1. hive> select * from customertest;
  2. OK
  3. enzo -- ::54.0
  4. din -- ::58.0
  5. fz -- ::01.0
  6. dx -- ::05.0
  7. ef -- ::09.0
  8. ef -- ::09.0
  9. enzoDin -- ::53.0
  10. 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. SpringBoot启动流程分析(五):SpringBoot自动装配原理实现

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  2. Unity2D实现人物三连击

    之前写过一个系列<HTML5 2D平台游戏开发>,在此过程中发现有很多知识点没有掌握,而且用纯JavaScript来开发一个游戏效率极低,因为调试与地图编辑都没有可视化的工具,开发起来费时 ...

  3. 【数据挖掘】关联分析之Apriori(转载)

    [数据挖掘]关联分析之Apriori 1.Apriori算法 如果一个事务中有X,则该事务中则很有可能有Y,写成关联规则 {X}→{Y} 将这种找出项目之间联系的方法叫做关联分析.关联分析中最有名的问 ...

  4. 【深入JVM】JVM工具之JMAP

    一.工具介绍 假设把java\bin文件夹配置到环境变量.在cmd输入jmap会有例如以下提示: 翻译:打印出某个java进程(使用pid)内存内的,全部'对象'的情况(如:产生那些对象,及其数量). ...

  5. C# 中安全代码与不安全代码

    C# 中安全代码与不安全代码 P/Invoke 非托管代码需要在unsafe块中书写. using System; using System.Collections.Generic; using Sy ...

  6. 图像处理之基础---2个YUV视频 拼接技术

    /************************************************* * 主要功能:两路 YUV4:2:0拼接一路左右半宽格式YUV视频 参考资料:http://www ...

  7. unity shader 编辑器扩展类 ShaderGUI

    这应该unity5才出的新功能了,今天看文档时刚巧看到了,就来尝试了一下. 效果如图: shader 的编辑器扩展分为2种方法: 是通过UnityEditor下的ShaderGUI类来实现的,形式比较 ...

  8. Android 更改项目包名的方法

    修改APP包名,即APP的唯一标识. 1.在项目上右键,选择android tools->rename application package,输入需要改为的名称,然后选择需要改的包,有部分包可 ...

  9. thinkPHP5.0的学习研究【序言】

    2017年6月19日13:19:151.ThinkPHP V5.0——为API开发而设计的高性能框架2.ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应 ...

  10. iOS 富文本类库RTLabel

      本文转载至 http://blog.csdn.net/duxinfeng2010/article/details/9004749  本节关于RTLable基本介绍,原文来自 https://git ...