本文主要是记录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
全量导入:
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