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聚合

持续更新

相关推荐
跨境卫士苏苏11 分钟前
亚马逊卖家接口新增欧盟清关商品标识要求跨境技术团队如何适配
大数据·新媒体运营·市场营销·跨境电商·跨境·营销策略
莫晓燚17 分钟前
阿里云若依项目部署与日志采集---实战
运维·数据库·redis·阿里云·ruoyi
roman_日积跬步-终至千里38 分钟前
数仓方法论(四):跨过程整合——用一致性维度连接不同业务事实
大数据
香蕉大香蕉(06敬畏市场)43 分钟前
MySQL 单点详解(08)
java·数据库·mysql·面试·八股
l1t1 小时前
DeepSeek总结的如何在 PostgreSQL 中删除一张 4 TB 的表
数据库·postgresql
ClouGence1 小时前
开源数据库管理工具 CloudDM 发布新版本,支持团队多级审批工单,无需依赖第三方系统
数据库·sql·开源
roman_日积跬步-终至千里2 小时前
数仓方法论(一):需求分析——把经营诉求转化为可验证的数据需求
大数据·数据挖掘·需求分析
李纲明2 小时前
WordPress 报建立数据库连接时出错:先核 wp-config 四元组,再查 MySQL 服务与表修复
运维·数据库·mysql·wordpress·排障·devdiy
智恒百亿3 小时前
一台 5090 八卡服务器怎么分给一个团队用?多模型多任务的显存分配实战
java·大数据·人工智能
2401_881828323 小时前
MySQL操作命令
android·mysql·adb