增量导入
在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导入,为了支持增量的导入,sqoop也给我们考虑到了这种情况并且支持增量的导入数据
增量导入是仅导入新添加的表中的行的技术。
它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。
下面的语法用于Sqoop导入命令增量选项。
第一种增量导入使用上面的选项来实现
导入emp表当中id大于1202的所有数据
注意:增量导入的时候,一定不能加参数--delete-target-dir否则会报错
bin/sqoop import \
‐‐connect jdbc:mysql://192.168.1.7: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.1.7:3306/userdb \
‐‐username root \
‐‐password admin \
‐‐table emp \
‐‐incremental append \
‐‐where "create_time > '2018‐06‐17 00:00:00' and create_time < '2018‐06‐
17 23:59:59'" \
‐‐target‐dir /sqoop/incement2 \
‐‐check‐column id \
‐‐m 1
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://192.168.1.7:3306/userdb \
‐‐username root ‐‐password root \
‐‐table emp_out \
‐‐export‐dir /sqoop/emp \
‐‐input‐fields‐terminated‐by ","