Flink:动态表 / 时态表 / 版本表 / 普通表 概念区别澄清

《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。

根据 [ 官方文档 ] 所述,在 Flink 中,时态表和动态表是一个概念,只是强调的侧重点不同。Flink 流上的表都是动态的,也就是一直在变化,所以被称为动态表,因为动态表都会随时间发生变化,所以也被叫作了 “时态表”。而根据能否 trace (追踪) 一张时态表的变化历史,时态表会细分成:版本表 和 普通表 两种,区别就是:版本表可以追溯历史,而普通表只保存当前最新状态的数据。

Flink 官方文档中说:定义了主键约束和事件时间属性(通过 WATERMARK 关键字标识)的表就是版本表,并且举例说:数据库的 changelog 数据(CDC数据)就可以定义成版本表。这里不要产生错误的理解,不是说只有数据库的 changelog 数据才支持定义成版本表,而是说数据库的 changelog 型数据是版本表的一种典型数据,因为它必定包含记录的主键和一个标记操作执行的时间戳。

以下是援引自官方文档中的一张版本表的定义:

-- 定义一张版本表
-- 只有同时定义了主键和事件时间字段的表才是一张版本表
-- 通过 CDC 技术从数据库采集的 changelog 数据是构成版本表的数据“典型”数据
-- 但并不是说:版本表的数据一定是 changelog 型的数据,只要满足有主键和事件时间字段数据,就可以定义为版本表
CREATE TABLE product_changelog (product_id STRING,product_name STRING,product_price DECIMAL(10, 4),update_time TIMESTAMP(3) METADATA FROM 'value.source.timestamp' VIRTUAL,PRIMARY KEY(product_id) NOT ENFORCED,      -- 版本表特征(1) 定义主键WATERMARK FOR update_time AS update_time   -- 版本表特征(2) 定义事件时间字段(通过 watermark 定义事件时间)              
) WITH ('connector' = 'kafka','topic' = 'products','scan.startup.mode' = 'earliest-offset','properties.bootstrap.servers' = 'localhost:9092','value.format' = 'debezium-json'
);

实际上,Flink 的版本表条件和定义一张 Hudi 表所必须指定的两项配置:hoodie.datasource.write.recordkey.field 和 precombine.field 在性质上是一样的:如果你想区别同一条记录的不同版本,就得需要同时指定记录的唯一标识(即主键)和当出现相同主键记录时的版本号(即记录的时间戳),本质上,这是保证记录版本可回溯的两个必要条件,所以才会有 Flink 版本表与 Hudi 表之间的这种“神似”状况

以下是对四个概念的梳理:

时态表 <=> 动态表├── 版本表:可追溯历史版本,只有定义了:主键和事件时间属性(通过 watermark 定义) 的表才可以成为一张版本表,│          反过来说:数据本身必须包含主键字段和一个标记记录生成或更新的时间戳字段才能被定义成 Flink 上的版本表。│          由于版本表有这两项约束条件,能构成版本表的数据往往是 changelog 型数据,典型代表是数据库的 CDC 数据;└── 普通表:只保存当前最新状态数据,就是只能拿到当前最新快照

普通表并不会特别拿来强调,只是用于和版本表这个概念做对比的,真正被特别拿来强调的是版本表,而经常与版本表放在一起提及的就是“Temporal Join“,“Temporal Join“ 其实特指与版本表的 Join。目前在官方文档的多处描述中可以判断的是:但凡提及 时态表 / Temporal Table 或 Temporal 这个关键词时,通常谈论的是都是 版本表,所以,我们可以在沟通和描述中使用“时态表”这个称谓指代“版本表”这个概念,但要清楚两者之间的关系,以及在必要的时候能区分对方想要表达的具体是哪一种就可以了。应该是 Flink 在历史上似乎没有对这些概念进行明确的区分,或者中途引入的概念有一些冲突,各种混用导致了概念上的一些轻微的混淆。

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

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

相关文章

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&…

源码框架-​1.Spring底层核心原理解析

目录 Spring中核心知识点: Bean的创建过程 推断构造方法 AOP大致流程 Spring事务 Spring中核心知识点: Bean的生命周期底层原理依赖注入底层原理初始化底层原理推断构造方法底层原理AOP底层原理Spring事务底层原理 ps:这篇文章中都只是大致流程&#xff0c;后续会针对每…

Linux工具篇

文章目录 1.yum1.1 yum是什么&#xff1f;1.2yum下载的软件包在哪&#xff1f;1.3 yum的配置1.4 yum的相关操作 2. Vim2.1 各种模式的相关操作2.2 利用vim解决普通用户无法sudo的问题2.3 vim的配置 3.gcc/g3.1 利用gcc理解程序的翻译过程3.2 编译器的自举 4. 程序的链接4.1动态…

3分钟,学会一个测试员必懂 Lambda 小知识!

今天再来给大家介绍下函数式接口和方法引用。 函数式接口 问&#xff1a;Lambda 表达式的类型是什么&#xff1f; 答&#xff1a;函数式接口 问&#xff1a;函数式接口是什么&#xff1f; 答&#xff1a;只包含一个抽象方法的接口&#xff0c;称为函数式接口 &#xff08;…

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同&#xff1f; 制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别&#xff1a; 硬度与耐磨性&#xff1a;UV树脂具有较高的硬度和耐磨性&#xff0c;能够有效保护耳机内部零件&#xff0c;延长耳机使用寿命。而塑料材质相…

价格腰斩,腾讯云2024优惠活动云服务器62元一年,多配置报价

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

linux安装mysql5.7

linux安装mysql5.7 一、下载mysql5.7二、解压包介绍三、上传包到linux四、卸载mariadb五、安装mysql六、修改权限七、启动mysql八、使用过navicat创作不易&#xff0c;笔记不易&#xff0c;如觉不错&#xff0c;请三连&#xff0c;谢谢~~ 一、下载mysql5.7 去mysql官方下载&am…

数据结构题目①——数组

前言 本篇文章为博主进行代码随想录——数组练习后的总结会涉及到每一道题目的详细的思路整理&#xff0c;以及本人的易错点&#xff0c;希望对大家有所帮助 数组介绍&#xff1a; 数组在C语言中就已经有所涉及&#xff0c;它是一个最基础的数据结构&#xff0c;而在数据结构中…

Oracle 11g升级19c 后部分查询功能很慢

*Oracle 11g升级19c 后部分查询功能很慢 今天生产突然有个查询非常慢&#xff0c;日志显示执行了50秒左右&#xff0c;但是从日志中拿出SQL在PLSQL执行&#xff0c;发现用时不到1秒&#xff0c;查看SQL,怀疑是下面几种原因导致 1、使用函数不当 UNIT.UNIT_CODE LIKE CONCAT(‘…

NLP(一)——概述

参考书: 《speech and language processing》《统计自然语言处理》 宗成庆 语言是思维的载体&#xff0c;自然语言处理相比其他信号较为特别 word2vec用到c语言 Question 预训练语言模型和其他模型的区别? 预训练模型是指在大规模数据上进行预训练的模型&#xff0c;通常…

排序——堆排序

本节继续复习排序算法。这次复习排序算法中的堆排序。 堆排序属于选择排序。 目录 什么是堆&#xff1f; 堆排序 堆排序的思想 堆排代码 向下调整算法 堆排整体 什么是堆&#xff1f; 在复习堆排序之前&#xff0c; 首先我们需要回顾一下什么是堆 。 堆的本质其实是一个数…

11.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏接收网络数据包的操作

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;接管游戏发送数据的操作 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan 码云版本号&#xff1a;8256eb53e8c16281bc1a29cb8d26d352bb5bbf4c 代…

负载均衡.

简介: 将请求/数据【均匀】分摊到多个操作单元上执行&#xff0c;负载均衡的关键在于【均匀】。 负载均衡的分类: 网络通信分类 四层负载均衡:基于 IP 地址和端口进行请求的转发。七层负载均衡:根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。 载体维度分类 硬…

绕过付费,畅享网络:自由浏览付费内容 | 开源日报 No.185

iamadamdev/bypass-paywalls-chrome Stars: 38.8k License: NOASSERTION bypass-paywalls-chrome 是一个用于 Chrome 和 Firefox 的网页浏览器扩展&#xff0c;可帮助绕过特定网站的付费墙。 可以绕过多个指定网站的付费墙支持自动更新&#xff08;仅限 Firefox 版本&#x…

从头构建gpt2 基于Transformer

从头构建gpt2 基于Transformer VX关注{晓理紫|小李子}&#xff0c;获取技术推送信息&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持&#xff01;&#xff01; 如果你感觉对你有所帮助&#xff0c;请关注我。 源码获取 VX关注晓理紫并回复“chatgpt…

消息中间件之RocketMQ源码分析(二十九)

延迟消息投递机制 RocketMQ在存储延迟消息时&#xff0c;将其保存在一个系统的Topic中&#xff0c;在创建ConsumeQueue时&#xff0c;tagCode字段中保存着延迟消息需要被投递的时间&#xff0c;通过这个存储实现的思路&#xff0c;我们可以总结出延迟消息的投递过程:通过定时服…

C++入门07 数组、指针与字符串

图源&#xff1a;文心一言 听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;课程来源 &#x1…

逆序遍历字符串(不改变内存地址)

题目&#xff1a;逆序遍历字符串"ABCDEFG" 实现思路&#xff1a; 使用StringBuilder创建对象&#xff0c;因为String字符串是不可变的&#xff0c;而StringBuilder内部的方法没有被final关键字修饰&#xff0c;所以将s1的字符串内容传给StringBuilder创建的对象ret…

模拟算法题练习(一)(扫雷,灌溉,回文日期)

目录 模拟算法介绍&#xff1a; &#xff08;一、扫雷&#xff09; &#xff08;二、灌溉&#xff09; &#xff08;三、回文日期&#xff09; 有一说一这题大佬的题解是真的强 模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实…

c语言游戏实战(10):坤坤的篮球回避秀

前言&#xff1a; 这款简易版的球球大作战是博主耗时两天半完成的&#xff0c;玩家需要控制坤坤在游戏界面上移动&#xff0c;来躲避游戏界面上方不断掉下来的篮球。本游戏使用C语言和easyx图形库编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代…