深入解析:Flink SQL Window Deduplication按窗口“保留第一条/最后一条”记录(Streaming)

news/2026/1/21 23:02:08/文章来源:https://www.cnblogs.com/ljbguanli/p/19514288

深入解析:Flink SQL Window Deduplication按窗口“保留第一条/最后一条”记录(Streaming)

1. Window Deduplication 是什么

Window Deduplication 是 Deduplication(去重)的窗口版本:在 每个窗口(window)+ 分区键(partition keys) 内,对重复行做去重,只保留第一条最后一条。(nightlies.apache.org)

它和“连续表去重(Regular Deduplicate)”最大的区别在于:

直觉理解:Window Deduplication ≈ Window Top-N 的特例(N=1),同样基于 ROW_NUMBER()。(nightlies.apache.org)

2. 必须满足的优化器识别条件(写错就不会翻译成 Window Dedup)

2.1 必须来自 Windowing TVF 的结果(包含 window_start/window_end)

窗口去重通常直接跟在 Windowing TVF(TUMBLE/HOP/CUMULATE/SESSION)后使用;Windowing TVF 会生成 window_startwindow_endwindow_time 三列。(nightlies.apache.org)

2.2 PARTITION BY 必须包含 window_start 和 window_end

PARTITION BY 必须包含 window_start, window_end(再加你的业务分区键),否则优化器无法翻译为 Window Deduplication。(nightlies.apache.org)

2.3 WHERE 必须是这三种谓词之一:=1 / <=1 / <2

窗口去重对过滤谓词也很“死板”:必须是 rownum = 1rownum <= 1rownum < 2,否则优化器不认。(nightlies.apache.org)

3. 标准语法模板(直接套用)

(nightlies.apache.org)

SELECT [column_list]
FROM (
SELECT [column_list],
ROW_NUMBER() OVER (
PARTITION BY window_start, window_end [, col_key1...]
ORDER BY time_attr [ASC|DESC]
) AS rownum
FROM table_name  -- 必须是应用了 Windowing TVF 的关系
)
WHERE (rownum = 1 OR rownum <= 1 OR rownum < 2)
[AND other_conditions];

4. 参数语义:保留“第一条”还是“最后一条”

4.1 PARTITION BY:窗口 + 去重键

4.2 ORDER BY time_attr:决定保留第一条/最后一条

排序字段必须是时间属性。窗口去重里:

  • ASC:保留窗口内最早的一条(first)
  • DESC:保留窗口内最晚的一条(last)(nightlies.apache.org)

5. 示例:每 10 分钟窗口保留“最后一条记录”

下面这个例子与你给的示例一致:对每个 10 分钟 TUMBLE 窗口,按事件时间 bidtime 倒序取 rownum <= 1,就保留了每个窗口内最后一条。(nightlies.apache.org)

SELECT *
FROM (
SELECT
bidtime, price, item, supplier_id, window_start, window_end,
ROW_NUMBER() OVER (
PARTITION BY window_start, window_end
ORDER BY bidtime DESC
) AS rownum
FROM TABLE(
TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)
)
)
WHERE rownum <= 1;

如果你想“每个窗口内按 item 去重,只保留最后一条”,只要把 item 加进分区键:

SELECT *
FROM (
SELECT
bidtime, price, item, supplier_id, window_start, window_end,
ROW_NUMBER() OVER (
PARTITION BY window_start, window_end, item
ORDER BY bidtime DESC
) AS rownum
FROM TABLE(
TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)
)
)
WHERE rownum = 1;

6. 限制与版本注意点(非常重要)

6.1 跟在 Windowing TVF 后时:暂不支持 Session Window

目前如果 Window Deduplication 直接跟在 Windowing TVF 后,TVF 只能是 TUMBLE / HOP / CUMULATE,不支持 SESSION;Session window 预计后续支持。(nightlies.apache.org)

6.2 ORDER BY 的时间属性限制:当前要求事件时间

当前 Window Deduplication 的 ORDER BY 需要是事件时间属性(event time),处理时间(processing time)排序“未来会支持”。(nightlies.apache.org)

7. 生产踩坑清单(写之前对一下)

  1. PARTITION BY 忘了带 window_start, window_end → 优化器不翻译。(nightlies.apache.org)
  2. WHERE 写成 rownum < 1rownum = 0 等 → 不在认可谓词集合里。(nightlies.apache.org)
  3. ORDER BY 不是时间属性 / 或用了 processing time(当前限制)→ 计划不通过或无法翻译。(nightlies.apache.org)
  4. 事件时间字段没有正确 watermark → 窗口无法按预期关闭(表现为“迟迟不出结果”);Windowing TVF 对时间属性有明确要求。(nightlies.apache.org)

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

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

相关文章

Windows系统优化工具RyTuneX1.6.0 完全安装配置指南,Win10 Win11优化指南

平时用Windows系统的时候&#xff0c;是不是经常遇到系统卡顿、占空间&#xff0c;甚至担心隐私被泄露&#xff1f;别担心&#xff01;今天我给大家挖到一款超好用的Windows优化神器&#xff0c;完美适配Win10和Win11&#xff0c;功能强大到超乎想象&#xff01; RyTuneX是一款…

MemOS记忆图谱实战:从零构建LangChain智能体的长期记忆系统(含完整代码)

文章详细介绍了MemOS开源框架的Graph记忆图谱能力及其在LangChain智能体中的应用。首先通过TreeTextMemory实现基于图结构的记忆存储与检索&#xff0c;构建带记忆的ChatBot&#xff1b;其次介绍了异步记忆重组机制&#xff0c;自动将孤立记忆节点组织成知识图谱&#xff1b;最…

【计算机毕业设计案例】基于springboot的婚庆公司相亲主持服务平台的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于Java springboot实验室预约系统实验室设备租赁设备报修维修报废(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

大模型未来已来:从ChatGPT到Agentic AI的收藏级进阶指南

本文探讨了AI从被动的大语言模型向主动的代理式人工智能(Agentic AI)的转变。Agentic AI系统通过感知、推理、行动和记忆形成闭环控制&#xff0c;采用ReAct范式解决复杂问题&#xff0c;并正从单智能体向多智能体协作演进。尽管面临幻觉、对齐危机和可靠性挑战&#xff0c;Age…

一文读懂Qwen3-VL-EmbeddingReranker:多模态检索新标杆,收藏学习!

Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 是基于 Qwen3-VL 基础模型构建的统一多模态检索框架&#xff0c;采用 “三阶段训练→Matryoshka 嵌入→知识蒸馏” 技术路线&#xff0c;解决了传统多模态检索模型在存储效率和跨模态对齐方面的痛点。该模型在 MMEB-V2 基准测试中以77…

大模型项目实战宝典:从6B到65B模型训练,含LoRA/QLoRA/RLHF等热门技术,建议收藏

本文汇总了大模型实战项目&#xff0c;涵盖模型训练、微调(LoRA、P-Tuning等)及分布式训练等核心环节。提供从6B到65B模型的全量微调到高效微调再到RLHF的完整教程&#xff0c;包含命令行调用、Demo部署、LangChain集成等工程化实战指南。项目通过模块化代码和清晰文档&#xf…

强联通分量及缩点

一、\(dfs\)森林和强联通分量 二、强联通分量的\(Tarjan\)和\(Kosaraju\)算法 三、缩点和DP

Java毕设选题推荐:基于spring boot的开放实验室设备租赁报修预约管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

whk 趣事一则

家里请啥都没用了省流:导多了. 问题:求 \(29+16\cos x+12\sin x\) 的最大值. 设 \(f(x)=29+16\cos x+12\sin x\),求导可得 \(f(x)=-16\sin x+12\cos x\),整理可得 \(\tan x=\dfrac{3}{4}\) 时 \(f(x)=0\),容易发…

etcd集群备份与恢复

etcd集群备份与恢复 etcd V3 API版本数据备份 root@k8s-etcd1:~# mkdir /data root@k8s-etcd1:~# cd /data/ root@k8s-etcd1:/data# etcdctl snapshot save snapshot.dbetcd集群恢复 root@k8s-etcd1:/data# etcdut…

Java毕设项目:基于springboot的实验设备借用平台的设计与实现 实验室设备租赁系统(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

第 476 场周赛Q1——3745. 三元素表达式的最大值

题目链接&#xff1a;3745. 三元素表达式的最大值&#xff08;简单&#xff09; 算法原理&#xff1a; 解法&#xff1a;贪心 8ms击败10.92% 时间复杂度O(Nlogn) 思路很简单&#xff0c;通过排序找到ab最大&#xff0c;c最小&#xff0c;然后返回ab-c即可 Java代码&#xff1a;…

hhwdd:这些不都是基础练习吗?

记录一些 hhwdd 讲过的知识点。听不懂就会口胡 😃 记录的可能会很简单 莫队 考虑对原序列分块。设块长为 \(B\)。按照左端点递增为第一关键字,右端点所在块编号递增为第二关键字对询问排序。左端点递增,左指针总共…

构建企业级AI会议助手:会议记录与行动项跟踪

构建企业级AI会议助手:会议记录与行动项跟踪 关键词:AI会议助手、语音识别、自然语言处理、行动项跟踪、会议记录自动化、企业级应用、智能会议管理 摘要:本文深入探讨如何构建一个企业级的AI会议助手系统,该系统能够自动记录会议内容、识别关键决策点并跟踪行动项。我们将…

Kubernetes 部署、维护nginx服务

Kubernetes 部署、维护nginx服务 1.1 配置nginx服务并通过nodeport类型的svc实现访问 首先准备好放置yaml文件的目录 mkdir -pv /opt/k8s-data/yaml/myserver/nginx进入上一步准备好的目录,编写yaml文件 root@deploy0…

第75天(中等题 数据结构)

打卡第七十五天 2道中等题并查集模板题目:思路:并查集+哈希代码: class UnionFind {vector<int> fa;vector<int> sz; public:int cc;UnionFind(int n) : fa(n), sz(n, 0), cc(n) {iota(fa.begin(), fa.…

救命!AIGC太高怎么办?手把手教你降AI率:10款神器大盘点(内含白嫖攻略)

说真的&#xff0c;第一次被AI率搞心态是在毕业那会儿。临门一脚了&#xff0c;一测AI率直接爆炸到68%&#xff0c;导师电话里那句“你这论文是机器生成的吧”搞得我老脸通红。被怼之后&#xff0c;我跟疯了一样研究各种降AI的方法&#xff0c;折腾了快俩月&#xff0c;把市面上…

计算机Java毕设实战-基于springboot的在线云平台的房屋租赁管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【大数据毕设源码分享】基于Python大数据技术的广东旅游数据可视化分析的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…