利用sqoop1将mysql数据导入至hive多分区

本文主要是记录sqoop1 将 mysql数据导入至hive多分区的方法, 之前项目中碰到这个需求, 在sqoop官网,google,baidu上参考了一些资料,均感觉不满意, 看到hcatalog插件, 于是自己尝试了一下, 做个总结: 


一般的做法是, 先初始化hive分区值, 再将数据导入到分区目录: 

建表语句略...

初始化hive分区, 该分区下不可以有数据:

alter table bd_ods.src_wifi_loacationdata_his add partition (prt_month='201707',prt_date='20170703')

将数据导入分区目录: 

sqoop import --append  --connect ${jdbcUrl} --username ${uName}  --password ${uPswd}  --query 'select * from wifi_locationdata WHERE ID_ROW_SEQ_NO >=200 and ID_ROW_SEQ_NO <300 and $CONDITIONS' --target-dir '/apps/hive/warehouse/bd_ods.db/src_wifi_loacationdata_his/prt_month=201707/prt_date=20170703' --hive-database 'bd_ods' --hive-table 'src_wifi_loacationdata_his'  --split-by id_row_seq_no


个人认为用 hcatalog更方便一点, 导入脚本整理如下:

全量导入

sqoop import -m 1 --connect ${jdbcUrl} --username ${uName}  --password ${uPswd} --table wifi_locationdata --hcatalog-database bd_ods --hcatalog-table src_wifi_loacationdata_his --hcatalog-partition-keys prt_month,prt_date --hcatalog-partition-values 201707,20170701

 
  增量导入, 这里不支持默认的增量参数(--incremental, --check-column, --last-value), 可通过query将增量数据查询出来:  
  

sqoop import -m 1 --connect ${jdbcUrl} --username ${uName}  --password ${uPswd} --query 'select * from wifi_locationdata WHERE ID_ROW_SEQ_NO <100 and $CONDITIONS' --hcatalog-database bd_ods --hcatalog-table src_wifi_loacationdata_his --hcatalog-partition-keys prt_month,prt_date --hcatalog-partition-values 201707,20170701 

你可能感兴趣的:(bigData)