官方文档:Sqoop User Guide (v1.4.7)
还有很多其他参数如:分隔符,文件格式,编码等参数在下面没有具体列举出来,可根据实际需要按需配置。
查看RDBMS的所有库
# MySQL: jdbc:mysql://HOST:PORT
sqoop-list-databases --connect jdbc:mysql://127.0.0.1:3306 --username u_wyk --password p_wyk
# Oracle: jdbc:oracle:thin:@HOST:PORT:SID
sqoop-list-databases --connect jdbc:oracle:thin:@127.0.0.1:1521:csdn --username u_wyk --password p_wyk
查看RDBMS指定库下的所有表
# MySQL: jdbc:mysql://HOST:PORT/DB
sqoop-list-tables --connect jdbc:mysql://127.0.0.1:3306/csdn --username u_wyk --password p_wyk
# Oracle: jdbc:oracle:thin:@HOST:PORT:SID
sqoop-list-tables --connect jdbc:oracle:thin:@127.0.0.1:1521:csdn --username u_wyk --password p_wyk
测试RDBMS连通性
控制台显示结果
sqoop eval --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --query "select * from t_test limit 1" --username u_wyk --password p_wyk
替换空值和空字符串
# 字符串null值和非字符串null值都转为NULL
# 使用--null-string和--null-non-string指定'\\N'
sqoop ...
--null-string
'\\N'
--null-non-string
'\\N'
# 同时在hive中指定空值格式为'\\N'
alter table table_name SET SERDEPROPERTIES('serialization.null.format' = '\\N');
替换/删除特殊字符
# 将数据中的 特殊字符\u001和 回车换行符\n\r 替换成指定字符串
sqoop ...
--hive-delims-replacement ''
# 将数据中的 特殊字符\u001和 回车换行符\n\r 删除
sqoop ...
--hive-drop-import-delims
RDBMS全库同步到Hive
# 将指定库下的表全量同步到hive库内(自动建表,需要提前建好hive库)
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --hive-import --hive-overwrite --hive-database hive_csdn -m 5
# 如果有表没有主键,则无法切分并行任务,使用参数--autoreset-to-one-mapper 自动将其变成1个mapper任务
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --hive-import --hive-overwrite --hive-database hive_csdn --autoreset-to-one-mapper -m 5
RDBMS全库同步到HDFS
# 将指定库下的表全量同步到HDFS库内
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --warehouse-dir "/path/to/csdn_db" -m 5
# 如果有表没有主键,则无法切分并行任务,使用参数--autoreset-to-one-mapper 自动将其变成1个mapper任务
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --warehouse-dir "/path/to/csdn_db" --autoreset-to-one-mapper -m 5
复制RDBMS表结构到Hive
仅根据RDBMS表结构创建Hive表,不同步数据
# 从MySQL库csdn中复制表source_table 的表结构,在hive中建表default.target_table
sqoop create-hive-table --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk -–password p_wyk -–table source_table --hive-database default -–hive-table target_table
RDBMS全量同步到Hive
# 从MySQL数据库csdn同步表source_table到hive的default.target_table,自动建表
sqoop-import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --table source_table --hive-import --hive-overwrite --hive-table default.target_table --null-string '\\N' --null-non-string '\\N' -m 5
RDBMS全量同步到HDFS
# 从MySQL数据库csdn同步表source_table到HDFS的/path/to/target_dir目录下
sqoop-import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai' --username u_wyk --password p_wyk --table source_table --target-dir /path/to/target_dir -m 5
RDBMS增量同步到Hive
# 创建一个sqoop任务:根据增量字段upd_ts,记录上一次的最大值,每次同步大于该值的数据增量同步数据至hive,创建任务后每次执行会自动更新--last-value的值
sqoop job --create wyk_csdn_job --import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --table source_table --target-dir=/path/to/target_table --hive-import --hive-database default --hive-table target_table --incremental append --check-column upd_ts --last-value '2020-11-30 00:00:00'
# 使用下面的命令执行该任务
sqoop job --exec wyk_csdn_job
# 删除任务
sqoop job --delete wyk_csdn_job
RDBMS增量同步到HDFS
# 根据upd_ts增量处理,记录上一次的最大值,取大于该值的数据进行同步
sqoop job --create wyk_csdn_job --import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --table source_table --target-dir=/path/to/target_table --incremental append --check-column upd_ts --last-value '2020-11-30 00:00:00'
# 或者使用 SQL+shell 结合的方式将增量数据放置在HDFS路径下
sqoop-import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --query 'SELECT * FROM csdn.source_table WHERE datediff(upd_ts,current_timestamp())<=3 AND $CONDITIONS' --incremental append --check-column id --target-dir /path/to/target_table --null-string '\\N' --null-non-string '\\N' -m 5
HDFS全量同步到RDBMS
# 从HDFS中导出数据到MySQL表rdbms_table内(表需要提前创建)
sqoop export –-connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' -–username u_wyk –-password p_wyk -–table rdbms_table –-export-dir /path/to/hive_table
HDFS增量同步到RDBMS
--update-mode:
allowinsert :插入更新,等同于upsert操作。
updateonly:更新,仅更新主键冲突的数据,新数据不做任何处理。
# 增量将HDFS数据导出至MySQL的rdbms_table表,按照id(若多个主键可以用逗号分隔)进行插入更新upsert(表需要提前创建)
sqoop export –-connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' -–username u_wyk –-password p_wyk -–table rdbms_table --update-key id --update-mode allowinsert –-export-dir /path/to/hive_table/pt=20201130
# 增量将HDFS数据导出至MySQL的rdbms_table表,按照id(若多个主键可以用逗号分隔)进行更新update(若主键冲突则更新,新数据不做任何操作)(表需要提前创建)
sqoop export –-connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' -–username u_wyk –-password p_wyk -–table rdbms_table --update-key id --update-mode updateonly –-export-dir /path/to/hive_table/pt=20201130
希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢