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.rhkb.cn/news/462161.html

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

相关文章

【ShuQiHere】 如何理解渐进符号及其应用:大 O、大 Ω 和大 Θ

List item 📘 【ShuQiHere】 🚀 在算法复杂度分析中,渐进符号(Asymptotic Notation)是必不可少的工具,帮助我们估计算法的时间和空间需求,特别是当输入规模非常大时。这篇文章将为大家详细介绍…

Docker篇(安装容器)

目录 一、安装mysql容器 1. 拉取mysql镜像 2. 创建并运行容器 二、安装Tomcat容器 1. 拉取镜像 2. 创建并运行容器 三、安装Nginx容器 1. 拉取镜像 2. 创建并运行容器 四、安装Redis容器 1. 拉取镜像 2. 创建并运行容器 五、安装RabbitMQ 1. 拉取镜像 2. 创建并运…

Python酷库之旅-第三方库Pandas(187)

目录 一、用法精讲 866、pandas.Index.T属性 866-1、语法 866-2、参数 866-3、功能 866-4、返回值 866-5、说明 866-6、用法 866-6-1、数据准备 866-6-2、代码示例 866-6-3、结果输出 867、pandas.Index.memory_usage方法 867-1、语法 867-2、参数 867-3、功能 …

PostgreSQL 到 PostgreSQL 数据迁移同步

简述 PostgreSQL 是一个历史悠久且广泛使用的数据库,不仅具备标准的关系型数据库能力,还具有相当不错的复杂 SQL 执行能力。用户常常会将 PostgreSQL 应用于在线事务型业务,以及部分数据分析工作,所以 PostgreSQL 到 PostgreSQL …

JDK的下载

目录 JDK官网 Windows Ubantu 1.安装JDK 2.确定JDK版本 卸载OpenJDK Centos 1.下载JDK 2.安装JDK 3.验证JDK JDK官网 官网网址:Java Downloads | Oracle Windows 双击运⾏exe⽂件, 选择安装⽬录, 直⾄安装完成 Ubuntu 1.安装JDK 更新软件包 sudo apt u…

(56)MATLAB分析码间串扰信道的传递函数与频率响应

文章目录 前言一、3个存在码间串扰的信道二、信道特性仿真三、仿真结果四、迫零均衡器与MMSE均衡器仿真总结 前言 线性均衡器的性能完全取决于通信信道的特性。本文设计了三个不同传输特性的信道,给出了其传递函数系数,然后计算并绘制了各自的频率响应。…

etcd多实例配置

多实例进行配置,分别在多个不同端口进行监听,避免开启单机部署监听端口冲突; 查看go版本: go version 若没有go环境,则进行下载,解压至/usr/local后进行环境配置,编辑vim ~./bashrc vim ~./b…

029_Common_Plots_Matlab常见二维绘图

常用的二维绘图 常用绘图包括下面的种类: 线图, plot柱图, bar梯步图,stairstep误差棒图,errorbar极坐标图,polarplot跟图,stem散点图,scatter 这些命令都可以通过help xxx来查看…

NuGet Next发布,全新版私有化NuGet管理

NuGet Next发布,全新版私有化NuGet管理 NuGet Next是一款基于BaGet的一款私有化NuGet管理平台,我们对BaGet进行了扩展,并且提供了更多的功能。 NuGet 最新版开源私有化包管理,我们基于BaGet的基础之上增加了更多的功能&#xff…

STM32 从0开始系统学习5

目录 STM32 GPIO输入的四种模式 Practice And Usage 练习与封装 Detailed And Reference 更加具体的说明 输入浮空模式 输入上拉模式 输入下拉模式 模拟功能 我们下面聊一聊输入的事情,输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因:为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递,不可能整个椅子打包发送,这是非常不方便的,所以就要对椅子进行序列化处理,让椅子分成很多部分在一起打包发送…

WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录 一、概述 二、相关工作 1、新视图生成 2、单视图3D场景生成 3、视频生成 4、快速的3D场景表示 三、WonderWorld 1、FLAGS表示 2、引导深度扩散模块 3、单视角层次生成 4、基于几何的初始化 surfel表示 5、阶段一——生成3D场景部分 6、阶段二——用户交互控…

网络:IP分片和组装

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识,3位标志,13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…

从0到1搭建flink程序-WordCount(图文/详细/mac)

目录 一、目标以及前置资料 1.1 目标 1.2 前置资料 二、实现 2.1 搭建流程 2.2 调试 参考 一、目标以及前置资料 1.1 目标 初步感受flink任务,从0到1快速搭建一个flink程序 1.2 前置资料 1、下载jdk:Mac 安装jdk_mac 安装jdk 1.8-CSDN博客 2、…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

FineReport 倒计时特效

1、代码准备 将下面的代码生成对应文件 1.1、zzsc.js 这段代码是一个JavaScript计时器脚本,用于计算从当前时间到第二天午夜(即0点)之间的时间差,并将这个时间差显示在网页上的特定元素中。具体来说,它会实时更新页…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim: 1、对vim初步理解: 2、vim的模式: 3、进入与退出: 4、vim命令模式下的指令集: 移动光标: 删除: cv: 撤销: 其他: 5、vim底行模…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware ,选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 ,再点击 硬盘 ,再点击 扩展 选择预计扩展的空间,然后点击 扩展…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年,俄罗斯搜索引擎Yandex(俄语意为:语言目录)首次上线,已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗? 问题:CrossEntropyLoss需要手动softmax吗?答案:不需要官方文档代码解释 问题:CrossEntropyLoss需要手动softmax吗? 之前用 pytorch 实现自己的网络时&…