Rows Over Window与Range Over Window的区别

版本

组件版本
Flink1.12
Ubuntu20.04

概述

本文是对[1]的复现,[1]中的一些实验结果是错误的,不要迷信,一定要自己实际操作和验证.

完整操作

https://gitee.com/appleyuchi/Flink_Code/blob/master/sql_api/over.sql

解析

ROWS OVER Window

具体操作是:

SELECT
    itemID,
    itemType,
    onSellTime,
    price,  
    MAX(price) OVER (
        PARTITION BY itemType 
        ORDER BY onSellTime 
        ROWS BETWEEN 2 preceding AND CURRENT ROW) AS maxPrice
  FROM tmall_item;

实验结果是:

itemIDitemTypeonSellTimepricemaxPrice
ITEM001Electronic2017-11-11 10:01:002020
ITEM002Electronic2017-11-11 10:02:005050
ITEM003Electronic2017-11-11 10:03:003050
ITEM004Electronic2017-11-11 10:03:006060
ITEM005Electronic2017-11-11 10:05:004060
ITEM006Electronic2017-11-11 10:06:002060
ITEM007Electronic2017-11-11 10:07:007070
ITEM008Clothes2017-11-11 10:08:002020

 

详细计算

max{20}=20

max{20,50}=50

max{20,50,30}=50

max{50,30,60}=60

max{30,60,40}=60

max{60,40,20}=60

max{40,20,70}=70

max{20}=20(因为更换ItemType了)

 

RANGE OVER Window

具体操作是:

SELECT  
    itemID,
    itemType, 
    onSellTime, 
    price,  
    MAX(price) OVER (
        PARTITION BY itemType 
        ORDER BY onSellTime 
        RANGE BETWEEN INTERVAL '2' MINUTE preceding AND CURRENT ROW) AS maxPrice
  FROM tmall_item;    

这里的INTERVAL '2' MINUTE preceding指的是闭区间

实验结果是:

itemIDitemTypeonSellTimepricemaxPrice
ITEM001Electronic2017-11-11 10:01:002020
ITEM002Electronic2017-11-11 10:02:005050
ITEM003Electronic2017-11-11 10:03:003060
ITEM004Electronic2017-11-11 10:03:006060
ITEM005Electronic2017-11-11 10:05:004060
ITEM006Electronic2017-11-11 10:06:002040
ITEM007Electronic2017-11-11 10:07:007070
ITEM008Clothes2017-11-11 10:08:002020

 

max{20}=20

max{20,50}=50

max{20,50,30,60}=60(这个地方是按照时间范围interval在扫描该时间范围内的数据)

max{50,30,60}=60

max{30,60,40}=60(这个地方的结果体现了INTERVAL '2' MINUTE preceding指的是闭区间,因为刚好差了2分钟)

max{40,20}=40

max{40,20,70}=70

max{20}=20(因为更换ItemType了)

Reference:

[1]OVER窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值