【问题标题】:Error while running hive join query运行 hive 连接查询时出错
【发布时间】:2017-10-31 14:37:56
【问题描述】:
SELECT A.* , B.* FROM
(SELECT ID,DATE FROM APPLE) A
INNER JOIN 
(SELECT ID,MAX(DATE) AS MAXDATE FROM APPLE GROUP BY ID) A1
ON A.ID = A.ID AND A.DATE = A1.MAXDATE
WHERE A.DATE > CURRENT_DATE
LEFT OUTER JOIN (
SELECT ID,NAME FROM BANANA) B
ON A.ID = B.ID 
WHERE B.NAME IN ('USA','GBR') LIMIT 10;

错误:编译语句时出错:FAILED:ParseException 行 22:0 在 'CURRENT_DATE' 附近的 'LEFT' 缺少 EOF (状态=42000,代码=40000)

【问题讨论】:

  • 我不确定这是否是 Hive 的正确语法,但我很确定 SELECT A.*, B.* FROM ... 必须带有星号而不是点号?
  • 我只添加了 A.*,B.*,由于某种原因它没有显示。现在更正了。
  • 这是一个猜测,但我认为它失败了,因为你在中间有 where 语句,这意味着只在最后。您没有使用子查询来过滤此语句。
  • 那个内连接部分需要 where 子句,如果我在 ON(左外连接)之后插入 where 条件,那将无法解决我的目的。

标签: join hive


【解决方案1】:

您的问题是您的 SQL 语句中间有一个 WHERE 子句。您可以将其移动到 A 的嵌套查询中,或者将其添加到最后的 WHERE 子句中。您可能还想在嵌套查询中移动 B 表上的过滤,因为您实际上是通过将左连接放在语句末尾的 WHERE 子句中来将左连接变为内连接。

要么

    SELECT A.* , B.* FROM
   (SELECT ID,DATE FROM APPLE WHERE DATE > CURRENT_DATE) A
   INNER JOIN 
   (SELECT ID,MAX(DATE) AS MAXDATE FROM APPLE GROUP BY ID) A1
   ON A.ID = A.ID AND A.DATE = A1.MAXDATE
   LEFT OUTER JOIN (
   SELECT ID,NAME FROM BANANA WHERE NAME IN ('USA','GBR') ) B
   ON A.ID = B.ID 
   LIMIT 10;

    SELECT A.* , B.* FROM
    (SELECT ID,DATE FROM APPLE) A
    INNER JOIN 
    (SELECT ID,MAX(DATE) AS MAXDATE FROM APPLE GROUP BY ID) A1
    ON A.ID = A.ID AND A.DATE = A1.MAXDATE
    LEFT OUTER JOIN (
    SELECT ID,NAME FROM BANANA WHERE NAME IN ('USA','GBR') ) B
    ON A.ID = B.ID 
    WHERE A.DATE > CURRENT_DATE
    LIMIT 10;        

【讨论】:

    【解决方案2】:

    WHERE 子句,即A.DATE > CURRENT_DATE 应该在第一个选择中。另请注意,您有一个条件A.ID = A.ID 而不是A.ID = A1.ID

    SELECT 
         A.* , B.* 
    FROM 
        (SELECT ID,DATE FROM APPLE WHERE DATE > CURRENTDATE) A
    INNER JOIN  
        (SELECT ID,MAX(DATE) AS MAXDATE FROM APPLE GROUP BY ID) A1
    ON 
         A.ID = A1.ID AND A1.DATE = A1.MAXDATE 
    LEFT OUTER JOIN 
         (SELECT ID,NAME FROM BANANA) B
    ON 
         A.ID = B.ID 
    WHERE B.NAME IN ('USA','GBR') LIMIT 10;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多