【问题标题】:Impala raise " AnalysisException: Syntax error" when using ROW_NUMBER() OVER使用 ROW_NUMBER() OVER 时,Impala 引发“AnalysisException:语法错误”
【发布时间】:2022-01-12 09:34:25
【问题描述】:

我有一个这样的查询:

SELECT MONTH_ID, 'Total' AS cola, colb
FROM
(
    SELECT A.*, ROW_NUMBER()OVER(PARTITION BY MONTH_ID,col3 ORDER BY col4 DESC) AS ROWN
    FROM 
        (
            SELECT A.*, B.col3
            FROM table1 A
            LEFT JOIN table2 B
            ON A.col1 = B.col1
        ) A
)
WHERE ROWN=1
GROUP BY MONTH_ID

如果我用子查询创建一个中间表,这个查询就可以工作。但是当我运行整个过程时,Impala 会引发:“AnalysisException:第 12 行中的语法错误:未定义:WHERE ROWN = 1 ^ 遇到:预期位置:AS、DEFAULT、IDENTIFIER 导致:异常:语法错误”

我尝试在 Hive 中运行它,不同的错误显示:“编译语句时出错:FAILED: ParseException line 20:4 cannot identify input near 'WHERE' 'ROWN' '=' in subquery source”

然后我在 oracle 中尝试了相同的查询,它有效...

谁能解释为什么会发生这种情况以及如何解决这个问题? 谢谢你的帮助;)

【问题讨论】:

    标签: sql hive subquery impala


    【解决方案1】:

    子查询应该有这样的别名(见代码中的注释):

    SELECT MONTH_ID, 'Total' AS cola, colb
    FROM
    (
        SELECT A.*, ROW_NUMBER()OVER(PARTITION BY MONTH_ID,col3 ORDER BY col4 DESC) AS ROWN
        FROM 
            (
                SELECT A.*, B.col3
                FROM table1 A
                LEFT JOIN table2 B
                ON A.col1 = B.col1
            ) A
    ) B ----------------------------Alias is a must --------------
    WHERE ROWN=1
    GROUP BY MONTH_ID, colb -----All columns which are not aggregated and not constants should be in GROUP BY
    

    【讨论】:

    • 非常感谢!有效!!! group by 语句在我的原始查询中是正确的,我只是在输入问题 xd 时变得懒惰,但感谢您指出。
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2016-09-30
    相关资源
    最近更新 更多