系列文章目录

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详解相关推荐

  1. Flink/Blink 原理漫谈(一)时间,watermark详解

    系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...

  2. Flink/Blink 原理漫谈(零)运行时的组件

    系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...

  3. Flink/Blink 原理漫谈(六)容错机制(fault tolerance)详解

    系列文章目录 Flink/Blink 原理漫谈(零)运行时的组件 Flink/Blink 原理漫谈(一)时间,watermark详解 Flink/Blink 原理漫谈(二)流表对偶性和distinct ...

  4. Flink基础(十二):Parallelism 和 Slot 详解

    Parallelism parallelism 是并行的意思,在 Flink 里面代表每个算子的并行度,适当的提高并行度可以大大提高 Job 的执行效率,比如你的 Job 消费 Kafka 数据过慢, ...

  5. 【深度好文】Flink SQL流批⼀体化技术详解(一)

    持续输出 敬请关注 大数据架构  湖仓一体化  流批一体 离线+实时数仓  各种大数据解决方案  各种大数据新技术实践 持续输出  敬请关注 [珍藏版]数仓平台.推荐系统架构选型及解决⽅案_大数据研习 ...

  6. MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间

    文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...

  7. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解...

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema ...

  8. 我的世界服务器修改钟,我的世界钟合成表 钟使用方法详解

    我的世界钟合成表 钟使用方法详解.不仅在现实生活中有着钟,我的世界游戏里面也是有钟的,那下面就给大家分享一下我的世界钟怎么合成以及钟有什么用吧!希望对大家有所帮助. 游戏园我的世界官方群:325049 ...

  9. 新浪微博怎么推广引流,微博推广引流的三种方法详解

    新浪微博怎么推广引流,微博推广引流的三种方法详解,#推广#营销 微博营销有哪些特点?#百收网SEO@千行助推 大家好,上一次内容讲了生意人如何将客户引流到自己的微信上去,受到很多朋友的喜爱,那么这一期 ...

最新文章

  1. centos7 mysql 5.6.38_centos7.4 安装mysql 5.6.38
  2. 在VS中MFC、ATL与WIN32有什么联系或区别?
  3. Xshell操控kali-linux虚拟机
  4. Self-Supervised Curriculum Learning for Spelling Error Correction
  5. 大数据在新型智慧城市的作用
  6. Linux硬链接和符号链接(转)
  7. 论文笔记 | 使用GCN建模关系数据
  8. 最全常用正则表达式大全
  9. 软考常考知识点整理-项目人员配备管理计划
  10. gitlab安装配置
  11. 激光视觉惯导融合的slam系统
  12. html5 pc端 客户端 web端的区别,wap版、手机版以及web的区别
  13. ReentrantLock 锁详解
  14. Scratch学习:如何把角色设置成半透明?
  15. python搭建简单本地服务器
  16. 不到七千入手的高性能笔记本,游匣G15实测
  17. Maya 保存为ma格式时出错
  18. ASE第三次作业——结对编程
  19. 重磅!涵盖全微服务操作的Spring Cloud 文档竟出自Alibaba
  20. iOS中SSZipArchive解压带中文名称乱码、解压失败、丢失文件的问题

热门文章

  1. DBeaver mysql 外键设置了级联删除,子表无法添加数据
  2. 基于滑模控制的直接转矩控制的MATLAB仿真
  3. 怎么音频转文字?快把这些方法收好
  4. 【教学类-12-03】20221106《连连看横版8*4(2套题目 适合中班))(中班主题《我们的城市》)
  5. [C语言]字节跳动2019春招研发部分编程题
  6. 马克-库班 写BLOG的亿万富豪
  7. 大学计算机考试要买电脑吗,大一新生开学,要不要买电脑?先听听学姐这4个理由,然后再决定...
  8. C++麻将游戏算法深入解析
  9. 用户空间的SystemTap探测是怎么工作的
  10. 基于PHP+mysql的社区人口管理系统的设计与实现