概述
目录
Import(Mysql到Hive/hdfs)
参数解释
------------dbms相关------------
--connect✳✳
--table --where--columns
--query✳
--m
--split-by id✳✳
------------hdfs相关------------
--as-textfile
--compress
--compression-codec gzip
--null-non-string✳✳
--null-string✳✳
--fields-terminated-by✳
--lines-terminated-by
--target-dir✳
--delete-target-dir✳
------------hive相关------------
--hive-import✳✳
--hive-database
--hive-table✳✳
--hive-partition-key✳
--hive-partition-value✳
--hive-overwrite✳
--hcatalog
------------增量导入相关------------
--incremental lastmodified/append
--check-column
--last-value
Export(Hive/hdfs到mysql)
参数解释
------------dbms相关------------
--connect✳✳
--columns
--table✳✳
------------hdfs相关------------
--export-dir✳✳
--input-fields-terminated-by✳
--input-null-string ✳✳
--input-null-non-string✳✳
------------重复数据处理相关------------
--update-mode✳
--update-key✳
Import(Mysql到Hive/hdfs)
bin/sqoop import --connect jdbc:mysql://dream3:3306/test --username root --password root --hive-import --hive-table test.src_test_ws --as-textfile --split-by id --null-string '\N' --null-non-string '\N' --query "select * from demo where $CONDITIONS" --hive-partition-key part_id --hive-partition-value 7 --target-dir 'hdfs://dream1:9000/sqoop/test.db/src_test_ws/part_id=7/' --delete-target-dir -m 2 |
参数解释
------------dbms相关------------
--connect✳✳
Dbms数据库连接地址
--connect jdbc:mysql://dream3:3306/test --username root --password root |
--table --where--columns
指定mysql的表,指定where条件,指定迁移字段,【不要用,用下边的—query】 |
--query✳
#查询导入: --query #有了--query,就不要有--table了,也不要有--where了,也不要有--columns了 ,会有冲突 而且不要用别的 就用query就够了 # $CONDITIONS条件 : where $CONDITIONS 这个在语句中必须有,要么 where id>20 and $CONDITIONS #为什么呢? 因为sqoop要将你的sql语句交给多个不同的maptask执行,每个maptask执行sql时肯定要按任务规划加范围条件, 所以就提供了这个$CONDITIONS作为将来拼接条件的占位符 #禁用聚合函数 这个sql不要过于复杂而且不允许使用聚合函数,因为会分区处理(除非m=1) #引号问题, 要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义$ #而且必须指定目标路径 --target-dir #Must specify destination with --target-dir #--query 可以指定额外的列 --query 'select *,"xxx" as xx,"ttt" as tt from demo where $CONDITIONS' |
--m
分为几个task去运行 |
--split-by id✳✳
--m 等于1 的话,没有意义。 --m 大于1 如果没有配置,默认找MySQL的表的主键作为split-by对象,如果此时mysql没有主键就会报错 #2022-06-08 02:05:33,676 ERROR tool.ImportTool: Import failed: No primary key could be found for table demo. --split-by 最好是数字类型(日期类型也可以,max min有意义的就行),如果是string类型运行命令时需要指定 -Dorg.apache.sqoop.splitter.allow_text_splitter=true 否则报错如下 #ERROR tool.ImportTool: Import failed: java.io.IOException: #Generating splits for a textual index column allowed only in case of #"-Dorg.apache.sqoop.splitter.allow_text_splitter=true" property passed as a parameter |
------------hdfs相关------------
--as-textfile
#指定要生成的文件的类型 默认是--as-textfile --as-avrodatafile --as-parquetfile --as-sequencefile --as-textfile |
--compress
--compression-codec gzip
## 如果需要压缩 指定压缩格式 --compress --compression-codec gzip |
--null-non-string✳✳
--null-string✳✳
数据库中的NULL应该写成什么样的东西 --null-non-string ‘\N’ --null-string <null-str> \N’ hive默认将hdfs文件中的N识别为NULL |
--fields-terminated-by✳
字段分割符默认’ 01’ |
--lines-terminated-by
换行符,当前默认是n ( 12),暂时没有意义 |
--target-dir✳
user/【用户名】 /【表名】 数据目标路径,不指定target-dir的时候,默认放到/user/用户名 下 #Output directory hdfs://dream1:9000/user/root/demo already exist |
--delete-target-dir✳
# hdfs目标路径已存在会报错,所以可以加上这个自动删除目标文件夹, |
------------hive相关------------
--hive-import✳✳
指定本次sqoop迁移的数据要直接导入到hive中 如果同时指定了,hive-table,那么sqoop会自动给创建hive的表。但是不会自动创建不存在的库 CREATE TABLE IF NOT EXISTS `test.demo`( `id` INT, `name` STRING, `value` STRING, `create_date` STRING, `create_by` BIGINT, `update_date` STRING, `update_by` BIGINT, `delete_flag` STRING, `versions` INT ) COMMENT 'Imported by sqoop on 2022/06/08 03:59:10' PARTITIONED BY (part_id STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' |