Sqoop export 导出推数详解

前言

因为工作上用到sqoop从hive导出数据到关系型数据库,所以学习了下sqoop导出的具体功能,因除官网外(全英文,可能部分人不喜欢看英文),没有特别好的资料,在此整理总结下自己关注的一些东西。环境说明,sqoop 1.4.6,先按照导出到mysql进行总结。

命令参数

主要整理可能用到的参数,不包含所有参数,有需要可以自行去官方查看~~

eval

可使用SQL语句对关系数据库进行操作。后面接–e或者–query
查询数据实例

sqoop eval –-connect jdbc:mysql://localhost:3306/hive --username root --password 123456 --query “SELECT * FROM tbl LIMIT 10″

插入数据实例

sqoop eval –-connect jdbc:mysql://localhost:3306/hive --username root --password 123456 --e “INSERT INTO TBL VALUES(100,1375170308,1,0,’Hadoop’,0,1,’guest’,’MANAGED_TABLE’,’abc’,’ddd’)”

export

从hdfs中导数据到关系数据库中

sqoop export –-connect jdbc:mysql://localhost:3306/hive –-username root –-password 123456  –-table TBL2 –-export-dir sqoop/test

普通参数

参数 说明
–connect jdbc连接串
–help 帮助
–password 设置密码
–username 设置用户名

控制参数

参数 说明
–columns 导出的字段
–-direct 快速模式,利用了数据库的导入工具,如mysql的mysqlimport,更高效的将数据导入到关系数据库中。
–-export-dir 存放数据的HDFS的源目录
-m,–-num-mappers 启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的最大Map数
–-table 要导入到的关系数据库表
–-update-key 后面接条件列名,通过该参数,可以将关系数据库中已经存在的数据进行更新操作,类似于关系数据库中的update操作
–-update-mode 更新模式,有两个值updateonly和allowinsert,默认为updateonly只更新,allowinsert指定update-key后,根据指定字段进行更新,不存在的插入。
–-input-null-string 如没有指定,则字符串null将被使用
–-input-null-non-string 如没指定,则字符串null将被使用
–-staging-table 该参数是用来保证在数据导入关系数据库表的过程中事务安全性的,创建一个与导入目标表同样的数据结构,保留该表为空在运行数据导入前,所有事务会将结果先存放在该表中,然后最后由该表通过一次事务将结果写入到目标表中。
–-clear-staging-table 如果该staging-table非空,则通过该参数可以在运行导入前清除staging-table里的数据。
–-batch 使用批量模式执行

Hcatalog

参数 说明
–hcatalog-database 指定database
–hcatalog-table 指定hive表名
–hcatalog-partition-keys and --hcatalog-partition-values 指定分区及分区的值,大小写敏感

注意点

目前我们使用的是parquet存储,只能使用hcatalog,1.4.6版本的sqoop只支持Netezza的direct模式。

HIVE分区字段需为小写,mysql字段需大小写一致,应该是查询字段时sqoop默认加了引号,导致大小写敏感。

默认情况下,所有表的所有字段都是被选定的。可通过–columns指定导出字段及顺序,但是没包含的字段,在关系数据库中要有默认值或者允许为NULL,否则会导致sqoop作业失败。

默认情况下,sqoop导出是追加新数据,即insert操作;如果指定了–update-key参数,默认的是会按照指定的字段进行更新操作,即update操作;如果再指定–update-mode参数为allowinsert,则存在的–update-key指定字段会进行更新,不存在的进行插入操作,即upsert操作。

填写数据库密码时最好使用引号’’

你可能感兴趣的:(大数据技术)