执行函数_VLDB15 | 窗口函数的高效执行

6d9aeffdc64415cd248c2532cb90a7f1.png

这篇论文是Hyper数据库关于高效执行window functions的论文。window function是SQL:2003标准中的语法,TPC-DS中99条sql有9条使用。它可以让sql表达得更为灵活,有了window function,一些以前需要用复杂的子查询来表达的sql变得可以用window function来表达。

25e0af086368feb44f90e1bcd11fec4d.png
上面的sql是用于统计每个位置的IoT设备产生的时序数据在每个一个时刻的值以及值的稳定情况。

概念

window function有几个概念可以对应到语法中:

  1. partition,先按partition key做分组
  2. order by,对分组中的行按order key做排序
  3. frame,计算每一行对应的frame的范围
  4. evaluation 计算frame中的agg函数

5448af15b988058a84769fb2982ac27e.png

partition和sort的执行方式:

  1. hash-based的方法,先对partition key做hash,再独立sort
  2. sort-based,直接对partition key和sort-key做sort

并行执行:

  1. inter-partition 每个partition之间并行。在partition数目比较多且数据比较均匀的情况下,并行较优。
  2. intra-partition 针对数据倾斜标记严重的数据或者partition数目比较少的数据需要对partition内做并行 intra-partition的并行之所以可以做,是因为partition中的每一条tuple都需要算自己的frame,以及其agg函数。

agg函数的执行:

  1. naive agg:
    对于每一条tuple都耿直地找frame执行一遍agg。会有平方级的计算。
  2. cumulative agg:
    适用于range between unbound preceding and current row的一直增长的frame计算(想像下累计sum计算)
  3. removable cumulative agg:
    适用于于非一直增长的的between x preceding and y following,(想像下sum计算, 减去x前面一个对应的值再加上y对应的值)
  4. segment tree agg: (有利于并行)
    先构建线段树,加速后续Sum的计算。适用于动态的frame计算。

59a3bc74064345b5956e725c41c23c05.png

不同Agg执行方式时间复杂度

e3509a8f885188951ec52a555f39cf99.png

上面的时间复杂度没有考虑(intra-partition)并行,如果考虑并行的话Segment Tree会是更好的选择,因为Cumulative Agg和Removable Cumulative Agg计算依赖的状态不能并行构建,而Segment Tree可以并行构建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值