【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.mzph.cn/news/146074.shtml

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

相关文章

Django+vue前后端分离实战--vue后台管理系统--vue环境安装项目创建

Djangovue前后端分离实战--vue后台管理系统 安装nodejsvue clivue-cli创建项目 安装nodejsvue cli 1、下载nodejs并安装 https://nodejs.org/dist/v20.9.0/node-v20.9.0-x64.msi 2、修改npm 默认仓库地址,要修改成taobao的镜像npm 仓库地址 cmd下命令&#xff1a…

系列八、JVM的内存结构【方法区】

一、概述 方法区是一个供各线程共享的运行时内存区域。它存储了每一个类的结构信息,例如运行时常量池(Runtime Constant Pool)、字段和方法数据、构造函数和普通方法的字节码内容。上面讲的是规范,在不同的虚拟机里面实现是不一样…

74基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差。

基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差,适应度值。数据可更换自己的,程序已调通,可直接运行。 74matlabPSO-ELM多输入单输出 (xiaohongshu.com)

微信小程序:tabbar、事件绑定、数据绑定、模块化、模板语法、尺寸单位

目录 1. tabbar 1.1 什么是tabbar 1.2 配置tabbar 2. 事件绑定 2.1 准备表单 2.2 事件绑定 2.3 冒泡事件及非冒泡事件 3. 数据绑定 3.1 官方文档 4. 关于模块化 5. 模板语法 6. 尺寸单位 1. tabbar 1.1 什么是tabbar 下图中标记出来的部分即为tabbar&#xff1a…

Uniapp导出的iOS应用上架详解

目录 Uniapp导出的iOS应用上架详解 摘要 引言 苹果审核标准 苹果调试 注意事项和建议 总结 摘要 本文将探讨Uniapp导出的iOS应用能否成功上架的问题。我们将从苹果审核标准、性能影响、调试流程等多个方面进行深入分析,以及向开发者提供相关注意事项和建议。…

【论文阅读】(VAE-GAN)Autoencoding beyond pixels using a learned similarity metric

论文地址;[1512.09300] Autoencoding beyond pixels using a learned similarity metric (arxiv.org) / 一、Introduction 主要讲了深度学习中生成模型存在的问题,即常用的相似度度量方式(使用元素误差度量)对于学习良好的生成模型存在一定…

基于JavaWeb+SSM+购物系统微信小程序的设计和实现

基于JavaWebSSM购物系统微信小程序的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 第一章 绪 论 1.1选题背景 互联网是人类的基本需求,特别是在现代社会,…

制造业工厂的MES系统数据采集功能概述

一、MES系统与数据采集 MES系统是专门针对制造业工厂的信息化管理系统,旨在提高生产效率、降低成本、优化资源配置。数据采集作为MES系统的重要功能之一,能够实时获取生产现场的数据信息,为生产管理提供可靠的决策依据。 二、MES数据采集功能…

LLM(四)| Chinese-LLaMA-Alpaca:包含中文 LLaMA 模型和经过指令微调的 Alpaca 大型模型

论文题目:《EFFICIENT AND EFFECTIVE TEXT ENCODING FOR CHINESE LL AMA AND ALPACA》 ​论文地址:https://arxiv.org/pdf/2304.08177v1.pdf Github地址:https://github.com/ymcui/Chinese-LLaMA-Alpaca 一、项目介绍 通过在原有的LLaMA词…

基于ssm+vue交通事故档案系统

摘要 摘要是对文章、论文或其他文本的主要观点、结论和关键信息的简洁概括。由于你没有提供具体的文章或主题,我将为你创建一个通用的摘要。 本文介绍了一种基于SSM(Spring Spring MVC MyBatis)和Vue.js的交通事故档案管理系统的设计与实现…

NewStarCTF2023 Reverse方向Week3 ez_chal WP

分析 题目&#xff1a;ez_chal 一个XTEA加密&#xff0c; V6是key&#xff0c;v5是输入&#xff0c;然后v7就是密文。 看了v6&#xff0c;要用动调。 ELF文件用ida的远程调试。 然后在kali上输入长度为32的flag 全部转换成dd 再提取密文。 EXP #include <stdio.h>…

mysql统计整个数据库记录条数

SELECTSUM(TABLE_ROWS) FROM(SELECTTABLE_NAME,TABLE_ROWSFROMINFORMATION_SCHEMA.TABLESWHERETABLE_SCHEMA 数据库名&#xff0c;其他不变) t;效果如下&#xff1a;

单片机FLASH下载算法的制作

环境 硬件使用正点原子STM32F407探索者V2开发板 编程环境使用MDK 下载工具使用JLINK FLASH芯片使用W25Q128 什么是下载算法 单片机FLASH的下载算法是一个FLM文件&#xff0c;FLM通过编译链接得到&#xff0c;其内部包含一系列对FLASH的操作&#xff0c;包括初始化、擦除、写…

demo(三)eurekaribbonhystrix----服务降级熔断

一、介绍&#xff1a; 1、雪崩&#xff1a; 多个微服务之间调用的时候&#xff0c;假如微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其他的微服务&#xff0c;这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用&am…

【Android】设置全局标题栏

序言 在做项目的时候&#xff0c;有时候需要一个全局统一的标题栏&#xff0c;保证项目风格的统一&#xff0c;但是如果在每个activity上面都写一遍这个标题栏就很麻烦了&#xff0c;我们经常用的方法就是写个基类Activity&#xff0c;然后当某个Activity需要这个统一的标题栏…

web 服务

作业&#xff1a;请给openlab搭建web网站 网站需求&#xff1a; 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c; 1、基于 www.openlab.com/student 网站访问学生信…

简单解决网页的验证码

翻到一个网站,展开需要验证码,而验证码需要关注微信公众号,懒得弄,所以有了这篇文章 首先,先看一下F12中的网络(Network),发现并没有使用网络动态验证 那么这个验证码必定是写在资源文件中的 在确定按钮上看到如下元素监听(Event Listeners) 进入打断点 成功断下 单步跟到…

JSplacement丨随机生成置换贴图

界面很简单&#xff0c;虽然是英文&#xff0c;但基本也能看懂&#xff0c;参数调一调&#xff0c;随机生成不重复的8K高清图片。 这种图片可能对普通人感觉很奇怪&#xff0c;有什么用呢&#xff1f;会C4D建模渲染的同学应该会明白&#xff0c;特别是建一些科技类的场景背景&a…

[C/C++]数据结构 链表OJ题:随机链表的复制

题目描述: 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新…

【AI视野·今日NLP 自然语言处理论文速览 第六十二期】Wed, 25 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 25 Oct 2023 (showing first 100 of 112 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MuSR: Testing the Limits of Chain-of-thought with Multistep Soft R…