Flink SQL 知其所以然:Window TopN 操作

数据库2025-11-05 06:13:157

大家好,操作我是操作老羊,今天我们来学习 Flink SQL 中的操作 Window TopN 操作。

Window TopN 定义(支持 Streaming):Window TopN 是操作一种特殊的 TopN,它的操作返回结果是每一个窗口内的 N 个最小值或者最大值。应用场景:小伙伴萌会问了,操作我有了 TopN 为啥还需要 Window TopN 呢?操作还记得上文介绍 TopN 说道的 TopN 时会出现中间结果,从而出现回撤数据的操作嘛?Window TopN 不会出现回撤数据,因为 Window TopN 实现是操作在窗口结束时输出最终结果,不会产生中间结果。操作而且注意,服务器租用操作因为是操作窗口上面的操作,Window TopN 在窗口结束时,操作会自动把 State 给清除。操作SQL 语法标准: 复制SELECT [column_list]FROM ( SELECT [column_list],操作 ROW_NUMBER() OVER (PARTITION BY window_start, window_end [, col_key1...] ORDER BY col1 [asc|desc][, col2 [asc|desc]...]) AS

rownum

FROM table_name) -- windowing TVFWHERE rownum <= N [AND conditions]1.2.3.4.5.6.7. 实际案例:取当前这一分钟的搜索关键词下的搜索热度前 10 名的词条数据。

输入表字段:

复制-- 字段名 备注-- key 搜索关键词-- name 搜索热度名称-- search_cnt 热搜消费热度(比如 3000)-- timestamp 消费词条时间戳CREATE TABLE source_table ( name BIGINT NOT NULL, search_cnt BIGINT NOT NULL, key BIGINT NOT NULL, row_time AS cast(CURRENT_TIMESTAMP as timestamp(3)), WATERMARK FOR row_time AS

row_time

) WITH (

...

);-- 输出表字段:-- 字段名 备注-- key 搜索关键词-- name 搜索热度名称-- search_cnt 热搜消费热度(比如 3000)-- window_start 窗口开始时间戳-- window_end 窗口结束时间戳CREATE TABLE sink_table ( key BIGINT, name BIGINT, search_cnt BIGINT, window_start TIMESTAMP(3), window_end TIMESTAMP(3)) WITH (

...

);-- 处理 sql:INSERT INTO

sink_table

SELECT key, name, search_cnt, window_start,

window_end

FROM ( SELECT key, name, search_cnt, window_start, window_end, ROW_NUMBER() OVER (PARTITION BY window_start, window_end,

key

ORDER BY search_cnt desc) AS

rownum

FROM ( SELECT window_start, window_end, key, name, max(search_cnt) as

search_cnt

-- window tvf 写法 FROM TABLE(TUMBLE(TABLE source_table, DESCRIPTOR(row_time), INTERVAL 1 MINUTES)) GROUP BY window_start, window_end, key,

name

))WHERE rownum <= 1001.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.

输出结果:

复制+I[关键词1, 词条1, 8670, 2021-1-28T22:34, 2021-1-28T22:35]+I[关键词1, 词条2, 6928, 2021-1-28T22:34, 2021-1-28T22:35]+I[关键词1, 词条3, 1735, 2021-1-28T22:34, 2021-1-28T22:35]+I[关键词1, 词条4, 7287, 2021-1-28T22:34, 2021-1-28T22:35]...1.2.3.4.5.

可以看到结果是符合预期的,其中没有回撤数据。

SQL 语义。数据源:数据源即最新的词条下面的搜索词的搜索热度数据,消费到 Kafka 中数据后,将数据按照窗口聚合的企商汇 key 通过 hash 分发策略发送到下游窗口聚合算子。窗口聚合算子:进行窗口聚合计算,随着时间的推进,将窗口聚合结果计算完成发往下游窗口排序算子。窗口排序算子:这个算子其实也是一个窗口算子,只不过这个窗口算子为每个 Key 维护了一个 TopN 的榜单数据,接受到上游发送的窗口结果数据进行排序,随着时间的推进,窗口的结束,将排序的结果输出到下游数据汇算子。数据汇:接收到上游的数据之后,然后输出到外部存储引擎中。免费信息发布网
本文地址:http://www.bzuk.cn/news/206b8199712.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

Miix510拆解教程(解密Miix510,让你了解它的内部机制)

Redis的这八个问题,验证你是否精通!

从懂互联网到懂用户,谷歌这次都押了哪些宝?

一个 Benchmark 比较分析工具

飞利浦MP3SA0283音质如何?(揭秘飞利浦MP3SA0283的音质表现及特点)

在 React 中实现条件渲染的七种方法

验证码的花式玩法,让我们试试

一篇带给你 V8 global.gc() 的实现

友情链接

滇ICP备2023006006号-33