[Sqoop]将Hive数据表导出到Mysql
业务背景
mysql表YHD_CATEG_PRIOR的结构例如以下:
-- Table "YHD_CATEG_PRIOR" DDL
CREATE TABLE `YHD_CATEG_PRIOR` (
`category_id` int(11) NOT NULL COMMENT '类目ID',
`category_name` varchar(250) DEFAULT NULL COMMENT '类目名称',
`category_level` int(11) DEFAULT '0' COMMENT '类目级别',
`default_import_categ_prior` int(11) DEFAULT '0' COMMENT '默认引入优先级',
`user_import_categ_prior` int(11) DEFAULT NULL COMMENT '用户引入优先级',
`default_eliminate_categ_prior` int(11) DEFAULT NULL COMMENT '默认淘汰优先级',
`user_eliminate_categ_prior` int(11) DEFAULT NULL COMMENT '用户淘汰优先级',
`UPDATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据刷新时间',
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=61125 DEFAULT CHARSET=utf8;
hive表pms.yhd_categ_prior的表结构例如以下:
-- col_name data_type
category_id bigint
category_name string
category_level int
default_import_categ_prior int
user_import_categ_prior int
default_eliminate_categ_prior int
user_eliminate_categ_prior int
update_time string
hive表的字段之间以\001分隔。行以\n分隔。空字段以\N填充。
如今须要将hive表pms.yhd_categ_prior导出到mysql表YHD_CATEG_PRIOR中。
业务实现
脚本例如以下:
####################################
#
# 将Hive表同步到Mysql
#
####################################
rm -rf ./YHD_CATEG_PRIOR.java
sqoop-export \
-Dmapred.job.queue.name=pms \
--connect jdbc:mysql://127.0.0.1:3306/market \
--username admin \
--password 123456 \
--table YHD_CATEG_PRIOR \
--export-dir /user/hive/pms/yhd_categ_prior \
--columns category_id,category_name,category_level,default_import_categ_prior,user_import_categ_prior,default_eliminate_categ_prior,user_eliminate_categ_prior \
--update-mode allowinsert \
--update-key category_id \
--fields-terminated-by '\001' \
--lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N'
上述脚本解析例如以下:
- 将hive表pms.yhd_categ_prior导出到mysql的YHD_CATEG_PRIOR表中
- hive表导出的字段为:
category_id,
category_name,
category_level,
default_import_categ_prior,
user_import_categ_prior,
default_eliminate_categ_prior,
user_eliminate_categ_prior