flinksql-Queries查询相关实战

  1. 分组聚合

--分组集

--GROUPING SETS() 允许你定义特定的分组方式,这样你可以选择只对感兴趣的分组进行计算。

--通过手动指定不同的分组组合,你能够灵活地控制数据的聚合结果。

--与 ROLLUP 和 CUBE 不同,GROUPING SETS 不会自动生成所有子集组合,而是只生成你指定的那些。

SELECT supplier_id, rating, COUNT(*) AS total

FROM (VALUES

    ('supplier1', 'product1', 4),

    ('supplier1', 'product2', 3),

    ('supplier2', 'product3', 3),

    ('supplier2', 'product4', 4))

AS Products(supplier_id, product_id, rating)

GROUP BY GROUPING SETS ((supplier_id, rating), (supplier_id), ());

--ROLLUP

--ROLLUP() 用于执行分层级别的聚合,主要用于需要按顺序逐层汇总数据的场景。

--与 CUBE() 不同,ROLLUP() 只生成按从左到右逐步减少维度的组合,而不是所有可能的子集组合。

--例如,ROLLUP(a, b, c) 会生成 (a, b, c), (a, b), (a), 和 (),而不会像 CUBE() 那样生成所有的可能组--合。

SELECT supplier_id, rating, COUNT(*)

FROM (VALUES

    ('supplier1', 'product1', 4),

    ('supplier1', 'product2', 3),

    ('supplier2', 'product3', 3),

    ('supplier2', 'product4', 4))

AS Products(supplier_id, product_id, rating)

GROUP BY ROLLUP (supplier_id, rating);

--立方体

--CUBE() 是一种扩展的 GROUP BY 操作,允许你针对多列进行分组聚合,并生成每种可能的维度组合的聚合结果。

--如果使用了 CUBE(a, b, c),Flink 会计算出所有 a, b, c 及其子集的组合的聚合结果。

--在数据分析和 OLAP(在线分析处理)场景中,CUBE 常用来计算多维数据的统计值。

SELECT supplier_id, rating, COUNT(*)

FROM (VALUES

    ('supplier1', 'product1', 4),

    ('supplier1', 'product2', 3),

    ('supplier2', 'product3', 3),

    ('supplier2', 'product4', 4))

AS Products(supplier_id, product_id, rating)

GROUP BY CUBE (supplier_id, rating);

  1. 窗口函数TVF

--注:不支持cdc模式,因为窗口函数只支持追加模式的,不支持update与delete操作

--模拟表

CREATE TABLE bid (

    `id` string,

    bidtime TIMESTAMP(3),

    price DECIMAL(10, 2),

    item string,

    ts as bidtime,

    WATERMARK FOR ts AS ts - INTERVAL '5' SECOND,

    --proc_time AS PROCTIME(),  

    PRIMARY KEY (`id`) NOT ENFORCED

  )

WITH

  (

    'connector' = 'jdbc',

    ${36},

    'table-name' = 'bid'

  );

  --滚动窗口

  --  SELECT cast(window_start as string) AS window_start, cast(window_end as string) AS window_end , SUM(price) AS total_price

  --  FROM TABLE(

  --  TUMBLE(TABLE  bid, DESCRIPTOR(ts), INTERVAL '10' MINUTES))

  --  GROUP BY window_start, window_end;

--滑动窗口

--  SELECT cast(window_start as string) AS window_start, cast(window_end as string) AS window_end , SUM(price) AS total_price

--    FROM TABLE(

--      HOP(TABLE bid, DESCRIPTOR(ts), INTERVAL '5' MINUTES, INTERVAL '10' MINUTES))

--    GROUP BY window_start, window_end;

--累计窗口

--  SELECT  cast(window_start as string) AS window_start, cast(window_end as string) AS window_end , SUM(price) AS total_price

--    FROM TABLE(

--      CUMULATE(TABLE bid, DESCRIPTOR(ts), INTERVAL '5' MINUTES, INTERVAL '20' MINUTES))

--    GROUP BY window_start, window_end;

 --会话窗口(不支持批处理)

 SELECT window_start, window_end, item, SUM(price) AS total_price

  FROM TABLE(

      SESSION(TABLE bid PARTITION BY item, DESCRIPTOR(ts), INTERVAL '5' MINUTES))

  GROUP BY item, window_start, window_end;

  1. 窗口聚合

     

CREATE TABLE bid (

    `id` string,

    bidtime TIMESTAMP(3),

    price DECIMAL(10, 2),

    item string,

    supplier_id string,

    ts as bidtime,

    WATERMARK FOR ts AS ts - INTERVAL '5' SECOND,

    --proc_time AS PROCTIME(),  

    PRIMARY KEY (`id`) NOT ENFORCED

  )

WITH

  (

    'connector' = 'jdbc',

    ${36},

    'table-name' = 'bid'

  );

--分组集

--  SELECT  cast(window_start as string) AS window_start, cast(window_end as string) AS window_end , supplier_id, SUM(price) AS total_price

--    FROM TABLE(

--      TUMBLE(TABLE bid, DESCRIPTOR(ts), INTERVAL '10' MINUTES))

--    GROUP BY window_start, window_end, GROUPING SETS ((supplier_id), ());

--ROLLUP

--  SELECT cast(window_start as string) AS window_start, cast(window_end as string) AS window_end , supplier_id, SUM(price) AS total_price

--  FROM TABLE(

--      TUMBLE(TABLE bid, DESCRIPTOR(ts), INTERVAL '10' MINUTES))

--  GROUP BY window_start, window_end, ROLLUP (supplier_id);

--立方体

SELECT cast(window_start as string) AS window_start, cast(window_end as string) AS window_end , supplier_id, item, SUM(price) AS total_price

  FROM TABLE(

    TUMBLE(TABLE bid, DESCRIPTOR(ts), INTERVAL '10' MINUTES))

GROUP BY window_start, window_end, CUBE (supplier_id, item);

  1. Over聚合(FLINK-CDC不支持)

     

CREATE TABLE bid (

    `id` string,

    bidtime TIMESTAMP(3),

    price DECIMAL(10, 2),

    item string,

    supplier_id string,

    --proc_time AS PROCTIME(),  

    WATERMARK FOR bidtime AS bidtime - INTERVAL '5' SECOND,

    PRIMARY KEY (`id`) NOT ENFORCED

  )

WITH

  (

    'connector' = 'jdbc',

    ${36},

    'table-name' = 'bid'

  );


 

--  SELECT

--    agg_func(agg_col) OVER (

--      [PARTITION BY col1[, col2, ...]]

--      ORDER BY time_col

--      range_definition),

--    ...

--  FROM ...

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

--ORDER BY:必须是时间戳列(事件时间、处理时间),只能升序

--range_definition:这个标识聚合窗口的聚合数据范围,在 Flink 中有两种指定数据范围的方式。第一种为按照行数聚合,第二种为按照时间区间聚合

--不指定 range_definition 时:Flink 默认使用 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。

--  SELECT supplier_id, cast(bidtime as string) as bidtime, price,

--    SUM(price) OVER (

--         PARTITION BY supplier_id

--      ORDER BY bidtime

--    ) AS sum_pri

--  FROM bid

--  ;

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

 SELECT supplier_id, cast(bidtime as string) as bidtime, price,

  SUM(price) OVER w AS sum_pri,

  avg(price)  OVER w AS avg_pri

FROM bid

WINDOW  w as (    PARTITION BY supplier_id

    ORDER BY bidtime )

;

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

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

相关文章

泄密与间谍:网络安全与国家安全的紧密联系

在当今数字化时代,网络安全已成为国家安全的重要组成部分。随着信息技术的迅猛发展,网络空间的安全问题愈发突出,泄密和间谍活动对国家安全构成了严峻挑战。本文将探讨泄密与间谍活动的影响,以及为何没有网络安全就没有国家安全。…

使用Git LFS管理大型文件

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Git LFS管理大型文件 引言 Git LFS 简介 安装 Git LFS 安装 Git 安装 Git LFS 配置 Git LFS 初始化 Git 仓库 指定需要使用…

C语言300行-投篮

&#xff03;include "stdio。h" &#xff03;ifdef __APPLE__ #include 〈GLUT/glut。h〉 &#xff03;else &#xff03;include <GL/glut.h> #endif #include 〈stdlib.h> #include <stdio。h〉 #include <math.h〉 #include 〈windows.h〉…

深度学习-梯度消失/爆炸产生的原因、解决方法

在深度学习模型中&#xff0c;梯度消失和梯度爆炸现象是限制深层神经网络有效训练的主要问题之一&#xff0c;这两个现象从本质上来说是由链式求导过程中梯度的缩小或增大引起的。特别是在深层网络中&#xff0c;若初始梯度在反向传播过程中逐层被放大或缩小&#xff0c;最后导…

Linux运行Java程序,并按天输出日志

我们写好的Java程序&#xff08;非web项目&#xff09;&#xff0c;直接在服务器中敲入命令 java -jar app_name.jar就可以运行&#xff0c;如果想让程序一直在服务器中运行&#xff0c;则需要nohup命令。如下&#xff1a; nohup java -jar app_name.jar 如果需要将程序输出的日…

【Clikhouse 探秘】ClickHouse 物化视图:加速大数据分析的新利器

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

electron + vue 打包完成后,运行提示 electrion-updater 不存在

electron vue 打包完成后&#xff0c;运行提示 electrion-updater 不存在 检查配置&#xff1a; electrion-updater 放在 dependencies 下你的项目 package.json 与 electron 的 package.json 是否共用同一个&#xff0c;如果不是&#xff0c; electrion-updater 放在 elect…

【Android】Java开发语言规范

Java语言规范 命名风格 **类名&#xff1a;**使用 UpperCamelCase 风格&#xff0c;必须遵从驼峰形式&#xff0c;但以下情形例外&#xff1a;DO / BO / DTO / VO / AO&#xff0c;所有单词的首字母大写**方法名、参数名、成员变量、局部变量&#xff1a;**统一使用 lowerCam…

Mybatisplus多表关联分页查询有多种实现方式

Mybatisplus多表关联分页查询有多种实现方式 1. 使用 MyBatis-Plus 配合 XML 自定义 SQL 实现多表关联分页查询实现步骤示例代码实体类定义Mapper 接口定义Mapper XML 编写多表关联查询Service 调用分页查询 2. 使用 MyBatis-Plus 的 Wrapper 搭配 自定义 SQL 实现分页查询示例…

一些硬件知识【2024/11/2】

当需要提供功率型的输出信号的时候&#xff0c;可以在信号发生器外接功率放大器&#xff0c;这样可以提高输出功率 信号的调幅&#xff08;AM&#xff09;、调频&#xff08;FM&#xff09;与调相&#xff08;PM&#xff09;&#xff1a; 调制信号&#xff1a;控制高频振荡的低…

WPF自定义日历控件Calendar 的方法

推荐下载地址 https://www.haolizi.net/example/view_2107.html <UserControl.Resources><local1:DayConverter x:Key"DayConverter"/><!--导入转换器--><Style x:Key"CalendarStyle1"TargetType"{x:Type Calendar}">&…

Qt第三课 ----------输入类的控件属性

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

Go如何实现自旋锁

自旋锁简介 在并发编程中&#xff0c;互斥锁&#xff08;Mutex&#xff09;是一种常用的同步机制&#xff0c;用于保护临界资源&#xff0c;防止数据竞争。而在某些特定场景下&#xff0c;尤其是当锁的持有时间很短且线程数量有限的情况下&#xff0c;一种更为轻量级的锁——自…

LabVIEW 离心泵机组故障诊断系统

开发了一套基于LabVIEW图形化编程语言设计的离心泵机组故障诊断系统。系统利用先进的数据采集技术和故障诊断方法&#xff0c;通过远程在线监测与分析&#xff0c;有效提升了离心泵的预测性维护能力&#xff0c;保证了石油化工生产的连续性和安全性。 项目背景及意义 离心泵作…

typescript的简介

简介 tsc npm install -g typescripttsc -v作用 检查类型和语法错误&#xff0c;提前纠错 ts的类型 如何穿件带有ts的vue工程 作用 常见类型 用法 编写一个ts文件 let username:string "John";let age:number 25;let isUpdated:boolean true;let data:any &q…

WPF+MVVM案例实战(二十)- 制作一个雷达辐射效果的按钮

文章目录 1、案例效果2、文件创建与代码实现1、创建文件2、图标资源文件3、源代码获取1、案例效果 2、文件创建与代码实现 1、创建文件 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 RadarEffactWindow.xaml 。代码功能分两个部分完成,一个是样式,一个是动画。页…

5G学习笔记三之物理层、数据链路层、RRC层协议

5G学习笔记三之物理层、数据链路层、RRC层协议 物理层位于无线接口协议栈的最底层&#xff0c;作用&#xff1a;提供了物理介质中比特流传输所需要的所有功能。 1.3.1 传输信道的类型 物理层为MAC层和更高层提供信息传输的服务&#xff0c;其中&#xff0c;物理层提供的服务…

​Java面试经典 150 题.P13. 罗马数字转整数(012)​

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int romanToInt(String s) {int sum…

一键AI换衣-可图AI试衣

我们的真的实现了穿衣自由了吗&#xff1f;上传一张人物图片和衣服的图片&#xff0c;就能实现一键换衣。 这就是可图AI试衣项目 魔塔地址&#xff1a;https://www.modelscope.cn/studio ... lors-Virtual-Try-On 参考&#xff1a; 一键AI换衣-可图AI试衣 https://www.jinsh…

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 基于Spring Boot的个人云盘管理系统设计…