增量导入

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

增量导入是仅导入新添加的表中的行的技术。

它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。

下面的语法用于Sqoop导入命令增量选项。

--incremental <mode>

--check-column <column name>

--last value <last check column value>

第一种增量导入使用上面的选项来实现

导入emp表当中id大于1202的所有数据

注意:增量导入的时候,一定不能加参数--delete-target-dir否则会报错

bin/sqoop import \

--connect jdbc:mysql://192.168.8.120:3306/userdb \

--username root \

--password root \

--table emp \

--incremental append \

--check-column id \

--last-value 1202  \

-m 1 \

--target-dir /sqoop/increment

查看数据内容

hdfs dfs -text /sqoop/increment/part*

第二种增量导入通过--where条件来实现

或者我们使用--where来进行控制数据的选取会更加精准

bin/sqoop import \

--connect jdbc:mysql://192.168.8.120:3306/userdb \

--username root \

--password root  \

--table emp \

--incremental append  \

--where "create_time > '2018-06-17 00:00:00' and is_delete='1' and create_time < '2018-06-17 23:59:59'" \

--target-dir /sqoop/increment2 \

--check-column id  \

--m 1

作业:增量导入hive表中该如何实现???

面试题:如何解决减量数据???

答:根据我们的create_time  与update_time 两个条件可以判断我们哪些数据是前一天新增的,或者是前一天修改的

bin/sqoop import \

--connect jdbc:mysql://192.168.8.120:3306/userdb \

--username root \

--password root  \

--table emp \

--incremental append  \

--where "(create_time > '2018-06-17 00:00:00' and is_delete='1' and create_time < '2018-06-17 23:59:59') or (update_time  > '2018-06-17 00:00:00'  and  update_time < '2018-06-17 23:59:59')"  \

--check-column id  \

--target-dir /sqoop/increment3  \

-m 1

3.6、 Sqoop的数据导出

1、将数据从HDFS把文件导出到RDBMS数据库

导出前,目标表必须存在于目标数据库中。

u  默认操作是从将文件中的数据使用INSERT语句插入到表中

u  更新模式下,是生成UPDATE语句更新表数据

hdfs导出到mysql

数据是在HDFS当中的如下目录/sqoop/emp,数据内容如下

1201,gopal,manager,50000,TP,2018-06-17 18:54:32.0,2018-06-17 18:54:32.0,1

1202,manisha,Proof reader,50000,TP,2018-06-15 18:54:32.0,2018-06-17 20:26:08.0,1

1203,khalil,php dev,30000,AC,2018-06-17 18:54:32.0,2018-06-17 18:54:32.0,1

1204,prasanth,php dev,30000,AC,2018-06-17 18:54:32.0,2018-06-17 21:05:52.0,0

1205,kranthi,admin,20000,TP,2018-06-17 18:54:32.0,2018-06-17 18:54:32.0,1

第一步:创建mysql表

CREATE TABLE `emp_out` (

`id` INT(11) DEFAULT NULL,

`name` VARCHAR(100) DEFAULT NULL,

`deg` VARCHAR(100) DEFAULT NULL,

`salary` INT(11) DEFAULT NULL,

`dept` VARCHAR(10) DEFAULT NULL,

`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`is_delete` BIGINT(20) DEFAULT '1'

) ENGINE=INNODB DEFAULT CHARSET=utf8;

第二步:执行导出命令

通过export来实现数据的导出,将hdfs的数据导出到mysql当中去

bin/sqoop export \

--connect jdbc:mysql://172.16.43.67:3306/userdb \

--username root --password admin \

--table emp_out \

--export-dir /sqoop/emp \

--input-fields-terminated-by ","

第三步:验证mysql表数据

3.7、 Sqoop作业(了解,一般用不到)

3.8、Sqoop一些常用命令及参数(用到的时候再翻翻)

第3节 sqoop:6、sqoop的数据增量导入和数据导出的更多相关文章

  1. Oracle导出表数据与导入表数据dmp,以及导入导出时候常见错误

    使用DOS 操作界面导出表数据,导入表数据(需要在数据库所在的服务器上边执行) exp UserName/Password@192.168.0.141/orcl   file=d:\xtables.d ...

  2. 【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中

    最近有一个将 mysql 数据导入到 MongoDB 中的需求,打算使用 Kettle 工具实现.本文章记录了数据导入从0到1的过程,最终实现了每秒钟快速导入约 1200 条数据.一起来看吧~ 一.K ...

  3. Sqoop实现自定义job的增量导入

    需求:redis缓存的数据隔段时间往MySQL中写入一次.如果按照job的增量导入,比如上次redis向mysql导入数据时间为8:00,下一次导入时间为9:00,8:20sqoop进行增量导入,导入 ...

  4. 使用数据泵导入(impdp)和导出(expdp)

    数据泵技术是Oracle Database 10g 中的新技术,它比原来导入/导出(imp,exp)技术快15-45倍.速度的提高源于使用了并行技术来读写导出转储文件. expdp使用 使用EXPDP ...

  5. 【PHP】将EXCEL表中的数据轻松导入Mysql数据表

    在网络上有不较多的方法,在此介绍我已经验证的方法. 方法一.利用EXCEL表本身的功能生成SQL代码 ①.先在“phpmyadmin”中建立数据库与表(数据库:excel,数据表:excel01,字段 ...

  6. 将EXCEL表中的数据轻松导入Mysql数据表

    转载自:http://blog.163.com/dielianjun@126/blog/static/164250113201042310181431/ 在网络上有不较多的方法,在此介绍我已经验证的方 ...

  7. 文本数据增量导入到mysql

    实现思路:       实现Java读取TXT文件中的内容并存到内存,将内存中的数据和mysql 数据库里面某张表数据的字段做一个比较,如果比较内存中的数据在mysql 里存在则不做处理,如果不存在则 ...

  8. sqlyog备份数据和导入备份数据

    使用sqlyog备份数据 Database -> Backup/Export  -> Backup Database As SQL Dump 根据自己实际情况,看需要 导出表结构或者仅仅只 ...

  9. Apache Sqoop - Overview——Sqoop 概述

    Apache Sqoop - Overview Apache Sqoop 概述 使用Hadoop来分析和处理数据需要将数据加载到集群中并且将它和企业生产数据库中的其他数据进行结合处理.从生产系统加载大 ...

随机推荐

  1. lnmp1.5安装memcache

    1.安装libevent 由于Memcache用到了libevent这个库用于Socket的处理,所以需要安装libevent. # wget http://www.monkey.org/~provo ...

  2. Mockito 中文文档 ( 2.0.26 beta )

    Mockito 中文文档 ( 2.0.26 beta ) 由于缺乏校对,难免有谬误之处,如果发现任何语句不通顺.翻译错误,都可以在github中的项目提出issue.谢谢~ Mockito框架官方地址 ...

  3. where、having区别

    where  <<   group by   <<   having where筛选是在分组之前筛选,筛选完之后再group by having是分组之后再筛选,筛选完之前先g ...

  4. HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历

    我们先来做一个测试 public class HashMapTest { private HashMap<String, String> map = new HashMap<> ...

  5. 【原】nginx配置文件

    一:下载nginx方式 1.yum install nginx 2.源码安装 二:学习网址 nginx documentation — DevDocs 三:配置文件信息 server { listen ...

  6. 2019暑期集训第二讲 - 组合数学&概率&数学期望

    A - 容斥原理(CodeForces - 451E) 二进制状态压缩暴力枚举哪几个花选的个数超过了总个数,卢卡斯定理求组合数,容斥原理求答案 可以先把每个花的数量当成无限个,这样就是一个多重集的组合 ...

  7. android开发如何在页面之间传参

    第一个页面跳转 传递值 Button bn1=(Button)findViewById(R.id.btn_Login); //跳转bn1.setOnClickListener(new OnClickL ...

  8. android传递数据bundle封装传递map对象

    android开发默认情况下,通过Bundle bundle=new Bundle();传递值是不能直接传递map对象的,解决办法: 第一步:封装自己的map,实现序列化即可 ? 1 2 3 4 5 ...

  9. html-webpack-plugin & clean-webpack-plugin

    html-webpack-plugin Introduction: The HtmlWebpackPlugin simplifies creation of HTML files to serve y ...

  10. 「HNOI2004」宠物收养场

    「HNOI2004」宠物收养场 传送门 对宠物和人各维护一棵平衡树,每次 \(\text{split}\) 的时候记得判一下子树是否为空,然后模拟就好了. 参考代码: #include <alg ...