我想知道是否有优化以下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并行化?
暂无答案!
目前还没有任何答案,快来回答吧!