【flink理论】动态表:关系查询处理流的思路:连续查询、状态维护;表转换为流需要编码编码

文章目录

  • 一. 使用关系查询处理流的讨论
  • 二. 动态表 & 连续查询(Continuous Query)
  • 三. 在流上定义表
    • 1. 连续查询
    • 2. 查询限制
      • 2.1. 维护状态
      • 2.2. 计算更新
  • 四. 表到流的转换
    • 1. Append-only 流
    • 2. Retract 流
    • 3. Upsert 流

本文主要讨论了:

  1. 讨论通过关系查询处理无界流的讨论
  2. flink维护一个动态表来处理不断变化的流查询,这需要维护状态。
  3. 动态表转换为流或输出时需要进行流的编码
     

一. 使用关系查询处理流的讨论

传统关系代数与流处理在流入数据、执行和结果输出的区别:
在这里插入图片描述

物化视图与即时视图维护,提供了关系查询处理流的思路

高级关系数据库系统提供了一个称为 物化视图(Materialized Views) 的特性。物化视图被定义为一条 SQL 查询,就像常规的虚拟视图一样。与虚拟视图相反,物化视图缓存查询的结果,因此在访问视图时不需要对查询进行计算。
 
缓存的一个常见难题是防止缓存为过期的结果提供服务。当其定义查询的基表被修改时,物化视图将过期。 即时视图维护(Eager View Maintenance) 是一种一旦更新了物化视图的基表就立即更新视图的技术。

即时视图维护和流上的SQL查询之间的联系:

  • 数据库表是 INSERT、UPDATE 和 DELETE DML 语句的 stream 的结果–对数据库的所有操作记作为流,即binlog,通常称为 changelog stream
  • 物化视图被定义为一条 SQL 查询。为了更新视图,查询不断地处理changelog 流。
  • 物化视图是流式 SQL 查询的结果。

上面主要表达了:通过将数据库的binlog消费为stream,用SQL查询作为物化视图,并通过changelog更新物化视图。

 

二. 动态表 & 连续查询(Continuous Query)

动态表是随时间变化的,查询动态表将生成连续查询,查询结果会生成一个动态表,并且查询会不断更新生成的动态表。

与表示批处理数据的静态表不同,动态表是随时间变化的。可以像查询静态批处理表一样查询它们。查询动态表将生成一个 连续查询 。一个连续查询永远不会终止,结果会生成一个动态表。查询不断更新其(动态)结果表,以反映其(动态)输入表上的更改。本质上,动态表上的连续查询非常类似于定义物化视图的查询。

需要注意的是,连续查询的结果在语义上总是等价于以批处理模式在输入表快照上执行的相同查询的结果。

 
流、动态表和连续查询之间的关系:
在这里插入图片描述

  1. 将流转换为动态表。
  2. 在动态表上计算一个连续查询,生成一个新的动态表。
  3. 生成的动态表被转换回流。

注意: 动态表首先是一个逻辑概念。在查询执行期间不一定(完全)物化动态表。

三. 在流上定义表

流转换为表

为了使用关系查询处理流,必须将其转换成 Table。

从概念上讲,流的每条记录都被解释为对结果表的 INSERT 操作。本质上我们正在从一个 INSERT-only 的 changelog 流构建表。
显示了单击事件流(左侧)如何转换为表(右侧)。当插入更多的单击流记录时,结果表将不断增长。
在这里插入图片描述
注意: 在流上定义的表在内部没有物化。那什么时候会物化ing。

1. 连续查询

  1. 动态表上进行连续查询将生成一个新的动态表
  2. 连续查询不会终止,会根据输入表的更新,更新结果表
  3. 在任何时候,连续查询的结果在语义上与以批处理模式在输入表快照上执行的相同查询的结果相同。

例子1:基于 user 字段对 clicks 表进行分组,并统计访问的 URL 的数量。

在这里插入图片描述

 

例子2:将 clicks 分组至每小时滚动窗口中,然后计算 url 数量。
在这里插入图片描述

两个查询的不同

  • 第一个查询更新先前输出的结果,即定义结果表的 changelog 流包含 INSERT 和 UPDATE 操作。
  • 第二个查询只附加到结果表,即结果表的 changelog 流只包含 INSERT 操作。

 

2. 查询限制

2.1. 维护状态

连续查询在无界流上计算,通常应该运行数周或数月。因此,连续查询处理的数据总量可能非常大。这里flink要维护需要保存结果的行(字段),以便能够及时更新它们。例如,第一个查询示例需要一直存储每个用户的 URL 计数,以便能够增加该计数并在输入表接收新行时发送新结果。

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

2.2. 计算更新

有些查询需要重新计算和更新大量已输出的结果行,即使只添加或更新一条输入记录。显然,这样的查询不适合作为连续查询执行(ing)。下面的查询就是一个例子,它根据最后一次单击的时间为每个用户计算一个 RANK。一旦 click 表接收到一个新行,用户的 lastAction 就会更新,并必须计算一个新的排名。然而,由于两行不能具有相同的排名,所以所有较低排名的行也需要更新。

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

但是我们可以设置一些参数可以用来在维持状态的大小和获得结果的准确性之间做取舍。

 

四. 表到流的转换

动态表可以像普通数据库表一样通过 INSERT、UPDATE 和 DELETE 来不断修改。

在将动态表转换为流将其写入外部系统时,需要对这些更改进行编码。Flink的 Table API 和 SQL 支持三种方式来编码一个动态表的变化:

1. Append-only 流

仅通过 INSERT 操作修改的动态表可以通过输出插入的行转换为流。

 

2. Retract 流

retract 流包含两种类型的 message: add messages 和 retract messages 。通过

  • 将INSERT 操作编码为 add message
  • 将DELETE 操作编码为 retract message
  • 将 UPDATE 操作编码为更新(先前)行的 retract message 和更新(新)行的 add message,将动态表转换为 retract 流。

在这里插入图片描述

 

3. Upsert 流

upsert 流包含两种类型的 message: upsert messages 和delete messages。

转换为 upsert 流的动态表需要(可能是组合的)唯一键

  • 将 INSERT 和 UPDATE 操作编码为 upsert message,
  • 将 DELETE 操作编码为 delete message ,将具有唯一键的动态表转换为流。

消费流的算子需要知道唯一键的属性,以便正确地应用 message。

下图显示了将动态表转换为 upsert 流的过程。
在这里插入图片描述
与 retract 流的主要区别在于 UPDATE 操作是用单个 message 编码的,因此效率更高

 

请注意,在将动态表转换为 DataStream 时,只支持 append 流和 retract 流。

 

参考:
https://nightlies.apache.org/flink/flink-docs-release-1.18/zh/docs/dev/table/concepts/dynamic_tables/#table-to-stream-conversion

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

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

相关文章

Window MongoDB安装

三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…

一阶低通滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计:参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz,截止频率20Hz。 注意:设计参数使用在离散系统中&…

Python使用Mechanize库完成自动化爬虫程序

Mechanize是一个Python第三方库,它可以模拟浏览器的行为,实现自动化的网页访问、表单填写、提交等操作。下面是一个使用Mechanize库编写的爬虫的例子,它可以爬取百度搜索结果页面的标题和链接: import mechanize from bs4 import …

短期经济波动:均衡国民收入决定理论(三)

短期经济波动:国民收入决定理论(三) 文章目录 短期经济波动:国民收入决定理论(三)[toc]1 总需求曲线及其变动1.1 总需求曲线含义1.2 总需求曲线推导1.2.1 代数推导1.2.2 几何推导 1.3 AD曲线及其变动1.3.1 扩张性财政政策1.3.2 扩张性货币政策 2 总供给曲…

【星海出品】云存储 ceph

https://ceph.com/en/ ceph组件介绍 Monitor 一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。 OSD OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有…

elasticsearch+canal增量、全量同步

目录 一、搭建环境: 1.1 下载软件上传到linux目录/data/soft下 1.2 把所有软件解压到/data/es-cluster 二、单节点(多节点同理)集群部署elasticsearch 2.1 创建es用户 2.2 准备节点通讯证书 2.3 配置elasticsearch,编辑/d…

C语言指针详解(1)(能看懂字就能明白系列)文章超长,慢慢品尝

目录 1、内存和地址 2、指针简介 与指针相关的运算符: 取地址操作符(&) 解引用操作符(间接操作符)(*) ​编辑 指针变量的声明 指针变量类型的意义 指针的基本操作 1、指针与整数相加…

leetcode栈和队列三剑客

用队列实现栈 队列是先进先出的,而栈是只能在栈顶进行出栈和入栈,那我们这道题要用队列来实现栈的话,这里给的思路是两个队列,因为两个队列的话就可以相互导数据,比如我们来实现这个题目的push函数,我们的栈…

PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第34讲&#…

Niushop单商户及多商户v5商城系统第三方商业插件cps联盟视频购物及多包装库存转换的安装

一、后端安装 把video文件夹直接上传到addon目录下即可登录后台,设置->系统维护->插件管理->未安装插件,找到插件直接安装即可 3.在营销->营销中心->营销活动,找到视频列表这个插件,点击进去配置视频即可 4.装…

Vue h5页面手指滑动图片

场景: 四张图,要求随着手指滑动而滑动 代码: imgs是父盒子 poster-item是每个图片 .imgs {white-space: nowrap;overflow: hidden;overflow-x: auto;margin-bottom: 17px;.poster-item {display: inline-block;vertical-align: middle;wid…

Pytorch数据集读出到transform全过程

最近写代码又遇见了这个问题,又忘记了,于是写一篇博客记录一下。 一般我们使用pytorch获取CIFAR10数据集,一般这样写: mean [0.4914, 0.4822, 0.4465] std [0.2023, 0.1994, 0.2010] transform transforms.Compose([transform…

HBase中的数据表是如何用CHAT进行分区的?

问CHA:HBase中的数据表是如何进行分区的? CHAT回复: 在HBase中,数据表是水平分区的。每一个分区被称为一个region。当一个region达到给定的大小限制时,它会被分裂成两个新的region。 因此,随着数据量的增…

探索arkui(2)--- 布局(列表)--- 2(支持分组/实现响应滚动位置)

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中,开发人员通常会展示新网站或应用程序的设计、功能和用户体验,并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件,吸…

Unity中Shader矩阵的转置矩阵

文章目录 前言一、转置的表示二、转置矩阵三、转置矩阵的总结1、(A^T^)^T^ A2、(A B)^T^ A^T^ B^T^3、(kA)^T^ kA^T^ (k为实数)4、(AB)^T^ B^T^A^T^5、如果 A A^T^ 则称A为对称矩阵6、如果 AA^T^ I(单位矩阵),则称 A 为正交矩阵,同时 A^T^ A^-1…

Python与ArcGIS系列(八)通过python执行地理处理工具

目录 0 简述1 脚本执行地理处理工具2 在地理处理工具间建立联系0 简述 arcgis包含数百种可以通过python脚本执行的地理处理工具,这样就通过python可以处理复杂的工作和批处理。本篇将介绍如何利用arcpy实现执行地理处理工具以及在地理处理工具间建立联系。 1 脚本执行地理处理…

【Vue配置项】 computed计算属性 | watch侦听属性

目录 前言 computed计算属性 什么是计算属性? Vue的原有属性是什么? 得到的全新的属性是什么? 计算属性怎么用? 计算属性的作用是什么? 为什么说代码执行率高了? computed计算属性中的this指向 co…

CCNA课程实验-14-Final_Lab

目录 实验条件网络拓朴需求 配置实现1. 配置PC1~3, DHCP_Server的vlan2. VLAN10、20的网关为MSW1对应的SVI,VLAN30、40的网关为MSW2对应的SVI;3. 配置5台交换机之间线路均为Trunk4. 配置5台交换机均启用Rapid-PVST(RSTP)5. 配置DHCP Server,创…

Django模板层

模板之变量 所有的数据类型都可以在模板中使用 render(request, index.html, context{}) render(request, index.html, contextlocals()) """在模板中使用变量的时候,用的是字典的key值,key值value值一般保持一致"""详细…

Redis:详解5大数据类型及其常用命令

目录 Redis键(key)字符串(String)简介常用命令数据结构简介常用命令 列表(List)简介常用命令数据结构 集合(Set)简介常用命令数据结构 哈希(Hash)简介常用命令…