导出 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"

相关文章
|
7月前
|
前端开发
Antd中Table列表行默认包含修改及删除功能的封装
Antd中Table列表行默认包含修改及删除功能的封装
178 0
|
前端开发 JavaScript
表格插件-bootstrap table的表内查看编辑删除
表格插件-bootstrap table的表内查看编辑删除
115 0
|
JavaScript
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
8080 0
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
|
5月前
|
C++ 开发者
cpplint 新增自定义checker介绍
通过为cpplint新增自定义规则,可以让 cpplint 更加贴合项目的编码规范,从而提高代码的质量和一致性。
91 0
|
7月前
|
JavaScript 前端开发
ECMAScript标准的两种语法--默认导出导入与命名式导出导入
ECMAScript标准的两种语法--默认导出导入与命名式导出导入
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——视图-检查选项(cascaded、local)
MySQL数据库——视图-检查选项(cascaded、local)
248 0
|
7月前
|
XML Java BI
​ 文件导出
​ 文件导出
48 1
vxe-table可编辑状态默认显示下拉选select为默认展示
vxe-table可编辑状态默认显示下拉选select为默认展示
|
JavaScript
js根据内容让select默认选中
js根据内容让select默认选中
|
JavaScript
【ES6】模块化语法(默认、按需导入import导出export的操作)
ES6模块化语法(默认、按需导入导出的操作)
【ES6】模块化语法(默认、按需导入import导出export的操作)