开发者学堂课程【Sqoop 企业级大数据迁移方案实战:导入 Import--增量导入--Lastmodified 模式(附加数据)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/718/detail/12839
导入 Import--增量导入--Lastmodified 模式(附加数据)
一、增量导入
last modified(上一次的更新时间),这种模式下的增量跟表中的时间戳相关,时间这种类型的字段能够表示数据的变化。
首先创建一个 customer 表,指定一个时间戳字段:
Create table customer test (id int name var char(20),last mod
timestamp default current timestamp on update current timestamp);
第一个字段 id int,第二个字段 name var char,第三个字段叫做 last mod(上次更新时间),它的类型是timestamp(时间戳类型),default 如果不指定,默认值会是当前系统的时间 current times,而且在更新的时候数据发生修改也未修改为更新的当前时间,就意味着表当中的这个字段会在数据产生变化的时候呢都会更新时间。
首先打 my circle(查询),将以上进行复制,运行并刷新,会发现多了一个名为 customer-test
将以下分别插入如下记录:
insert into customertest(idname)values(1neil’):
insert into customertest(idname)values(2.jack’):
insert into customertest(idname)values(3martin):
insertintocustomertest(idname)values(4,tony);insertintocustomertest(idname)values(5,eric);
可以将以上代码进行分别复制和运行,会出现对应的时间
执行 sqoop 指令将数据全部导入 hdfs:
bin/sqoop import\
--connect jdbc:mysql://node-1:3306/userdb
--username root\
--password hadoop\
--target-dir/lastmodifiedresult\
--table customertest-m1
服务器已经提示完成后显示会有五条记录,进行刷新与核对。
改变表数据:
再去 insert 一条记录,进行复制
insert into customer-test(id name) values (6,"James")
运行后,相当于在 customer-test 多了一条数据。
根据时间戳进行增量的导入:
bin/sqoop import \
-connect jdbc: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\
--append
追加模式:check-column(检测字段)叫做 last mod,追加模式是 last modified,把上一次五条记录粘贴过来,append 进行追加。
将以上代码进行复制,进行运行后会发现出现两条记录,发现刚才的时间又重复了一遍,这是因为采用 last modified 模式去处理增量时,会将大于等于 last-value 值的数据当做增量插入。所以一定要避免导入数据重复的问题。
小记:
增量数据的导入
1、所谓的增量数据指的是上次至今中间新增加的数据
2、osgaop 支持两种模式的增量导入
(1)append 追加根据数值类型字段进行追加导入大于指定的 last-value
(2)lastmodified 根据时间戳类型字段进行追加 大于等于指定的 lastvalue
(3)注意在 lastmodified 模式下还分为两种情形:append merge-key