如何在impala中编写java udf
我想在如何在impala中编写java udf,java,hive,impala,Java,Hive,Impala,我想在Impala中实现running total示例,如下所示: DATE | DAY | COUNT | Total 2014-11-12 | 1 | 12 | 12 2014-11-13 | 2 | 32 | 44 2014-11-14 | 3 | 50 | 94 To solve this problem using Impala, we might need temp v
Impala
中实现running total
示例,如下所示:
DATE | DAY | COUNT | Total
2014-11-12 | 1 | 12 | 12
2014-11-13 | 2 | 32 | 44
2014-11-14 | 3 | 50 | 94
To solve this problem using Impala, we might need temp variable like in MySql, which Impala does not support.
为此,我想使用JavaUDF将第一行总计与第二行计数相加。这样我就可以得到第二排的总数。我怎么能这样做。请建议。
还请提供将jar添加到Impala
中的步骤。
您的帮助将非常有用。如果您使用的是Impala 2.0,您可以使用分析(窗口)函数计算运行总数 比如说,
从您的_表中选择日期、日期、计数、累计(按日期排序)
有关分析函数的详细信息,请参见
更新:
不可能使用UDA以您想要的方式实现累积和,这就是“分析/窗口函数”存在的原因。为什么?UDA用于为聚合编写自定义函数,该聚合通过某个表达式对输入行进行分组,并将聚合fn应用于同一组中的所有行,但只为该组生成一个输出行。这有两个问题:
> select t1.id, sum(t2.id) as csum from tbl t1 inner join tbl t2 on t1.id >= t2.id group by t1.id order by t1.id;
+----+------------+
| id | csum |
+----+------------+
| 0 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
| 6 | 21 |
| 7 | 28 |
+----+------------+
然而,这可能需要昂贵的计算成本,并且更难用SQL表示。理想情况下,您可以升级到Impala 2.0并使用分析功能。对不起,我应该提到Impala的版本。我目前使用的是AWS EMR现在支持的1.2.4版。