1.mysql---->HDFS(mysql中的必须是存在的,hdfs中的路径会自动创建,底层就是靠mr实现的)
导入含有主键或是没有主键的表
sqoop import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--target-dir hdfs://hadoop01/sqoop/mysqltohdfs/emp \
--delete-target-dir \
--fields-terminated-by '\t' \
--split-by mgr
在导入没有主键的mysql表时,必须指定分割分片,或是写-m 1
导入指定的列
sqoop import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--columns "empno,ename" \
--where "empno > 22"
--target-dir hdfs://hadoop01/sqoop/mysqltohdfs/emp \
--delete-target-dir \
--fields-terminated-by '\t' \
--null-string 'hh' \
--null-non-string '0' \
--split-by mgr
导入指定的查询内容
sqoop import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--query 'select * from emp where $CONDITIONS'
--target-dir hdfs://hadoop01/sqoop/mysqltohdfs/emp \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1
--query和--table不能同时出现,--query和--where同时出现的时候,--where不生效,--query和--columns同时出现的时候,会先从--query中查询出结果来在对列进行过滤
HDFS---->mysql(hdfs中的文件要存在,mysql中标要提前建立好,字段必须类型必须相同且字段的长度不得小于数据的长度,导出表不能指定列导出,默认就是从1,2,3列开始往出导,不知道hdfs文件中列存储名称)
sqoop export \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--export-target-dir hdfs://hadoop01/sqoop/hdfstomysql/emp \
--input-fields-terminated-by '\t' \
--input-null-string 'hh' \
--input-null-non-string '0' \
-m 1
Mysql---->Hive(mysql的表必须是存在的,hive中的表需要存在,mysql导入hive的本质就是先把mysql的数据导入到hdfs上存储起来,将导入的hdfs数据通过底层load的方式加载到hive中)
sqoop import \
--concect jdbc:mysql://hadoop01/mysqldb \
--username root \
--password 123456 \
--table emp \
--hive-import \
--hive-overwrite \
--hive-table 'mysqldb.emp' \
--hive-partition-key 'dt' \
--hive-partition-value '2020-01-03' \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1
Hive---->Mysql(hive和mysqlbiao都要存在)
sqoop export \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--export-dir /user/hive/warehouse/sqoop.db/emp \
--fields-terminated-by '\t' \
-m 1
Mysql---->Hbase(mysql表存在)
sqoop import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--column-family 'base_info' \
--hbase-create-table \
--hbase-table 'emp' \
--hbase-row-key 'empno' \
-m 1
增量导入的方式
1.--query
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--query 'select * from emp where empno = 8000 and $CONDITIONS' \
--target-dir /tmp/emp \
--hive-import \
--hive-table "sqoop.emp" \
--fields-terminated-by '\t' \
-m 1
如果使用--query进行查询, 需要手动指定临时文件保存的路径, 通过 --target-dir 指定
2.--append
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--append \
--query 'select * from emp where empno = 8000 and $CONDITIONS' \
--target-dir /sqoop/append \
-m 1
3.--incremental
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--incremental append \
--check-column 'empno' \
--last-value '7800' \
--query 'select * from emp where $CONDITIONS' \
--target-dir /sqoop/incremental \
-m 1
job
sqoop job \
--create job1 \
-- import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop/job/job1 \
--delete-target-dir \
--m 1
执行sqoop job --exec job1
使用job完成增量导入,不会导入重复的数据,只会导入新添加入的数据
sqoop job \
--create job2 \
-- import \
--connect jdbc:mysql://hadoop01:3306/mysqldb \
--username root \
--password 123456 \
--incremental append \
--check-column 'empno' \
--last-value '0' \
--query 'select * from emp where $CONDITIONS' \
--target-dir /sqoop/job/incremental \
--m 1
|