flink动态表的概念详解

news2024/11/20 11:24:56

目录

前言🚩

动态表和持续不断查询

stream转化成表

连续查询

查询限制

表转化为流


前言🚩

传统的数据库SQL和实时SQL处理的差别还是很大的,这里简单列出一些区别:

尽管存在这些差异,但使用关系查询和SQL处理流并非不可能高级关系数据库系统提供称为物化视图的功能。物化视图定义为SQL查询,就像常规虚拟视图一样。与虚拟视图相比,物化视图缓存查询的结果,使得在访问视图时不需要执行查询。缓存的一个常见挑战是避免缓存提供过时的结果。物化视图在修改其定义查询的基表时会过时。Eager View Maintenance是一种在更新基表后立即更新实例化视图的技术。

如果我们考虑以下内容,Eager View Maintenance和流上的SQL查询之间的联系就变得很明显:

  • 数据库表是INSERT,UPDATE和DELETEDML语句流的结果,通常被称为更新日志流。
  • 物化视图定义为SQL查询。为了更新视图,查询需要持续处理视图源表的更改日志流。
  • 物化视图是流式SQL查询的结果。

有了上面的基础,下面可以介绍一下动态表的概念了。

动态表和持续不断查询

动态表flink table apiSQL处理流数据的核心概念。与静态表相比,动态表随时间而变化,但可以像静态表一样查询动态表,只不过查询动态表需要产生连续查询。连续查询永远不会终止,会生成动态表作为结果表。查询不断更新其(动态)结果表以反映其(动态)输入表的更改。最终,动态表上的连续查询与定义物化视图的查询非常相似。

值得注意的是,连续查询的结果始终在语义上等同于在输入表的快照上执行批处理的到的相同查询结果。

下图显示了流,动态表和连续查询的关系:

  1. 数据流被转化为动态表
  2. 在产生的动态表上执行连续不断的查询,产生一个动态结果表。
  3. 结果动态表再次被转化为数据流。

注意动态表最重要的是逻辑概念。在查询执行期间,动态表不一定(完全)物化。

 在下文中,会以schema如下的点击事件流来解释动态表和连续不断的查询。

[
  user:  VARCHAR,   // the name of the user
  cTime: TIMESTAMP, // the time when the URL was accessed
  url:   VARCHAR    // the URL that was accessed by the user
]

stream转化成表

当然,想要用经典的sql去分析流数据,肯定要先将其转化为表。从概念上讲,流的每个新增记录都被解释为对结果表的Insert操作。最终,可以理解为是在从一个INSERT-only changelog流上构建一个表。

下图显示了click事件流(左侧)如何转换为表(右侧)。随着更多点击流记录的插入,生成的表不断增长。

注意:stream转化的表内部并没有被物化。 

连续查询

动态表上执行连续查询,并生成新的动态表作为结果表。与批处理查询不同,连续查询绝不会终止,而且会根据输入表的更新来更新它的结果表。在任何时间点,连续查询的结果在语义上等同于在输入表的快照上以批处理模式得到的查询的结果。

在下文中,我们将在用点击事件流定义的clicks表上展示两个示例查询。

第一个查询是一个简单的GROUP-BY COUNT聚合查询。主要是对clicks表按照user分组,然后统计url得到访问次数。下图展示了clicks表在数据增加期间查询是如何执行的。

假设当查询启动的事以后,clicks表为空。当第一行数据插入clicks表的时候,查询开始计算产生结果表。当[Mary, ./home]插入的时候,查询会在结果表上产生一行[Mary, 1]。当[Bob, ./cart]插入clicks表之后,查询会再次更新结果表,增加一行[Bob, 1]。当第三行,[Mary, ./prod?id=1]插入clicks表后,查询会更新结果表的[Mary, 1]为[Mary, 2]。最后,二手QQ买卖地图第四行数据插入clicks后,查询会给结果表增加一行[Liz, 1].

第二个查询仅仅是在上个查询的基础上增加了一个1小时的滚动窗口。下图展示了整个流水过程。

 

这个就类似批处理了,每个小时产生一次计算结果然后更新结果表。cTime的时间范围在12:00:00 ~12:59:59的时候总共有四行数据,查询计算出了两行结果,并将其追加到结果表。Ctime窗口在13:00:00 and 13:59:59的时候,总共有三行数据,查询再次产生两行结果追加到结果表。随着时间的推移,click数据会被追加到clicks表,结果表也会不断有新的结果产生。

Update 和 append 查询

尽管两个示例查询看起来非常相似(都计算了分组计数聚合),但是内部逻辑还是区别较大:

  • 第一个查询更新以前发出的结果,即结果表的更改日志流包含INSERT和UPDATE更改。
  • 第二个查询仅append到结果表,即结果表的更改日志流仅包含INSERT更改。

查询是生成仅append表还是update表有一些区别:

  • 产生update变化的查询通常必须维护更多状态。
  • 将仅append表转换为流与将update表的转换为流,方式不同。

查询限制

并不是所有的查询都能以流查询的格式执行的。因为有些查询计算起来成本比较高,要么就是要维护的状态比较大,要么就是计算更新成本高。

状态大小:连续查询在无界流上执行,通常应该运行数周或数月,甚至7*24小时。因此,连续查询处理的数据总量可能非常大。为了更新先前生成的结果,可能需要维护所有输出的行。例如,第一个示例查询需要存储每个用户的URL计数,以便能够增加计数,并在输入表收到新行时发出新结果。如果仅统计注册用户,则要维护的计数可能不会太高。但是,如果未注册的用户分配了唯一的用户名,则要维护的计数数将随着时间的推移而增长,最终可能导致查询失败。

SELECT user, COUNT(url)
FROM clicks
GROUP BY user;

计算更新:有时即使只添加或更新了单个输入记录,某些查询也需要重新计算和更新大部分发出的结果行。显然,这样的查询不适合作为连续查询执行。下面sql是一个示例查询,该查询基于最后一次点击的时间为每个用户计算RANK 。一旦clicks表接收到新增行,用户的lastAction就会更新,并且必须计算新的排名。但是,由于两行不能具有相同的排名,因此所有排名较低的行也需要更新。

SELECT user, RANK() OVER (ORDER BY lastLogin)
FROM (
 SELECT user, MAX(cTime) AS lastAction FROM clicks GROUP BY user
);

表转化为流

可以像传统数据库表一样使用INSERT, UPDATE, 和DELETE修改动态表。当将动态表转化为stream或者写入外部系统的时候,需要对修改进行编码。Flink的Table API和SQL支持三种方式来编码动态表的变化。

Append-only stream:假如动态表的更改操作仅仅是insert ,那么变为stream就仅仅需要将插入的行发送出去即可。

Retract stream: retract(回撤)流是包含两种类型的消息的流,增加消息和回撤消息。通过将INSERT编码为增加消息,DELETE编码为回撤消息,将UPDATE编码为对先前行的回撤消息和对新增行的增加消息,来完成将动态表转换为收回流。下图显示了动态表到回收流的转换。

 Upsert流: upsert流是一种包含两种消息,upsert消息和删除消息的流。转换为upsert流的动态表需要唯一键。具有唯一键的动态表通过将INSERT和UPDATE编码为upsert消息,DELETE编码为删除消息来完成动态表转化为流。流算符需要知道唯一键属性才能正确处理消息。与回撤流的主要区别在于,UPDATE使用单个消息对update进行编码,因此更有效。下图显示了动态表到upsert流的转换。

 

 

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

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

相关文章

界面控件Telerik UI for WinForms使用指南 - 数据绑定 填充(一)

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件,所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms组件为可视化任何类…

RoBERTa 阅读笔记

RoBERTa 阅读笔记 https://arxiv.org/abs/1907.11692 总的来说,bert在模型上并没有做太多的改进,只是在训练数据和训练策略上进行了一个改进。 相较于BERT的改进 1. Masking策略 stastic: 原始 BERT 的 masking 是固定的,RoBERTa 给相同的…

ChatGPT: 智能对话时代的未来展望与应用实践

ChatGPT: 智能对话时代的未来展望与应用实践 简介 ChatGPT 是一种基于深度学习和自然语言处理技术的人工智能对话模型。它可以通过生成自然语言文本的方式,与用户进行交互式的对话。作为一种先进的对话生成模型,ChatGPT 在近年来快速发展的人工智能领域中…

首次发刊!Coremail管理员社区2023年Q1季刊发布

4月21日,Coremail安全邮件城市沙龙在北京正式开展,此次沙龙活动的主题为“践行教育信创,护航邮件安全”。广东盈世计算机科技有限公司服务副总裁、ICANN UA大使吴秀诚在活动上正式发布《Coremail管理员社区2023年Q1季刊》。 Coremail管理员社…

公网远程访问公司内网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻,不管是财务、生产、销售还是采购,都需要用到ERP系统来协助。…

基于spring+vue开发的音乐网站

摘要 随着科学技术的飞速发展,社会的各个领域都在努力与现代的先进技术接轨,以提高自身的优势。音乐推荐管理也不能排除在外。音乐推荐管理是一个管理系统,以实际运用为开发背景,采用JSP技术构建,使用软件工程开发方法…

《面试1v1》java注解

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官:接下来,聊聊Java的注解,它们到底有什么用? 候选人: 注解的用处主要三个: 第一个,编译期使用。比如Override确保你正确重…

activeMQ持久化报错的问题

activeMQ持久化,启动activeMQ报错, INFO | Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp2.BasicDataSource5148e82a) jvm 1 | WARN | Could not get JDBC connection: Cannot create PoolableConnectionFactory (Commun…

matlab点云的可视化-源码复制粘贴即可(一)

一、导入并可视化一个无属性的点云 clc; clear; close; % clear everything% Import a point cloud from a plain text file (run type(Lion.xyz) to see the contents of the file) pc pointCloud(Lion.xyz);% Generate a z-colored view of the point cloud pc.plot;% Set …

加密解密软件VMProtect入门使用教程(二):分析、破解和保护软件

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…

Vue ElementUI Axios 前后端案例(day03) 之 Axios

前置知识 AJAX 前置知识 答疑 问:我们是否可以这么理解,发送url请求就是服务器之间建立连接,tcp三次握手之后 其中与服务器进行数据交换:通过AJAX可以给服务器发送请求 就是连接建立以后 我们发送我们的浏览器数据 就是所谓的…

家用洗地机有什么优缺点?入门级家用洗地机

家用清洁产品近几年发展迅猛,扫拖机器人、洗地机等热门品类更是在家电产品销量普遍下滑的趋势下,仍然保持着大幅增长。越来越多的消费者开始关注清洁类产品,但扫拖机器人和吸尘器的清洁效果有限,洗地机会在功能上更加的完善&#…

2023年全国职业院校技能大赛软件测试赛题第1套

2023年全国职业院校技能大赛 软件测试赛题第1套 赛项名称: 软件测试 英文名称: Software Testing 赛项编号: GZ034 归属产业: 电子与信息大类 …

通过适当的异常处理进行快速调试

编写良好的代码和异常处理 作为开发人员,开发中最令人恼火的部分通常是调试。与我共事过的大多数程序员都会赞同这种观点。通常,看到异常的第一反应是烦恼和沮丧的混合。易于调试的异常通常会在调试后的几分钟内产生根本原因。最让我烦恼的是那些在系统…

vue实现多布局模式

1、目标效果 源码地址:multipal-layout-demo: vue2实现多布局暗黑模式 默认布局:头部宽度100%,侧边栏、内容区 顶部布局:头部宽度100%,内容区 侧边栏布局:侧边栏高度100%,头部、内容区 2、原理…

python+vue课堂教学效果实时评价系统

系统权限按管理员,教师和学生这三类涉及用户划分。 (a) 管理员;管理员使用本系统涉到的功能主要有:个人中心,学生管理,教师管理,教学视频管理,教学课件管理,类型管理,视频…

ArcGIS Pro导航工具

主要导航工具为浏览工具 、屏幕导航器 、书签 、转到XY工具 。 其它还包括链接视图、地图比例(2D)、场景高度(3D)、暂停并刷新绘制、照相机属性、在3D模式下导航、键盘快捷键等。 1 主要导航工具 地图和场景的默认工具为浏览工具…

【python视图3】networkx图操作示例

一、说明 根据定义,图是节点(顶点)以及已识别的节点对(称为边、链接等)的集合。在 NetworkX 中,节点可以是任何可哈希对象,例如文本字符串、图像、XML 对象、另一个图形、自定义节点对象等。 如…

如何区分高压和低压电阻接地系统

电阻接地系统或电阻接地中性线系统是通过一个或多个电阻在中性线和大地之间有意连接的系统。在这些系统中,接地故障期间造成的损坏远小于在牢固接地系统中接地故障期间造成的损坏,并且设备上的机械应力也大大降低。 电阻通常具有比接近接地点的系统电抗…

WIN10-22H2专业版_电脑维修人员专用装机系统镜像【04.20更新】

WIN10-22H2专业版是由站长亲自封装的电脑维修人员专用装机系统镜像,系统干净无广告,稳定长效不卡顿,适合电脑维修店用来维修电脑重装系统。此版本是WIN10系统里非常稳定的正式版本之一,适合在维修电脑时重装系统或者大批量装机使用…