sqoop

2019-12-10  本文已影响0人  神呐_宽恕我把

Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

Sqoop可以理解为:“SQL 到 Hadoop 和 Hadoop 到SQL”。

导入

bin/sqoop import \

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

--username root \

--password hadoop \

--delete-target-dir \

--target-dir /sqoopresult \

--table emp --m 1

import : 执行导入

--connect :  连接数据库地址

--username : 用户名

--password : 密码

--delete-target-dir :  如果--target-dir指定目录存在, 则先进行删除

--target-dir : 指定导出路径(hdfs)

--table  :  指定要导出的数据库的表名

--m  :  指定要执行几个map, 如果指定为 多个, 需要配合 --split-by 使用

--split-by :  用于指定根据那个字段进行划分

--fields-terminated-by : 指定导出后字段与字段之间的分隔号, 默认为 逗号

bin/sqoop create-hive-table \

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

--table emp_add \

--username root \

--password hadoop \

--hive-table test.emp_add_sp

create-hive-table : 指定操作 : 创建hive的表

--hive-table :  导入到hive的那个表中(注意: 建议 库名.表名, 否则会将表放置到默认的数据库中)

--hive-import : 标识为是hive的导入

--where "city ='sec-bad'" \ 指定从关系数据库导入数据时的查询条件

--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \

注意:

- 使用query sql语句来进行查找不能加参数--table ;

- 并且必须要添加where条件;是里面加where,不是外面加--where

- 并且where条件后面必须带一个$CONDITIONS 这个字符串;

- 并且这个sql语句必须用单引号,不能用双引号;

--check-column (col)

用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似。

注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时-- check-column可以去指定多个列。

--incremental (mode)

append:追加,比如对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录

--last-value (value)

指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一

--merge-key id

导出

--input-fields-terminated-by '\t'

指定文件中的分隔符

--columns

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

--export-dir

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

--call

是指的某个存储过程。

--input-null-string --input-null-non-string

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

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

--update-key,

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

--updatemod,

指定updateonly(默认模式),仅仅更新已存在的数据记录,不会插入新纪录。指定allowinsert,更新已存在的数据记录,同时插入新纪录。实质上是一个insert & update的操作。


上一篇下一篇

猜你喜欢

热点阅读