解决sqoop从mysql导入到hive表的多分区问题

参考:http://blog.csdn.net/liweiwei71/article/details/23434189

对于分区表

drop table track_log;
create table track_log (
id                         string ,
url                        string ,
referer                    string ,
keyword                    string ,
type                       string ,
guid                       string ,
pageId                     string ,
moduleId                   string ,
linkId                     string ,
attachedInfo               string ,
sessionId                  string ,
trackerU                   string ,
trackerType                string ,
ip                         string ,
trackerSrc                 string ,
cookie                     string ,
orderCode                  string ,
trackTime                  string ,
endUserId                  string ,
firstLink                  string ,
sessionViewNo              string ,
productId                  string ,
curMerchantId              string ,
provinceId                 string ,
cityId                     string )  
PARTITIONED BY (ds string,hour string)  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

不能再用--hive-table, --hive-partition-key, --hive-partition-value这三个参数。因为这样只能向单个分区导入数据,无法指定多个分区;其次,--where条件中没有用and。

所以可以分两步解决这个问题:

1)  首先确保目标分区中没有数据,即 //user/hive/warehouse/track_log/ds=20150827/hour=18目录是空的;

2)  将数据直接上传到指定的数据仓库目录中
sqoop import --connect  jdbc:mysql://localhost:3306/track_log --username root --password Nokia123  --table track_log18 

 -m 1  

--target-dir /user/hive/warehouse/track_log/ds=20150827/hour=18 

--fields-terminated-by '\t'  //这个也很重要,否则查询一列时会返回多列


结果:

开始没结果

hive> select id from track_log  limit 2;
OK
Time taken: 0.584 seconds

加入分区就好
hive> alter table track_log add partition(ds='20150828' ,hour='18') location '/user/hive/warehouse/track_log/ds=20150828/hour=18';
OK
Time taken: 0.759 seconds
hive> select id from track_log limit 2;
OK
121508281810000000
121508281810000001

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值