2014-12-04 125 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