来自同一窗口的sql/hiveql多个聚合

06odsfpq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(236)

我想知道是否有优化以下hiveql(或者sql,出于好奇)的技巧。
例如,如果我有一张table:

x   |   y   |   e   |   time
   2   |   5   |   1   | 11:30:00
   2   |   1   |   1   | 12:15:00
   8   |   0   |   1   | 16:00:00
   10  |   6   |   2   | 16:06:00
   1   |   2   |   2   | 17:00:00

我想得到多个集合:

select
e,
time,
sum(x) over w as cumu_x 
sum(y) over w as cumu_y 
count(x) over w as num_x
from my_table
window w as
(partition by e
 order by time
 rows between unbounded preceding and current row)

应该给我想要的结果

e   |   time   |   cumu_x   |   cumu_y   |   num_x
   1   | 11:30:00 |     2      |     5      |     1
   1   | 12:15:00 |     4      |     6      |     2
   1   | 16:00:00 |     12     |     6      |     3
   2   | 16:06:00 |     10     |     6      |     1
   2   | 17:00:00 |     11     |     8      |     2

问题是:如何优化?当涉及数百万行时,这样的配置单元查询非常慢。
如果我自己在数据上循环,我会:
计算同一循环中的所有聚合。如果我使用窗口别名,会发生这种情况吗?
对数据进行一次排序,然后继续运行总计。这是因为我知道在每次迭代中,结果只是先前结果的增量。Hive会这样吗?有没有一种方法可以给你一些提示?
并行处理“e”的不同箱子。Hive会这样吗?我跑的时候只看到一个减速机。有没有办法帮助Hive并行化?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题