Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 在分区上使用行\号时分析错误_Hive_Row Number - Fatal编程技术网

Hive 在分区上使用行\号时分析错误

Hive 在分区上使用行\号时分析错误,hive,row-number,Hive,Row Number,我在配置单元上使用了下面的查询,并得到了以下解析错误,尽管该查询似乎没有任何问题 SELECT TO_DATE(o.order_date), profit, ROW_NUMBER() OVER (PARTITION BY YEAR(o.order_date) ORDER BY profit desc) AS n FROM ( SELECT TO_DATE(o.order_date), SUM(price) AS revenue, SUM(pric

我在配置单元上使用了下面的查询,并得到了以下解析错误,尽管该查询似乎没有任何问题

SELECT TO_DATE(o.order_date), profit, 
       ROW_NUMBER() OVER (PARTITION BY YEAR(o.order_date) ORDER BY profit desc) AS n 
FROM (
    SELECT TO_DATE(o.order_date), SUM(price) AS revenue, 
           SUM(price-cost) as profit 
    FROM products p, order_details d, orders o 
    WHERE (d.prod_id=p.prod_id) AND (d.order_id=o.order_id) 
    GROUP BY o.order_date
)
错误是:

编译语句时出错:失败:parseexception行6:22无法识别子查询源中“”附近的输入


好吧,我只想提一下。您在选择中使用了一些别名,如
o.order\u date)
TO\u date
OVER
-子句中。但是您的
FROM
部分只是大括号中的一个查询,在结束大括号
之后没有给定的别名


我希望将
)改为o

我发现HQL有3个问题:

  • 子查询中的group by需要匹配select语句中的所有非聚合列

  • 您需要在子查询中为to_DATE(o.order_DATE)位加上别名,以便在顶级查询中引用它(或引用其系统生成的别名)。如果不从子查询向上传递o.order\U date(并将子查询别名为o),则如果尝试在超级查询中引用o.order\U date,它将阻塞。这也适用于over语句中的o.order_日期调用

  • 这可能不会引起问题,但如果不别名子查询,我使用的大多数配置单元版本都会阻塞

  • 下面的代码应该可以解决您的问题(假设没有从HQL中看不到的数据问题):

    SELECT 
        a.dt, 
        a.profit, 
        ROW_NUMBER() OVER (PARTITION BY YEAR(a.dt) ORDER BY profit desc) AS n 
    FROM
        (SELECT 
             TO_DATE(o.order_date) dt, 
             SUM(price) AS revenue, 
             SUM(price-cost) as profit 
         FROM 
             products p, order_details d, orders o 
         WHERE 
             (d.prod_id = p.prod_id) 
             AND (d.order_id = o.order_id) 
         GROUP BY 
             TO_DATE(o.order_date) ) a