开发者学堂课程【Sqoop 企业级大数据迁移方案实战:导入 Import--增量导入--Append 模式】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/718/detail/12838
导入 Import--增量导入--Append 模式
内容介绍:
一、Append 模式增量导入
二、Lastmodified 模式增量导入
三、Lastmodified 模式:append、merge-key
在企业中实际工作当中,比如公司从今天开始成立了数据分析部门,今天需要做的就是把所有的数据全部导入进来,这叫做全量数据,导入之后过了一个星期之后有需要分析需要分析,老板要求把新增加的数据导入进来进行分析,这个时候就没有必要把所有数据从零开始全部导入进来,只需要把这一个星期之内新增加的数据导入进来,新增加的数据就被称为增量数据,在企业的实际工作当中,往往数据的导入都是增量数据的导入而不是每次都需要把全部表的数据都导入进来,因为这样的导入第一工作量比较大,第二之前导过再导入会产生数据的重复,那么 sqoop 在底层也满足增量导入,其实要想支持增量导入首先需要一个判断的依据,我上一次干到哪里了,这一次需要从哪里继续,叫增量导入。比如说导入一个叫学生的表,上一周导入到了学生编号为1202,那么这周就应该从1203开始导入,下一周导入到1303,这样从理论上猜想他的技术,有一个判断的依据来作为检测某一字段是不是有增量的变化。在 sqoop 进行增量导入有三个核心参数来控制,如下:
--check - columnl ( col )
用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似。这个列不是瞎导入,比如说制定学生姓名,上一次导入到张三,这次是李四就是不可以的。这个字段往往是组件是数字字段或时间戳,因为字增长不重复。并且字段可以指定多个,比如制定一个id组件再指定一个更新的时间。
注意:这些被指定的列的类型不能使任意字符类型,如 char 、 varchar 等类型都是不可以的,同时--check -column 可以去指定多个列。
-- incremental ( mode )增量导入的模式
append :追加,比如对大于 last - value 指定的值之后的记录进行追加导入。
lastmodified:最后的修改时间,追加 last - value 指定的日期之后的记录。
-- last - value ( value )
指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值。
增量导入是仅导入新添加的表中的行的技术。
一、 Append 模式增量导入
执行以下指令先将我们之前的数据导入:
bin / sqoop import \
--connect jdbc:mysql :// node -1:3306/userdb\
--username root \
--password hadoop \
--target - dir / appendresult \
--table emp
—m1
使用 hadoop fs - cat 查看生成的数据文件,发现数据已经导入到 hdfs 中。
然后在 mysql 的 emp 中插入2条增量数据:
执行如下的指令,实现增量的导入:
bin / sqoop import \
-- connect jdbc : mysq // node -1:3306/userdb\
--username root \-- password hadoop \
-- table emp --m 1\
-- target - dir / appendresult \
--incremental append \
--check - column id \
(检测字段为 id)
-- last - value 1205
最后验证导入数据目录 可以发现里面多了一个文件 里面就是增量数据
打开脚本,首先把之前所有的数据进行全量导入,把 emp 表中的全部数据导入 appendresult 中,有五条数据,
发现现在这个表中的全量数据跟增量没有关系,
接下来模拟经过一天产生了新的数据,往表中插入两条记录,把 insert into 复制下来,
新建一个查询,选中做一个运行,
然后刷新 emp 数据记录表发现多了两条数据。
append 为追加模式,--check - column id 检测字段 id,-- last - value 1205猜想这次应该从1206开始导入。
接下来看看是否能把增加的数据全部导入,有没有重复有没有问题。打开 sqoop 进行执行,sqoop 必须借助 m 码来执行,所以需要一定的时间。在网页中发现现在又多了一个新的文件-00001,
打开文件发现里面只有1206,1207两条数据,这样就满足了增量数据的追加导入。
在进行 append 时,上一次检测的字段往往是数值类型的,不能乱写,至于数值是多少,由自己来指定,默认为上次的最大值,比如说这次结束时是1207,那么下次就从1208开始。要注意细节,不要造成数据的重复。