Hive查询中的ParseException

时间:2014-09-22 09:25:49

标签: hadoop hive

我正在运行以下Hive查询(MapR版本0.12):

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

但是我收到了这个错误:

  

错误:失败:ParseException第2:2行无法识别附近的&#39;(&#39;&#39; SELECT&#39;&#39; ID&#39;在子查询中源

2 个答案:

答案 0 :(得分:0)

您需要使用cast('your date' as date)将日期作为日期进行比较,因为它当前是一个字符串。

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

答案 1 :(得分: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所说,你需要施展它。 但我更喜欢更好的选择,比较时间戳格式的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 )

希望它有所帮助...... !!!