5.2.5 命令&参数:import
将关系型数据库中的数据导入到HDFS(包括Hive,HBase)中,如果导入的是Hive,那么当Hive中没有对应表时,则自动创建。
- 命令:
如:导入数据到hive中
$ bin/sqoop import
--connect jdbc:mysql://hadoop102:3306/company
--username root
--password 000000
--table staff
--hive-import
如:增量导入数据到hive中,mode=append
append导入:
$ bin/sqoop import
--connect jdbc:mysql://hadoop102:3306/company
--username root
--password 000000
--table staff
--num-mappers 1
--fields-terminated-by "\t"
--target-dir /user/hive/warehouse/staff_hive
--check-column id
--incremental append
--last-value 3
尖叫提示:append不能与--hive-等参数同时使用(Append mode for hive imports is not yet supported. Please remove the parameter --append-mode)
如:增量导入数据到hdfs中,mode=lastmodified
先在mysql中建表并插入几条数据:
mysql> create table company.staff_timestamp(id int(4), name varchar(255), sex varchar(255), last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
mysql> insert into company.staff_timestamp (id, name, sex) values(1, 'AAA', 'female');
mysql> insert into company.staff_timestamp (id, name, sex) values(2, 'BBB', 'female');
先导入一部分数据:
bin/sqoop import
--connect jdbc:mysql://hadoop102:3306/company
--username root
--password 000000
--table staff_timestamp
--check-column last_modified
--incremental lastmodified
--last-value "2017-09-28 22:20:38"
--m 1
--append
尖叫提示:使用lastmodified方式导入数据要指定增量数据是要--append(追加)还是要--merge-key(合并)
尖叫提示:last-value指定的值是会包含于增量导入的数据中
-
参数:
序号 参数 说明
1 --append 将数据追加到HDFS中已经存在的DataSet中,如果使用该参数,sqoop会把数据先导入到临时文件目录,再合并。
2 --as-avrodatafile 将数据导入到一个Avro数据文件中
3 --as-sequencefile 将数据导入到一个sequence文件中
4 --as-textfile 将数据导入到一个普通文本文件中
5 --boundary-query <statement> 边界查询,导入的数据为该参数的值(一条sql语句)所执行的结果区间内的数据。
6 --columns <col1, col2, col3> 指定要导入的字段
7 --direct 直接导入模式,使用的是关系数据库自带的导入导出工具,以便加快导入导出过程。
8 --direct-split-size 在使用上面direct直接导入的基础上,对导入的流按字节分块,即达到该阈值就产生一个新的文件
9 --inline-lob-limit 设定大对象数据类型的最大值
10 --m或–num-mappers 启动N个map来并行导入数据,默认4个。
11 --query或--e <statement> 将查询结果的数据导入,使用时必须伴随参--target-dir,--hive-table,如果查询中有where条件,则条件后必须加上$CONDITIONS关键字
12 --split-by <column-name> 按照某一列来切分表的工作单元,不能与--autoreset-to-one-mapper连用(请参考官方文档)
13 --table <table-name> 关系数据库的表名
14 --target-dir <dir> 指定HDFS路径
15 --warehouse-dir <dir> 与14参数不能同时使用,导入数据到HDFS时指定的目录
16 --where 从关系数据库导入数据时的查询条件
17 --z或--compress 允许压缩
18 --compression-codec 指定hadoop压缩编码类,默认为gzip(Use Hadoop codec default gzip)
19 --null-string <null-string> string类型的列如果null,替换为指定字符串
20 --null-non-string <null-string> 非string类型的列如果null,替换为指定字符串
21 --check-column <col> 作为增量导入判断的列名
22 --incremental <mode> mode:append或lastmodified
23 --last-value <value> 指定某一个值,用于标记增量导入的位置
5.2.6 命令&参数:export
从HDFS(包括Hive和HBase)中奖数据导出到关系型数据库中。 -
命令:
如:
$ bin/sqoop export
--connect jdbc:mysql://hadoop102:3306/company
--username root
--password 000000
--table staff
--export-dir /user/company
--input-fields-terminated-by "\t"
--num-mappers 1 -
参数:
序号 参数 说明
1 --direct 利用数据库自带的导入导出工具,以便于提高效率
2 --export-dir <dir> 存放数据的HDFS的源目录
3 -m或--num-mappers <n> 启动N个map来并行导入数据,默认4个
4 --table <table-name> 指定导出到哪个RDBMS中的表
5 --update-key <col-name> 对某一列的字段进行更新操作
6 --update-mode <mode> updateonly
allowinsert(默认)
7 --input-null-string <null-string> 请参考import该类似参数说明
8 --input-null-non-string <null-string> 请参考import该类似参数说明
9 --staging-table <staging-table-name> 创建一张临时表,用于存放所有事务的结果,然后将所有事务结果一次性导入到目标表中,防止错误。
10 --clear-staging-table 如果第9个参数非空,则可以在导出操作执行前,清空临时事务结果表
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。
网友评论