开发者学堂课程【Sqoop 企业级大数据迁移方案实战:导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/718/detail/12840
导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据)
一、Merge key 合并数据
在这 Lastmodified 种模式下,会根据我们的时间类型的字段进行增量导入,在默认的情况下,是 append 追加(新增的两个数据以追加的形式或者附加的形式产生一个新的文件),另外一个模式叫 Merge key(合并),这种模式是指定相关的 ID 后,会根据我们 id 来进行判断,如果数据有更新或者有变化,就会合并成新的文件,Merge key 相当于把变化数据新增数据的统一的更新到一个文件当中,相当于从零开始做一个更新。
使用 merge-by 的模式进行增量更新,我们去更新 id 为1的 name
字段。
update customertest set name=Neilwhere id=1;
将以上代码进行复制,运行,刷新后会发新名称已经被修改,更新之后,这条数据的时间戳会更新为更新数据时的系统时间
执行如下指令,把 id 字段作为 merge-key:
bin/sqoop import\
--connect jdbe:mysql://node-1:3306/userdb
--username root
--password hadoop
--table customertest\
--target-dir/lastmodifiedresult\
--check-column last mod
--incremental lastmodified\
--last-value
“2019-05-28 18:42:06”
--m1\
--merge-key id
会发现导入的时间已经增加上了,第一条时间也发生了改变
这种模式进行合并的时候,相当于做了两件事,第一个如果数据当中有变化,会把变化的数据同步过来,第二个如果数据有追加有新增的数据,也会把增量数据变换过来,而且会出现同一条记录重复的情况,比如说一个表,一个订单或者一个用户信息,这一个月增加了20万个用户,在你把这20万元的数据导入过来的同时,之前的数据可能有某些信息也发生了变化,让你把这些变化的数据也进行同步,用这个模式将会非常的方便,它既可以导入增量数据又可以把更新的数据变化过来,相当于做了一次完整的程序,而且会保证数据的不重复。
小记:
1、关于 lastmodified 中的两种模式:
(1)oappend 只会追加增量数据到一个新的文件中 并且会产生数据的重复问题,因为默认是从指定的 last-value 大于等于其值的数据开始导入
(2)o merge-key 把增量的数据合并到一个文件中 处理追加增量数据之外如果之前的数据有变,修改也可以进行修改操作底层相当于进行了一次完整的 m 作业。数据不会重复。