2014-06-27 210 views
4

我的蜂巢表上的年,月,日分割,小時查詢蜂巢分區表

現在我要怎樣才能從2014年5月27日獲取的數據,以2014年6月5日 我這樣做?

我知道一個選項是在時代(或yyyy-mm-dd-hh)和查詢傳遞時期創建分區。 我可以做到而不失去日期層次?

表結構

CREATE TABLE IF NOT EXISTS table1 (col1 int, col2 int) 
PARTITIONED BY (year int, month int, day int, hour int) 
STORED AS TEXTFILE; 
+0

您可以粘貼您的配置單表中的數據樣本嗎? –

+0

@LalitAgarwal我在問題中添加了表格結構。感謝您指出它。 – banjara

回答

2

可以查詢這樣

WHERE st_date > '2014-05-27-00' and end_date < '2014-06-05-24' 

應該給你想要的結果,因爲即使它是一個刺一個會按字典即「2014年4月4日被比較'將永遠更大'2014-04-03'。

我在我的示例表上運行它,它工作得很好。

+0

感謝您的回答。年,月,日,小時是單獨的字段。我添加了我的表格結構。 – banjara

8

這是一個類似的情況,我們每天都在查詢表中的蜂巢。我們按照您所解釋的方式劃分了我們的表格,如果查詢它的話,它會有很大的幫助。這是分區如何我們:我們

CREATE TABLE IF NOT EXISTS table1 (col1 int, col2 int) 
PARTITIONED BY (year bigint, month bigint, day bigint, hour int) 
STORED AS TEXTFILE; 

對於分區值分配是這樣的:

year = 2014, month = 201409, day = 20140924, hour = 01 

這樣的查詢變得非常簡單,您可以直接查詢:

select * from table1 where day >= 20140527 and day < 20140605 

希望這幫助

+0

如果OP可以更改分區,我認爲更好的方法是使用'yy-mm-dd'字符串作爲分區。有了這個,你可以使用複雜的SQL查詢,查看更多細節https://community.hortonworks.com/questions/29031/best-pratices-for-hive-partitioning-especially-by.html – chhantyal