导出 Export--更新模式导出(Insert)--Allowinsert | 学习笔记

简介: 快速学习 导出 Export--更新模式导出(Insert)--Allowinsert

开发者学堂课程【Sqoop 企业级大数据迁移方案实战导出 Export--更新模式导出(Insert)--Allowinsert】学习笔记,与课程紧密联系,让用户快速学习知识。

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


导出 Export--更新模式导出(Insert)--Allowinsert


更新模式导出(Insert)--Allowinsert

本节学习更新导出中的 Allowinsert 模式。在这种模式下的导出变得更加丰富。如果已有的数据发生变化更改,它会更改已有的数据,另外一点如果有新的进度产生,也会插入新的数据,在该模式下底层是 insert&update 两种操作,更新已经存在的数据、插入没有的数据。

1.参数说明

--update-key,更新标识,即根据某个字段进行更新,例如 id,可以指定多个更新标识的字段,多个字段之间用逗号分隔。

--updatemod,指定 allowinsert,更新已存在的数据记录,同时插入新记录。实质上是一个 insert&update 的操作。

2.准备 HDFS 数据

在 HDFS“/allowinsert_1/"目录下创建一个文件 allowinsert_1.txt:

打开服务器,输入:hadoop fs -mkdir /allowinsert_1/

接着编辑文件 allowinsert_1.txt,输入

vim allowinsert_1.txt

进入后复制粘贴

1201,gopal,manager,50000

1202,manisha,preader,50000

1203,kalil,php dev30000

进行保存。

3.手动创建 mysql 中的目标表

打开 Navicat,复制粘贴如下代码:

mysql>USE userdb;

mysql>CREATE TABLE allowinsert(

id INT NOT NULL PRIMARY KEY

name VARCHAR(20),

deg VARCHAR(20),

salary INT);

选中语句后点击运行已选择的。然后刷新表,可以看到表列表中多出 allowinsert,现在该表中没有数据。

4.先执行全部导出操作

该操作与更新导出没有关系,只是将 allowinsert_1.txt中的记录插入表中

打开 sqoop,复制粘贴如下代码:

bin/sqoop export\

--connect jdbc:mysql://node-1:3306/userdb\

--username root\

-password hadoop \

--table allowinsert\

--export-dir /allowinsert_1/

5.更新导出操作

打开服务器,在全部导出操作完成后输入 hadoop fs -mkdir /allowinsert_2/

创建 allowinsert_2.txt。修改了前三条数据并且新增了一条记录。上传至/allowinsert_2/目录下

输入:vim allowinsert_2.txt

进入后复制粘贴如下代码:

1201,gopal,manager,1212  //修改了薪水,新增一条记录

1202,manisha,preader,1313

1203,kalil,php dev,1414

1204,allen,java,1515

保存后退出,输入 hadoop fs -put allowinsert_2.txt /allowinsert_2/

完成后刷新页面可以看到多出 allowinsert_2数据:

image.png

6.执行更新导出

打开服务器,输入如下代码:

bin/sqoop export\

--connect jdbc:mysql://node-1:3306/userdb\

--username root

--password hadoop\

--table allowinsert\

--export-dir /allowinsert_2/\

--update-key id\

--update-mode allowinsert

验证是否三条数据中的薪水进行 update,如果出现1204说明 insert 进行了更新,满足两个条件则为 Allowinsert 模式。

结果显示导入4条记录。在数据库中进行刷新查看:

image.png

发现表中前三条记录的 salary 发生修改,最后一条记录1204被插入。

在实际生活中可以根据应用需求选择相关的模式,例如一个表中的数据一直发生变化,只新增选用 Allowinsert 更加友好。因为它的底层既有插入操作又有更新操作。

小结:

更新导出

updateonly 只更新已经存在的数据,不会执行 insert 增加新的数据

allowinsert 更新已有的数据,插入新的数据,底层相当于 insert&update

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 存储 分布式计算
【Hive】(二十三)简单几招教你如何解决 Hive 中小文件过多的问题
【Hive】(二十三)简单几招教你如何解决 Hive 中小文件过多的问题
2027 0
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
778 5
|
算法 数据处理 数据库
生物学经典Blast序列比对算法原理,如何在R语言和Python中实现序列的比对分析?
生物学经典Blast序列比对算法原理,如何在R语言和Python中实现序列的比对分析?
|
SQL 存储 安全
DDL、DML、DCL 的区别
【8月更文挑战第1天】
1478 0
DDL、DML、DCL 的区别
|
存储 分布式计算 NoSQL
DataX深度剖析:解读数据传输工具的设计理念与架构特点
DataX深度剖析:解读数据传输工具的设计理念与架构特点
1305 5
DataX深度剖析:解读数据传输工具的设计理念与架构特点
|
SQL 存储 Java
Hive 特殊的数据类型 Array、Map、Struct
在Hive中,`Array`、`Map`和`Struct`是三种特殊的数据类型。`Array`用于存储相同类型的列表,如`select array(1, "1", 2, 3, 4, 5)`会产生一个整数数组。`Map`是键值对集合,键值类型需一致,如`select map(1, 2, 3, "4")`会产生一个整数到整数的映射。`Struct`表示结构体,有固定数量和类型的字段,如`select struct(1, 2, 3, 4)`创建一个无名结构体。这些类型支持嵌套使用,允许更复杂的结构数据存储。例如,可以创建一个包含用户结构体的数组来存储多用户信息
2844 0
|
机器学习/深度学习 算法 数据可视化
基于线性SVM的CIFAR-10图像集分类
基于线性SVM的CIFAR-10图像集分类
964 0
基于线性SVM的CIFAR-10图像集分类
|
SQL JSON Java
基于dataX实现多种数据源数据汇聚(一)
在数据中台项目实践过程中,经常需要获取多个部门、多个系统的数据,此时面临多种多样的数据库,如何快速稳定的获取数据,并持续归集到数据中台的数据仓库中,是每个数据中台项目必须解决的问题。本文介绍了我在项目实践过程中,基于dataX实现数据汇聚的一些使用心得,在此和大家分享,希望有所帮助。
3056 0
基于dataX实现多种数据源数据汇聚(一)
|
SQL 分布式计算 关系型数据库
Sqoop数据导入到Hive表的最佳实践
Sqoop数据导入到Hive表的最佳实践
|
SQL 存储 传感器
Hive中的分区表和非分区表有什么区别?请解释其作用和使用场景。
Hive中的分区表和非分区表有什么区别?请解释其作用和使用场景。
616 0