sqoop数据导入总结

这是黄文辉同学处女作,大家支持!

其他相关文章:元数据概念

Sqoop主要用来在Hadoop(HDFS)和关系数据库中传递数据,使用Sqoop,我们可以方便地将数据从关系型数据库导入HDFS,或者将数据从关系型数据库导入HDFS,或者将从HDFS导出到关系型数据库.

从数据库导入数据

  1. import命令参数说明

参数

说明

--append

将数据追加到HDFS上一个已存在的数据集上

--as-avrodatafile

将数据导入到Avro数据文件

--as-sequencefile

将数据导入到SequenceFile

--as-textfile

将数据导入到普通文本文件(默认)

--as-parquetfile

将数据导入到parquetfile文件

--boundary-query <statement>

边界查询,用于创建分片(InputSplit)

--columns <col,col,col…>

从表中导出指定的一组列的数据

--delete-target-dir

如果指定目录存在,则先删除掉

--direct

使用直接导入模式(优化导入速度)

--direct-split-size <n>

分割输入stream的字节大小(在直接导入模式下)

--fetch-size <n>

从数据库中批量读取记录数

--inline-lob-limit <n>

设置内联的LOB对象的大小

-m,--num-mappers <n>

使用n个map任务并行导入数据(默认是4个)

-e,--query <statement>

导入的查询语句

--split-by <column-name>

指定按照哪个列去分割数据

--table <table-name>

导入的源表表名

--target-dir <dir>

导入HDFS的目标路径

--warehouse-dir <dir>

HDFS存放表的根路径

--where <where clause>

指定导出时所使用的查询条件

-z,--compress

启用压缩

--compression-codec <c>

指定Hadoop的codec方式(默认gzip)

--null-string <null-string>

果指定列为字符串类型,使用指定字符串替换值为null的该类列的值

--null-non-string <null-string>

如果指定列为非字符串类型,使用指定字符串替换值为nul

2.基本使用说明

1)将表数据导入

sqoop import --connect jdbc:mysql://192.168.xx.xx:port/xxxx  --username xxxx –password  --table "t_user" --target-dir "/test/sqoop/table" -m 1 --as-textfile

说明:使用一个map任务将t_user这个表的数据从数据库中导入到--target-dir指定的hdfs目录下,以text格式保存.

注意:从oracle中导入数据时,table的表命必须要大写,否则会报该table找不到的错误.

2)按条件将表数据导入

sqoop import --connect jdbc:mysql://192.168.xx.xx:port/xxxx  --username xxxx --password  --table "t_user"  --target-dir "/test/sqoop/table" -m 1 --as-textfile --columns “ID,NAME,AGE,PHONE”—where "DATE_FORMAT(createTime,'%Y%m%d')=${vdate}"

说明:在使用--columns中,指定的columns的字段中不能调用数据库函数,只能通过sql查询去调用数据库函数.

3)使用sql将表数据导入

sqoop import --connect jdbc:mysql://192.168.xx.xx:port/xxxx  --username xxxx –password  --target-dir "/test/sqoop/table" -m 1 --as-textfile -query “select id,name,age from t_user where age>10 and \$CONDITIONS” --split-by “id”

说明:使用sql时,最后要加上$CONDITIONS符号.如果是双引号,则是\$CONDITIONS.当使用--query参数进行导入时,必须使用--split-by参数来指定某个切分字段,

3.sqoop导入原理

1)导入原理

sqoop在导入过程中,需要使用--split-by指定的字段进行数据切分.sqoop会去最大和最小split-by字段值,然后根据-m(--num-mappers)这个参数确定切分数量.例如:对于split-by是int类型来说,如果select max(split-by),min(split-by) from得到分别为100和1,而—num-mappers=2.那么1到100的数据,就被切分成2条sql,分别是select * from table where split-by>=1 and split-by <=50和select * from table where split-by>=51 and split-by <=100 .之后将切分出来sql分配到不同的map进行数据导入处理.

2)sqoop转化sql

对于上文中使用sql将数据导入的命令,根据导入原理转化的sql为

  1. 获取返回的结果字段信息
‘select id,name,age from t_user where age>10 and $CONDITIONS’

其中$CONDITIONS替换为(1=0)

2.获取split-by的最大值和最小值

‘SELECT MIN(id),MAX(id) FROM (select id,name,age from t_user where age>10  and $CONDITIONS) AS t1’

其中$CONDITIONS替换为(1=1)

3.根据sqoop导入原理中的切分规则,将sql切分,执行切分后的sql获取数据

‘select id,name,age from t_user where age>10 and $CONDITIONS’

其中$CONDITIONS替换为(1=1)

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2016-11-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端之路

mybatis 批量更新

此前的方案在做批量时使用mybatis提供的batch model,该模式下将推迟所有的update(包括insert和delete)语句直到提交事务或者遇到一...

7869
来自专栏知识分享

3-MSP430引脚中断

为了写一篇文章做铺垫--提醒着自己,,,,,, 这两天一直在寻找 #pragma vector = PORT1_VECTOR __interrupt void ...

2867
来自专栏Java帮帮-微信公众号-技术文章全总结

solr使用教程【面试+工作】

solr使用教程一【面试+工作】 Solr调研总结 开发类型全文检索相关开发 Solr版本4.2文件内容本文介绍solr的功能使用及相关注意事项;主要包括以下内...

4.1K6
来自专栏阮一峰的网络日志

全文搜索引擎 Elasticsearch 入门教程

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基...

4019
来自专栏信安之路

SQL 注入类型详解

笔者最初学习 SQL 注入时,大家对于 SQL 注入类型的归类让我头脑一片混乱,后来笔者发现其实大家都是根据 sqlmap 上给出的“类型”来划分的。所以,今天...

2470
来自专栏hbbliyong

ShellExecute 启动外部程序 参数详细介绍

ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。 目录 1基本简介 2...

47110
来自专栏数据和云

oracle 12.2 local temp的原理和实现

从Oracle数据库12c开始,可以将Oracle Clusterware和Oracle RAC配置在大型集群中,称为Oracle Flex集群。 这些集群包含...

2939
来自专栏NetCore

[实录]解决Migrator.Net 小bug

好久没写了,平时比较忙,只能趁周末的时候,写一点小东西,自己也记录一下。 平时我们做项目的时候,都会有自己的数据访问层,为了能方便以后的升级,我们一般会抽象出数...

2215
来自专栏依乐祝

.NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发

上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架,具体为什么那样设计我也已经在第十篇文章中进行了说明。不过文章发布后很多人都说了...

1444
来自专栏乐沙弥的世界

使用Uniread实现SQLplus翻页功能

    对于经常使用SQLplus的网友来说,SQLplus没有提供类似DOS工具的翻页功能,故不能实现SQL语句的来回翻动。现在我们有了Uniread, 减...

501

扫码关注云+社区