2014-12-04 86 views
0

我对分区很陌生。通配符的Hive分区

假设我有如下表

表MYTABLE(指明MyTime对应的时间戳,MYNAME字符串)

其中列数值指明MyTime是这样的:年 - 月 - 日小时:分钟:sec.msec(例如,2014年12月5日08:55:59.3131)

我想基于数值指明MyTime

例如年 - 月 - 日分割MYTABLE,我想打一个分区2014年12月5日

mytime like 2014-12-05 08:55:59,3131的记录将在此分区中。

所以像select * from mytable where mytime='2014-12-05%'查询将搜索

分区。

我该如何在蜂巢中做到这一点?

我已经在mytable中有数据了,是否需要重新创建mytable并重新载入所有数据?

谢谢

回答

0

输入

1997-12-31 23:59:59.999,kishore 
2014-12-31 23:59:59.999999,manish 

create table mytable_tmp(mytime string,myname string) 
row format delimited 
fields terminated by ','; 

load data local inpath 'input.txt' 
overwrite into table mytable_tmp; 



create table mytable(myname string,mytimestamp string) 
PARTITIONED BY (mydate string) 
row format delimited 
fields terminated by ','; 


SET hive.exec.dynamic.partition = true; 
SET hive.exec.dynamic.partition.mode = nonstrict; 

INSERT OVERWRITE TABLE mytable PARTITION(mydate) 
SELECT myname,mytime,to_date(mytime) from mytable_tmp; 


select * from mytable where mydate='2014-12-31'; 



manish 2014-12-31 23:59:59.999999 2014-12-31 

有分区指明MyDate,其中包括根据您的问题MYNAME和数值指明MyTime;

+0

如果列mytime是字符串(但格式与时间戳相同),该怎么办? – 2014-12-05 02:22:54

+0

在这个例子中,如果我想插入(2014-12-31 11:11:11.1111,汤姆)mytable,这个记录将在2014-12-31分区? – 2014-12-05 02:26:15

+0

去更新答案。我知道你是否有其他要求。 – 2014-12-05 06:40:21