Flink/Blink 原理漫谈(二)流表对偶性和distinct详解
系列文章目录
Flink/Blink 原理漫谈(零)运行时的组件
Flink/Blink 原理漫谈(一)时间,watermark详解
Flink/Blink 原理漫谈(二)流表对偶性和distinct详解
Flink/Blink 原理漫谈(三)state 有状态计算机制 详解
Flink/Blink 原理漫谈(四)window机制详解
Flink/Blink 原理漫谈(五)流式计算的持续查询实现 详解
Flink/Blink 原理漫谈(六)容错机制(fault tolerance)详解
文章目录
- 系列文章目录
- 流表对偶性
- DISTINCT
- DISTINCT in SELECT Clause
- 两种实现
- 底层原理
- DISTINCT in COUNT AGG、
- 语法
- 底层原理
流表对偶性
这部分其实很简单……不明白为啥文档写的很复杂。
简单来说,mysql需要进行主备复制,而binlog就是mysql实现主备复制的核心手段。binlog记录了数据库上的所有增、删、更新等操作。binlog中携带时间戳,我们将所有表的操作都按时间进行记录下来形成binlog,而对binlog的event进行回放的过程就是流数据处理的过程,回放的结果恰恰又形成了一张表。也就是表的操作会形成携带时间的事件流,对流的处理又会形成一张不断变化的表,表和流具有等价性,可以互转。这种流与表的信息无损的互转,我们称之为流表对偶性。
DISTINCT
DISTINCT in SELECT Clause
当DISTINCT用在SELECT Clause中表示对查询的columns进行去重。
两种实现
有两种实现方法:
①
SELECT DISTINCT expressionsFROM tables
• DISTINCT - 必须放到开始位置
• expressions - 是N(N>=1)个expression,可以是具体的column,也可以是function等任何合法表达式
②
• SELECT expressions
• FROM tables
• GROUP BY expressions ;
这两种方法的输出结果一致。
底层原理
对于上面我们说的去重有两种等效的方式,那么在Blink 内部采用了哪种方式实现的呢?我们看一下Blink SQL:
SELECT DISTINCT FirstName, LastName FROM distinct_tab_source
的plan如下:
StreamExecGroupAggregate(groupBy=[FirstName, LastName], select=[FirstName, LastName])StreamExecExchange(distribution=[hash[FirstName, LastName]])StreamExecCalc(select=[FirstName, LastName])StreamExecScan(table=[[distinct_tab_source]])
也就是说在Blink 内部利用GROUP BY Clause实现的去重逻辑
DISTINCT in COUNT AGG、
语法
COUNT(DISTINCT expression)
底层原理
CountDistinct 的核心逻辑是对统计列进行去重计数。
• 数据存储 - 流数据源源不断的到来,要想知道是否有某个值(对应统计列的值)是否流过,那么我们必须记录历史上已经来过的值,以便去重;
• 数据撤回 - 流上数据的更新我们需要Retract机制处理,其中Retract机制里面涉及了消息类型,即 "+/-"来标识消息类型。那么在CountDistinct也要管理“-”的消息,如果已经计数的消息被撤回了,我们需要更新计数统计结果
• + 记录到来会调用accumulate方法,结合state进行去重计数统计,同时 - 记录到了会调用 retract 方法,结果state 进行撤回记录处理。
• +state和-state的数据结构都是 MapView<colType, LONG>, key是存储col的值,value存储value的记录数
• countState是LONG 类型的基础类型
• -state 实际运行时只有流入的数据正向记录还没有到来时候,才需要进行数据存储(一般很少发生)。
• -state 和 +state (后续版本会合并为一份state,用value的正负判断Event类型)
这无疑会导致state越来越大,更多的性能问题会出现,在未来可能会使用基数估计等方法来解决这样的问题。
Flink/Blink 原理漫谈(二)流表对偶性和distinct详解相关推荐
- Flink/Blink 原理漫谈(一)时间,watermark详解
系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...
- Flink/Blink 原理漫谈(零)运行时的组件
系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...
- Flink/Blink 原理漫谈(六)容错机制(fault tolerance)详解
系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...
- Flink基础(十二):Parallelism 和 Slot 详解
Parallelism parallelism 是并行的意思,在 Flink 里面代表每个算子的并行度,适当的提高并行度可以大大提高 Job 的执行效率,比如你的 Job 消费 Kafka 数据过慢, ...
- 【深度好文】Flink SQL流批⼀体化技术详解(一)
持续输出 敬请关注 大数据架构 湖仓一体化 流批一体 离线+实时数仓 各种大数据解决方案 各种大数据新技术实践 持续输出 敬请关注 [珍藏版]数仓平台.推荐系统架构选型及解决⽅案_大数据研习 ...
- MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间
文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解...
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema ...
- 我的世界服务器修改钟,我的世界钟合成表 钟使用方法详解
我的世界钟合成表 钟使用方法详解.不仅在现实生活中有着钟,我的世界游戏里面也是有钟的,那下面就给大家分享一下我的世界钟怎么合成以及钟有什么用吧!希望对大家有所帮助. 游戏园我的世界官方群:325049 ...
- 新浪微博怎么推广引流,微博推广引流的三种方法详解
新浪微博怎么推广引流,微博推广引流的三种方法详解,#推广#营销 微博营销有哪些特点?#百收网SEO@千行助推 大家好,上一次内容讲了生意人如何将客户引流到自己的微信上去,受到很多朋友的喜爱,那么这一期 ...
最新文章
- centos7 mysql 5.6.38_centos7.4 安装mysql 5.6.38
- 在VS中MFC、ATL与WIN32有什么联系或区别?
- Xshell操控kali-linux虚拟机
- Self-Supervised Curriculum Learning for Spelling Error Correction
- 大数据在新型智慧城市的作用
- Linux硬链接和符号链接(转)
- 论文笔记 | 使用GCN建模关系数据
- 最全常用正则表达式大全
- 软考常考知识点整理-项目人员配备管理计划
- gitlab安装配置
- 激光视觉惯导融合的slam系统
- html5 pc端 客户端 web端的区别,wap版、手机版以及web的区别
- ReentrantLock 锁详解
- Scratch学习:如何把角色设置成半透明?
- python搭建简单本地服务器
- 不到七千入手的高性能笔记本,游匣G15实测
- Maya 保存为ma格式时出错
- ASE第三次作业——结对编程
- 重磅!涵盖全微服务操作的Spring Cloud 文档竟出自Alibaba
- iOS中SSZipArchive解压带中文名称乱码、解压失败、丢失文件的问题
热门文章
- DBeaver mysql 外键设置了级联删除,子表无法添加数据
- 基于滑模控制的直接转矩控制的MATLAB仿真
- 怎么音频转文字?快把这些方法收好
- 【教学类-12-03】20221106《连连看横版8*4(2套题目 适合中班))(中班主题《我们的城市》)
- [C语言]字节跳动2019春招研发部分编程题
- 马克-库班 写BLOG的亿万富豪
- 大学计算机考试要买电脑吗,大一新生开学,要不要买电脑?先听听学姐这4个理由,然后再决定...
- C++麻将游戏算法深入解析
- 用户空间的SystemTap探测是怎么工作的
- 基于PHP+mysql的社区人口管理系统的设计与实现