导入 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开始。要注意细节,不要造成数据的重复。

相关文章
C# 解决引用dll,出现dll不可以使用等问题
C# 解决引用dll,出现dll不可以使用等问题
|
传感器 存储 算法
Python OpenCV 蓝图:1~5
Python OpenCV 蓝图:1~5
508 0
|
应用服务中间件 nginx
【已解决】nginx 502 Bad Gateway 问题排查
nginx 502 Bad Gateway 问题排查
15864 0
【已解决】nginx 502 Bad Gateway 问题排查
|
Java Spring
无法自动装配。找不到 ‘Service‘ 类型的 Bean。 Service 与 ServiceImpl 没有互相联系起来
文章讲述了一个Java开发中的问题,即Spring框架无法自动装配Bean,原因是ServiceImpl类未实现对应的Service接口,解决办法是让ServiceImpl实现Service接口。
2187 1
无法自动装配。找不到 ‘Service‘ 类型的 Bean。 Service 与 ServiceImpl 没有互相联系起来
|
算法 网络协议 数据安全/隐私保护
NTP网络时间同步协议详解
NTP协议是互联网上用于同步计算机时间的标准,它利用分布式时间服务器网络,通过分层管理和本地路由算法确保时间的准确性。协议涉及时间偏差、延迟和差量三个概念,用于测量与参考时钟的同步状态。基本NTP数据包包含48字节,如头部和时间戳,关键字段如跳跃指示器(LI)、版本号(VN)、模式(Mode)、层次(Stratum)等影响同步过程。协议还包括时间戳以记录不同阶段的时间点。NTP认证可选,用于数据安全。
NTP网络时间同步协议详解
|
9月前
|
人工智能 安全 搜索推荐
如何使用DeepSeek提高工作效率和生活质量?
普通工作者可通过DeepSeek显著提升效率和生活质量。工作方面,3秒生成文档、10分钟完成会议管理、数据处理自动化;生活方面,规划旅行、制定食谱、即时学习助手。使用技巧如“角色+任务+具体要求”提问公式,每天节省2小时,逐步培养“AI优先”思维,让琐事时间用于自我提升或陪伴家人。
440 0
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
这篇文章展示了如何使用栈(包括顺序栈和链栈)实现将十进制数值转换成八进制数值的方法,通过C语言编程演示了两种栈的实现方式和使用场景。
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
|
存储 安全 Java
javax.security.auth.login.LoginException: Unable to obtain password from user
假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。我之所以选这么旧的版本,是因为我最后要在自己项目集成,我们项目就是上面版本附近的,所以不能选太高版本,这点请注意各版本之间的兼容性问题。:如果里面的某些配置不知道在哪或者不知道干啥的,可以看我的前面的博客,详细介绍了安装配置等,可以大致了解参数。
379 9
|
存储 分布式计算 DataWorks
dataworks数据集成
dataworks数据集成
523 2
|
分布式计算 资源调度 安全
Hadoop停止所有Hadoop服务
【7月更文挑战第20天】
470 2