Flink系列之:Over聚合

Flink系列之:Over聚合

  • 一、Over聚合
  • 二、ORDER BY
  • 三、PARTITION BY
  • 四、范围(RANGE)定义
  • 五、RANGE 间隔
  • 六、ROW 间隔

  • 适用于流、批

一、Over聚合

OVER 聚合通过排序后的范围数据为每行输入计算出聚合值。和 GROUP BY 聚合不同, OVER 聚合不会把结果通过分组减少到一行,它会为每行输入增加一个聚合值。

下面这个查询为每个订单计算前一个小时之内接收到的同一产品所有订单的总金额。

SELECT order_id, order_time, amount,SUM(amount) OVER (PARTITION BY productORDER BY order_timeRANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW) AS one_hour_prod_amount_sum
FROM Orders

这个Flink SQL查询的目标是,基于给定的订单数据,计算每个订单的订单时间之前一个小时内同一产品的总销售金额。

  • 首先,我们选择了"order_id"、"order_time"和"amount"这三个列。
  • 然后,我们使用SUM(amount) OVER (PARTITION BY product ORDER BY order_time RANGE BETWEEN INTERVAL ‘1’ HOUR PRECEDING AND CURRENT ROW)函数来计算每个订单的订单时间之前一个小时内同一产品的销售金额总和。
  • 在函数中,我们使用了PARTITION BY子句来指定按产品进行分区,即对每个产品分别计算销售金额总和。
  • 然后,我们使用ORDER BY子句来指定按订单时间进行排序,以确保计算的是订单时间之前的销售金额。
  • 最后,我们使用RANGE BETWEEN INTERVAL ‘1’ HOUR PRECEDING AND CURRENT ROW来指定计算的范围为订单时间之前一个小时到当前行(当前订单)。
  • 这个查询的结果将为每个订单提供订单时间之前一个小时内同一产品的销售金额总和。

下面总结了 OVER 窗口的语法:

SELECTagg_func(agg_col) OVER ([PARTITION BY col1[, col2, ...]]ORDER BY time_colrange_definition),...
FROM ...

你可以在一个 SELECT 子句中定义多个 OVER 窗口聚合。然而,对于流式查询,由于目前的限制,所有聚合的 OVER 窗口必须是相同的。

二、ORDER BY

OVER 窗口需要数据是有序的。因为表没有固定的排序,所以 ORDER BY 子句是强制的。对于流式查询,Flink 目前只支持 OVER 窗口定义在升序(asc)的 时间属性 上。其他的排序不支持。

三、PARTITION BY

OVER 窗口可以定义在一个分区表上。PARTITION BY 子句代表着每行数据只在其所属的数据分区进行聚合。

四、范围(RANGE)定义

范围(RANGE)定义指定了聚合中包含了多少行数据。范围通过 BETWEEN 子句定义上下边界,其内的所有行都会聚合。Flink 只支持 CURRENT ROW 作为上边界。

有两种方法可以定义范围:ROWS 间隔 和 RANGE 间隔

五、RANGE 间隔

RANGE 间隔是定义在排序列值上的,在 Flink 里,排序列总是一个时间属性。下面的 RANG 间隔定义了聚合会在比当前行的时间属性小 30 分钟的所有行上进行。

RANGE BETWEEN INTERVAL '30' MINUTE PRECEDING AND CURRENT ROW

六、ROW 间隔

ROWS 间隔基于计数。它定义了聚合操作包含的精确行数。下面的 ROWS 间隔定义了当前行 + 之前的 10 行(也就是11行)都会被聚合。

ROWS BETWEEN 10 PRECEDING AND CURRENT ROW
WINDOW

WINDOW 子句可用于在 SELECT 子句之外定义 OVER 窗口。它让查询可读性更好,也允许多个聚合共用一个窗口定义。

SELECT order_id, order_time, amount,SUM(amount) OVER w AS sum_amount,AVG(amount) OVER w AS avg_amount
FROM Orders
WINDOW w AS (PARTITION BY productORDER BY order_timeRANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW)

这个Flink SQL查询的目标是,在给定的订单数据上,计算每个订单的订单时间之前一个小时内同一产品的销售金额总和和平均销售金额。

首先,我们选择了"order_id"、"order_time"和"amount"这三个列。

  • 然后,我们使用SUM(amount) OVER w和AVG(amount) OVER w函数分别计算每个订单的订单时间之前一个小时内同一产品的销售金额总和和平均销售金额。
  • 在函数中,我们定义了一个窗口w,使用WINDOW关键字来指定。窗口w使用了PARTITION BY子句按产品进行分区,并使用ORDER BY子句按订单时间进行排序。这样可以确保计算的是订单时间之前的销售金额。
  • 窗口w还使用了RANGE BETWEEN INTERVAL ‘1’ HOUR PRECEDING AND CURRENT ROW来指定计算的范围为订单时间之前一个小时到当前行(当前订单)。
  • 最后,通过将计算结果作为新的列名sum_amount和avg_amount,我们将计算的销售金额总和和平均销售金额添加到了查询结果中。
  • 这个查询的结果将包含每个订单的订单时间和销售金额,以及每个订单的订单时间之前一个小时内同一产品的销售金额总和和平均销售金额。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

log4j2配置文件log4j2.xml详解

1、缺省默认配置文件 <?xml version"1.0" encoding"UTF-8"?><Configuration status"WARN"><Appenders><Console name"Console" target"SYSTEM_OUT"><PatternLayout pattern"%d{HH:mm:ss…

Android Studio Gradle构建很慢,下载依赖缓慢问题

在项目的 build.gradle或setting.gradle&#xff08;Android Studio新老版本配置不同&#xff09;中配置镜像源 阿里云&#xff1a; maven { url https://maven.aliyun.com/repository/gradle-plugin } maven { url https://maven.aliyun.com/repository/spring-plugin } mav…

【Java】SpringBoot中实现Redis Stream队列

SpringBoot实现Redis Stream队列 前言 简单实现一下在SpringBoot中操作Redis Stream队列的方式&#xff0c;监听队列中的消息进行消费。 jdk&#xff1a;1.8 springboot-version&#xff1a;2.6.3 redis&#xff1a;5.0.1&#xff08;5版本以上才有Stream队列&#xff09;…

C++实现简单的猜数字小游戏

猜数字 小游戏介绍&#xff1a;猜数字游戏是令游戏机随机产生一个100以内的正整数&#xff0c;用户输入一个数对其进行猜测&#xff0c;需要你编写程序自动对其与随机产生的被猜数进行比较&#xff0c;并提示大了&#xff0c;还是小了&#xff0c;相等表示猜到了。如果猜到&…

网络(九)三层路由、DHCP以及VRRP协议介绍

目录 一、三层路由 1. 定义 2. 交换原理 3. 操作演示 3.1 图示 3.2 LSW1新建vlan10、20、30&#xff0c;分别对应123接口均为access类型&#xff0c;接口4为trunkl类型&#xff0c;允许所有vlan通过 3.3 LSW2新建vlan10、20、30&#xff0c;配置接口1为trunk类型&…

创维电视机 | 用当贝播放器解决创维电视机不能播放MKV视频的问题

小故事在下面&#xff0c;感兴趣可以看看&#xff0c;开头我就直接放解决方案 创维电视虽然是基于Android开发的&#xff0c;可以安装apk软件&#xff0c;但是基本不能用&#xff0c;一定要选择适配电视的视频播放器&#xff0c;或者使用本文中提供的创维版当贝播放器。 原软…

Java常见异常名称

java.lang.NullPointerException 空指针异常 java.lang.ClassNotFoundException 指定的类不存在 java.lang.NumberFormatException 字符串转换为数字异常 java.lang.IndexOutOfBoundsException 数组下标越界异常 java.lang.IllegalArgumentExcepti…

报数游戏C语言

分析:掌握数字移动的规律&#xff0c;以及判断&#xff0c;我们可以用一个二维数组来记录每一个人说的数字&#xff0c;就像第一张图片一样&#xff0c;西安向右边移动&#xff0c;再向左下移动&#xff0c;再向左边移动&#xff0c;在向右边移动&#xff0c;在可以用一个数组来…

策略模式学习

使用场景 一个方法有很多的实现方式&#xff0c;并且需要使用if else等分支逻辑选择使用哪种实现方式 术语 环境 维护策略对象的引用&#xff0c;负责将请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式获取具体策略对象 抽象策略 定义了策略类的公…

什么是Laravel?它有哪些特性?

Laravel 是一款流行的 PHP Web 框架&#xff0c;设计用于构建现代、优雅且功能强大的 Web 应用程序。它提供了一套丰富的工具和库&#xff0c;以简化常见的开发任务&#xff0c;同时保持灵活性和可扩展性。以下是 Laravel 框架的一些主要特性&#xff1a; 优雅的语法&#xff1…

C#学习相关系列之自定义遍历器

在C#中&#xff0c;自定义遍历器需要实现IEnumerable接口和IEnumerator接口。其中&#xff0c;IEnumerable接口包含一个GetEnumerator方法&#xff0c;该方法返回一个IEnumerator接口的实例&#xff0c;而IEnumerator接口包含Current、MoveNext和Reset方法。 IEnumerable&#…

SVG 生成 Vector 资源文件批量及编辑预览工具

SVG 生成 Vector 资源文件批量及编辑预览工具 一、SVG2Vector批量工具 首先&#xff0c;源码地址&#xff1a;github.com/MegatronKin… 其次&#xff0c;下载地址&#xff1a; SVG生成Vector资源文件批量资源-CSDN文库 示例1&#xff1a; java -jar svg2vector-cli-1.0.0…

实验二:流水线及流水线中的冲突

一、实验目的 加深对计算机流水线基本概念的理解。理解MIPS结构如何用5段流水线来实现&#xff0c;理解各段的功能和基本操作。加深对数据冲突、结构冲突的理解&#xff0c;理解这两类冲突对CPU性能的影响。进一步理解解决数据冲突的方法&#xff0c;掌握如何应用定向技术来减…

【vue filters 过滤器】vue页面 全局使用

【vue filters 过滤器】vue页面 全局使用 1、在根目录common文件下创建filters. // 全局 过滤器 export const filters {// "订单状态 1待接单 2配送中 3已送达 4已完成 -1已取消") orderStatus;orderStatus: val > {let result nullswitch (val) {case 0:ret…

微服务保护--线程隔离(舱壁模式)

一、线程隔离的实现方式 线程隔离有两种方式实现&#xff1a; 线程池隔离 信号量隔离&#xff08;Sentinel默认采用&#xff09; 如图&#xff1a; 线程池隔离&#xff1a;给每个服务调用业务分配一个线程池&#xff0c;利用线程池本身实现隔离效果 信号量隔离&#xff1a…

数据分析(一)(附带实例和源码)

一、主要目的&#xff1a; 主要利用Python包&#xff0c;如Numpy、Pandas和Scipy等常用分析工具并结合常用的统计量来进行数据的描述&#xff0c;把数据的特征和内在结构展现出来。熟悉在Python开发环境中支持数据分析的可用模块以及其中的方法&#xff0c;基于一定的样例数据…

前端视角看 Docker : 基础命令全面指南

引言 Docker是一种开源的容器化平台&#xff0c;它允许开发者将应用程序和其依赖打包在一个轻量级的、可移植的容器中。这使得应用程序在不同的环境中部署变得简单且高效。本文将介绍Docker的一些基础命令和概念&#xff0c;帮助初学者快速上手。 1. Docker简介 Docker使用…

pl_vio线特征·part II

pl_vio线特征part II 0.引言4.线段残差对位姿的导数4.1.直线的观测模型和误差4.2.误差雅克比推导4.3.误差雅可比求导简洁版(不含imu坐标系转换)4.4.相关代码 0.引言 pl_vio线特征part I 现在CSDN有字数限制了&#xff0c;被迫拆分为两篇文章。 4.线段残差对位姿的导数 这一小…

【人工智能】实验五 采用卷积神经网络分类MNIST数据集与基础知识

实验五 采用卷积神经网络分类MNIST数据集 【实验目的】 熟悉和掌握 卷积神经网络的定义&#xff0c;了解网络中卷积层、池化层等各层的特点&#xff0c;并利用卷积神经网络对MNIST数据集进行分类。 【实验内容】 编写卷积神经网络分类软件&#xff0c;编程语言不限&#xf…

面向对象设计与分析40讲(13)单例模式懒汉模式和饿汉模式--全局资源入口点

文章目录 1 懒汉实现2 饥饿实现单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点以获取该实例。单例模式常用于需要共享资源、控制资源访问和限制对象实例化的情况。 在单例模式中,有两种常见的实现方式:懒汉(Lazy Ini…