2014-09-22 117 views
0

我運行下面的蜂巢查詢(MAPR版本0.12):ParseException的在蜂巢查詢

SELECT A.ID, A.AMT1, A.AMT2 
FROM (
    SELECT ID as ID, NET_AMOUNT as AMT1 
    FROM TEST_TABLE 
    WHERE DATE_BY >='2012-10-01' AND DATE_BY <='2012-10-31') as q 
    JOIN (
    SELECT ID as ID, NET_AMOUNT as AMT2 
    FROM TEST_TABLE 
    WHERE DATE_BY >='2013-10-01' AND DATE_BY <='2013-10-31') as r 
    ON q.ID=r.ID) A 

但我收到此錯誤:

Error : FAILED: ParseException line 2:2 cannot recognize input near '(' 'SELECT' 'ID' in subquery source

回答

0

似乎有一些問題與您的查詢,我認爲應該是這樣的:

SELECT q.ID,q.AMT1,q.AMT2 FROM 
(SELECT ID as ID, NET_AMOUNT as AMT1 FROM TEST_TABLE WHERE DATE_BY >='2012-10-01' AND DATE_BY <='2012-10-31') q 
JOIN (SELECT ID as ID ,NET_AMOUNT as AMT2 FROM TEST_TABLE WHERE DATE_BY >='2013-10-01' AND DATE_BY <='2013-10-31') r 
on (q.ID=r.ID) 

但因爲你是比較日期,並作爲@Antariksha ponited出你需要將其強制轉換。 但我更喜歡更好的選項,以時間戳格式比較DATE。所以在這種情況下,您的查詢將如下所示:

SELECT q.ID,q.AMT1,q.AMT2 FROM 
(SELECT ID as ID, NET_AMOUNT as AMT1 FROM TEST_TABLE WHERE unix_timestamp(DATE_BY,"<your date patern>") >=unix_timestamp('2012-10-01',"YYYY-MM-DD") AND unix_timestamp(DATE_BY,"<your date patern>") <=unix_timestamp('2012-10-31',"YYYY-MM-DD")) q 
JOIN (SELECT ID as ID ,NET_AMOUNT as AMT2 FROM TEST_TABLE WHERE unix_timestamp(DATE_BY,"<your date patern>") >=unix_timestamp('2013-10-01',"YYYY-MM-DD") AND unix_timestamp(DATE_BY,"<your date patern>") <=unix_timestamp('2013-10-31',"YYYY-MM-DD")) r 
on (q.ID=r.ID) 

希望它有幫助... !!!

+0

爲什麼時間戳比日期更好?分辨率是一樣的。 – 2014-09-29 07:55:59

+0

那麼有多種原因: 1.)時間戳將從Hive版本0.8工作到最新。所以你的查詢將足夠通用。 2.)當前的DATE數據類型只有YYYY-MM-DD格式,但時間戳支持日期到毫秒。這是另一個優點。 但是對於這個特殊問題,我認爲Date/Timestamp都可以工作。 – 2014-09-30 05:56:10

0

你需要轉換的日期進行比較作爲日期使用cast('your date' as date),因爲它目前是一個字符串。

這可能無法解決您的問題,因此請在嘗試後編輯您的問題。