导入 Import--增量导入--Append 模式 | 学习笔记

简介: 快速学习 导入 Import--增量导入--Append 模式

开发者学堂课程【Sqoop 企业级大数据迁移方案实战导入 Import--增量导入--Append 模式】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/718/detail/12838


导入 Import--增量导入--Append 模式


内容介绍:

一、Append 模式增量导入

二、Lastmodified 模式增量导入

三、Lastmodified 模式:appendmerge-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 empm1

使用 hadoop fs - cat 查看生成的数据文件,发现数据已经导入到 hdfs 中。

然后在 mysql emp 中插入2条增量数据:

image.png

执行如下的指令,实现增量的导入:

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

image.png

最后验证导入数据目录 可以发现里面多了一个文件 里面就是增量数据

image.png

打开脚本,首先把之前所有的数据进行全量导入,把 emp 表中的全部数据导入 appendresult 中,有五条数据,

发现现在这个表中的全量数据跟增量没有关系,

image.png

接下来模拟经过一天产生了新的数据,往表中插入两条记录,insert into 复制下来,

image.png

新建一个查询,选中做一个运行,

image.png

然后刷新 emp 数据记录表发现多了两条数据。

image.png

append 为追加模式,--check - column id 检测字段 id-- last - value 1205猜想这次应该从1206开始导入。

image.png

接下来看看是否能把增加的数据全部导入,有没有重复有没有问题。打开 sqoop 进行执行,sqoop 必须借助 m 码来执行,所以需要一定的时间。在网页中发现现在又多了一个新的文件-00001

image.png

打开文件发现里面只有1206,1207两条数据,这样就满足了增量数据的追加导入。

image.png

在进行 append 时,上一次检测的字段往往是数值类型的,不能乱写,至于数值是多少,由自己来指定,默认为上次的最大值,比如说这次结束时是1207,那么下次就从1208开始。要注意细节,不要造成数据的重复。

相关文章
一行代码 base64批量解密
一行代码 base64批量解密
134 0
|
6月前
|
XML 数据格式 Python
Python的`import`用于加载模块,基础形式是`import module`,全量导入
【6月更文挑战第23天】Python的`import`用于加载模块,基础形式是`import module`,全量导入;`from module import name`选择性导入部分,减少命名空间污染;`from module import *`导入所有(不推荐),易引发冲突。别名导入如`from math import sqrt as square_root`可避免冲突。包导入用`.`,如`import xml.etree.ElementTree as ET`。
71 8
|
6月前
|
存储 分布式计算 大数据
MaxCompute操作报错合集之自定义udf的函数,引用了import net.sourceforge.pinyin4j.PinyinHelper;但是上传资源后,出现报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
115 0
|
前端开发
element-plus的自动导入和按需导入
element-plus的自动导入和按需导入
901 0
|
JavaScript
【ES6】模块化语法(默认、按需导入import导出export的操作)
ES6模块化语法(默认、按需导入导出的操作)
【ES6】模块化语法(默认、按需导入import导出export的操作)
|
分布式计算 关系型数据库 MySQL
导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据) | 学习笔记
快速学习 导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据)
220 0
导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据) | 学习笔记
|
SQL 存储 分布式计算
导入 Import--表子集数据导入 | 学习笔记
快速学习 导入 Import--表子集数据导入
149 0
导入 Import--表子集数据导入 | 学习笔记
|
存储 SQL 分布式计算
导出 Export--默认模式导出(Insert)| 学习笔记
快速学习 导出 Export--默认模式导出(Insert)
223 0
导出 Export--默认模式导出(Insert)| 学习笔记
|
分布式计算 关系型数据库 MySQL
导入 Import--全量数据导入 Hdfs--并行度设置&注意事项 | 学习笔记
快速学习 导入 Import--全量数据导入 Hdfs--并行度设置&注意事项
223 0
导入 Import--全量数据导入 Hdfs--并行度设置&注意事项 | 学习笔记