Hive中窗口函数的实现,主要借助于一个叫做 WindowingTableFunction 的 Partitioned Table Function 。
Partitioned Table Function
PTF函数的典型结构如下图所示,其输入可以是:表、子查询或另一个PTF函数输出;其输出也是一张表。
Window Function 与 PTF Function
select
考虑以上代码,在Hive中具体实现主要有两个阶段:
- 计算除窗口函数以外所有的其他运算,如:group by,join ,having等。上面的代码的第一阶段即为:
select
- 将上一步的输出作为 WindowingTableFunction 函数的输入,计算对应的窗口函数值。上面代码的第一阶段即为:
select channel, month, s,dr,r from
WindowingTableFunction(
-- 上一阶段的输出
<select channel, month, sum(amount) as s from sales group by channel, month>,
-- 窗口函数的分区list
partition by channel,
-- 窗口函数的order list
order by s,
-- 窗口函数调用
[r:<rank()>, dr:<denserank()>]
)
实现细节
参考资料:
- Analytical Queries with Hive: SQL Windowing and Table Functions:
- Jira:
本文介绍了Hive中窗口函数的实现原理及过程。利用WindowingTableFunction进行计算,分为两个阶段:首先完成除窗口函数外的其他运算,然后计算窗口函数值。详细解释了PartitionedTableFunction的工作流程。
4604

被折叠的 条评论
为什么被折叠?



