2014-09-22 112 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),因为它目前是一个字符串。

这可能无法解决您的问题,因此请在尝试后编辑您的问题。