导出 Export--默认模式导出(Insert)--配置参数 | 学习笔记

简介: 快速学习 导出 Export--默认模式导出(Insert)--配置参数

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

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


导出 Export--默认模式导出(Insert)--配置参数


内容介绍:

一、--input-fields-terminated-by'\t'(指定文件中的分隔符)

二、--columns

三、--export-dir 导出目录

四、--input-null-string--input-null-non-string


在进行数据导出时,有如下参数需要特别注意:


一、--input-fields-terminated-by'\t'(指定文件中的分隔符)

一般情况下默认数据以逗号来分割,解析时也默认以逗号分割。如果此时数据中恰好也是逗号,此时可以不指定,按照默认的字号来切割。但如果数据不是逗号,是制表符或者是竖线或者是其他符号,甚至是以-001来分割的,此时如果不加上该字段就不能进行切割。切割不出字段,表中进行映射的插入图时就会报错,所以字段分割符一定要指定。


二、--columns

指定列的顺序,在刚才导出的文件中并没有指定--columns。是因为创建的文件中的 IDnamedegsalarydept顺序包括类型个数跟表名保持一致。

image.png

如果导入数和表的顺序不一样,或者存在问题,此时必须用--columns 来指定字段的排序。若数据文件和目标字段完全一致可以不写。

演示:

重新创建表,但是在创建中人为修改顺序:

在数据库中创建新表:

create table employee1 (

id int not null primary key,

salary int,

deg varchar(20),

name varchar(20),

dept varchar(10));

此时表与默认文件顺序不同。

运行代码,刷新 userdb 中的 employee1.但是 employee1中的字段与文件中的字段不同。此时若不做修改,在 sqoop 中执行语句:

bin/sqoop export \

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

--username root \

--password hadoop \

--table employee1 \

--export-dir /emp_data/

结果出现 NumberFormatException,需要数据类型,但报的为字符串类型所以出现报错。因为数据中的类型与目标文件中正好相反,此时就需要添加上--columns 参数,该参数就可以指定参数类型。例如在导入时--export-dir /emp_data/上添加--columns:

--columns id,name,deg,salary,dept \

继续在 sqoop 中执行语句

结果显示:

image.png

解析导入100%,说明正确将数据识别到。运行结束后提示6条记录。

再在数据表中进行验证,刷新 employee1,结果显示:

image.png

选择列并控制它们的排序。当导出数据文件和目标表字段列顺序完全一致的时候可以不写。否则以逗号为间隔选择和排列各个列。没有被包含在-columns 面列名或字段要么具备默认值,要么就允许插入空值。否则数据库会拒绝接受sqoop 导出的数据,导致 sqoop 作业失败。


三、--export-dir 导出目录

在执行导出的时候,必须指定这个参数,同时需要具备--table--call 参数两者之一,--table 是指的导出数据库当中对应的表,--call 是指的某个存储过程。


四、--input-null-string--input-null-non-string

在数据库中如果某个字段为空:

image.png

为空需要查看该字段的类型。针对这样空的字段以 NULL 来表示,导入导出时涉及到在文件上怎么表示。如果不指定会发现针对这一空值会变成一个空字符串来表示空值,不利于后期处理。在数据库中为空为 NULL,在文件中为空以\n 来表示。所以这两个参数往往在业务当中用的较多,无论是字符串类型还是非字符串类型,针对空的数据,统一以\n 这种符号来表示,\n 转移到数据库就是一个空的数据不会显示一个字符串,对于空的字符串以\n 来替代。不是这种字符串的空值也以\n 来替代。这样避免了使用 NULL 字符串来表示空值的情况。

如果没有指定第一个参数,对于字符串类型的列来说,“NULL”这个字符串就回被翻译成空值,如果没有使用第二个参数,无论是“NULL”字符串还是说空字符串也好,对于非字符串类型的字段来说,这两个类型的空串都会被翻译成空值。比如:

--input-null-string"\\N"--input-null-non-string"\\N"

\\N前的第一个\表示转义。

以上几个配置参数在进行数据导入导出时使用比较多,需要结合实际场景灵活使用。

小结:

相关配置参数

导出文件的分隔符 如果不指定默认以”,”去切割读取数据文件

可通过--input-fields-terminated-by 来指定

如果文件的字段顺序和表中顺序不一致需要--columns 指定多个字段之间以""分割

导出的时候需要指定导出数据的目录 export-dir 和导出到目标的表名或者存储过程名

针对空字符串类型和非字符串类型的转换“\n"

相关文章
|
SQL Oracle 关系型数据库
sqoop的导入导出以及where条件过滤数据导出
sqoop的导入导出以及where条件过滤数据导出
|
6月前
|
消息中间件 Linux Kafka
linux命令使用消费kafka的生产者、消费者
linux命令使用消费kafka的生产者、消费者
308 16
|
4月前
|
NoSQL Linux Apache
2025年10大主流开源协议全解析与开源战略的商业价值-优雅草卓伊凡
2025年10大主流开源协议全解析与开源战略的商业价值-优雅草卓伊凡
961 8
车牌号归属地查询免费API接口教程
本接口用于根据车牌号查询社会车辆的归属地,不支持军车、使馆等特殊车牌。请求地址为 `https://cn.apihz.cn/api/other/chepai.php`,支持 POST 和 GET 请求。请求参数包括 `id`、`key` 和 `words`,返回数据包含车牌归属地信息。示例请求:`https://cn.apihz.cn/api/other/chepai.php?id=88888888&key=88888888&words=川B1234`。
702 21
|
机器学习/深度学习 算法 开发工具
【YOLOv8量化】普通CPU上加速推理可达100+FPS
【YOLOv8量化】普通CPU上加速推理可达100+FPS
1979 0
|
自然语言处理 前端开发 Linux
在Linux中,什么是 GUI?
在Linux中,什么是 GUI?
|
JavaScript 前端开发 开发者
摸鱼必备!!10个你不知道的 Vue 3 组件库...
摸鱼必备!!10个你不知道的 Vue 3 组件库...
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之如何查看制品库
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
分布式计算 监控 Hadoop
Hadoop任务执行失败
【7月更文挑战第12天】
616 10
|
持续交付 开发工具 对象存储
阿里云云效产品使用合集之构建物如何上传到阿里云OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。