Impala 包含 avg 的数学运算因 AnalysisException 而失败

Impala mathematical operation containing avg fails with AnalysisException

我正在尝试从另一列 (avg(column_19)) 的平均值中减去一列 (column_18) 的值,并将此结果作为第三列 (result) table 的每一行:

cur.execute("Select avg(column_19) - column_18 as result FROM test1")

这似乎运行不佳,我收到此错误:

impala.error.HiveServer2Error: AnalysisException: select list expression not produced by aggregation output (missing from GROUP BY clause?): SUM(column_19) / COUNT(column_19) - column_18

我不想对结果进行分组

avg() 在此上下文中是一个 aggregate function,这意味着它应用于一组行,可以用 GROUP BY 子句指定(或者所有行,如果不是指定的)。聚合表达式的输出是每组一个值,因此不会按需要按行应用。

但是,您可以通过几种方式完成您想要做的事情。我认为最简单的方法是将 avg() 用作 analytic function。例如,您可以执行以下操作:

select column_19, column_18, (avg(column_19) over () - column_18) as result from test1

有关聚合和分析函数如何工作的更多详细信息,请参阅文档。