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的操作。
网友评论