執行如下指令先將咱們以前的數據導入mysql
sqoop import \ --connect jdbc:mysql://master:3306/test \ --username hive \ --password 123456 \ --table customer \ -m 1
使用hdfs dfs -cat查看生成的數據文件,發現數據已經導入.而後咱們在mysql的customer中插入2條數據sql
insert into customer values(6,'james'); insert into customer values(7,'luna');
執行以下的指令,實現增量的導入數據庫
sqoop import \ --connect jdbc:mysql://master:3306/test \ --username hive \ --password 123456 \ --table customer \ --check-column id \ --incremental append \ --last-value 5
在數據庫的表字段中經常會設置一個自增的字段來做爲數據表的主鍵,咱們這裏以id字段來做爲判斷數據行是否爲增量數據的依據.last-value設置上次導入的id的最大值,所以sqoop就只會將id值在5~7之間的數據進行導入,實現了增量的導入
注意:若是不指定last-value值,將會將表的全部數據進行導入,便發生了數據的冗餘app
首先咱們要建立一個customer表,指定一個時間戳字段oop
create table customertest(id int,name varchar(20),last_mod timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
咱們再次插入以下記錄:spa
insert into customertest(id,name) values(1,'neil'); insert into customertest(id,name) values(2,'jack'); insert into customertest(id,name) values(3,'martin'); insert into customertest(id,name) values(4,'tony'); insert into customertest(id,name) values(5,'eric');
此處的時間戳設置爲在數據的產生和更新時都會發生改變.
咱們此時執行sqoop指令將數據導入hdfs,code
sqoop import \ --connect jdbc:mysql://master:3306/test \ --username hive \ --password 123456 \ --table customertest -m 1
咱們再次插入一條數據進入customertest表圖片
insert into customertest(id,name) values(6,'james')
咱們使用incremental的方式進行增量的導入rem
sqoop import \ --connect jdbc:mysql://master:3306/test \ --username hive \ --password 123456 \ --table customertest \ --check-column last_mod \ --incremental lastmodified \ --last-value "2016-12-15 15:47:29" \ -m 1 \ --append
此處已經會導入咱們最後插入的一條記錄,可是咱們卻發現此處插入了2條數據,這是爲何呢?
這是由於採用lastmodified模式去處理增量時,會將大於等於last-value值的數據當作增量插入.
注意:
使用lastmodified模式進行增量處理要指定增量數據是以append模式(附加)仍是merge-key(合併)模式添加
咱們演示使用merge-by的模式進行增量更新,咱們去update id爲1的name字段table
update customertest set name = 'Neil' where id = 1;
更新以後,這條數據的時間戳會更新爲咱們更新數據時的系統時間,咱們執行以下指令,把id字段做爲merge-key
sqoop import \ --connect jdbc:mysql://master:3306/test \ --username hive \ --password 123456 \ --table customertest \ --check-column last_mod \ --incremental lastmodified \ --last-value "2016-12-15 15:47:30" \ -m 1 \ --merge-key id
因爲merge-key這種模式是進行了一次完整的maoreduce操做,所以最終咱們在customertest文件夾下能夠看到生成的爲part-r-00000這樣的文件,會發現id=1的name已經獲得修改,同時新增了id=6的數據