sqoop

作者: 神呐_宽恕我把 | 来源:发表于2019-12-10 12:50 被阅读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的操作。


    相关文章

      网友评论

          本文标题:sqoop

          本文链接:https://www.haomeiwen.com/subject/rotggctx.html