您现在的位置是:亿华云 > 系统运维
Flink SQL 知其所以然:Window TopN 操作
亿华云2025-10-09 03:37:27【系统运维】0人已围观
简介大家好,我是老羊,今天我们来学习 Flink SQL 中的 Window TopN 操作。Window TopN 定义支持 Streaming):Window TopN 是一种特殊的 TopN,它的返
大家好,操作我是操作老羊,今天我们来学习 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 TVF
WHERE rownum <= N [AND conditions]实际案例:取当前这一分钟的搜索关键词下的搜索热度前 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 <= 100输出结果:
+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]
...可以看到结果是符合预期的,其中没有回撤数据。
SQL 语义。数据源:数据源即最新的词条下面的搜索词的搜索热度数据,消费到 Kafka 中数据后,将数据按照窗口聚合的云南idc服务商 key 通过 hash 分发策略发送到下游窗口聚合算子。窗口聚合算子:进行窗口聚合计算,随着时间的推进,将窗口聚合结果计算完成发往下游窗口排序算子。窗口排序算子:这个算子其实也是一个窗口算子,只不过这个窗口算子为每个 Key 维护了一个 TopN 的榜单数据,接受到上游发送的窗口结果数据进行排序,随着时间的推进,窗口的结束,将排序的结果输出到下游数据汇算子。数据汇:接收到上游的数据之后,然后输出到外部存储引擎中。源码库很赞哦!(67)
上一篇: 个人域名转为公司需要什么条件?个人域名转为公司该怎么做?
下一篇: 4、参加域名拍卖会
相关文章
- 4、域名传输时,取决于域名原始用户的邮箱是否有效,以及他是否将密码发送到此邮箱。
- 一网打尽──Vue3 Composition-api新特性
- 使用Spark Streaming转换不同的JSON有效负载
- 谈谈 Flutter 的 RunApp 与三棵树诞生流程?
- 比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
- 微服务体系中的分层设计和领域划分!
- Kubernetes限制节点启动的Pod数量
- 如何用最快的方式发送 10 万个 HTTP 请求
- 打开https://www.aizhan.com/输入自己想要查询的域名然后按回车键,如果做过网站都会有数据显示出来
- Vue非Node和Vuecli环境开发网站项目-支持动态路由