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,而是时态表中的版本表 Join,好像提及 时态表 / Temporal Table 时默认指的就是 版本表。应该是 Flink 在历史上对这些概念没有进行明确的定义,各种混用导致了概念上的一些轻微的混淆。

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

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

相关文章

Ubuntu篇——crontab修改编辑器

输入命令: crontab -e 如果你的系统是第一次使用crontab服务&#xff0c;会首先让你选择一个编辑器 如果已经选择过编辑器&#xff0c;后续想要修改默认编辑器&#xff0c;可以输入sudo select-editor进行修改。

全部免费!抖音,牛逼了!

相比于百度文心、清华智谱和讯飞星火这些在国内有一定市场知名度的AI工具&#xff0c;字节跳动多少显得有点低调了。 国内的AI工具用了不少&#xff0c;但要是说哪家最有前景&#xff0c;那最看好的还是字节跳动。 倒不是说字节的云雀大模型比上面这几个更牛逼&#xff0c;而…

Unity(第二十一部)动画的基础了解(感觉不了解其实也行)

1、动画组件老的是Animations 动画视频Play Automatically 是否自动播放Animate Physics 驱动方式&#xff0c;勾选后是物理驱动Culling Type 剔除方式 默认总是动画化就会一直执行下去&#xff0c;第二个是基于渲染播放&#xff08;离开镜头后不执行&#xff09;&#xff0c; …

深入剖析k8s-控制器思想

引言 本文是《深入剖析Kubernetes》学习笔记——《深入剖析Kubernetes》 正文 控制器都遵循K8s的项目中一个通用的编排模式——控制循环 for {实际状态 : 获取集群中对象X的实际状态期望状态 : 获取集群中对象X的期望状态if 实际状态 期望状态 {// do nothing} else {执行…

Redis持久化+Redis内存管理和优化+Redis三大缓存问题

Redis持久化Redis内存管理和优化Redis三大缓存问题一、Redis高可用二、Redis持久化1、RDB持久化1.1 触发条件(1) 手动触发(2) 自动触发(3) 其他自动触发机制 1.2 执行流程1.3 启动时加载 2、AOF持久化2.1 开启AOF2.2 执行流程(1) 命令追加(append)(2) 文件写入(write)和文件同步…

化肥工业5G智能制造工厂数字孪生可视化平台,推进化肥行业数字化转型

化肥工业5G智能制造工厂数字孪生可视化平台&#xff0c;推进化肥行业数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为各行各业发展的必然趋势。在化肥工业领域&#xff0c;5G智能制造工厂数字孪生可视化平台的应用正在逐渐普及&#xff0c;为行业数字化转型提供…

数据库进阶——如何提升数据库的安全性,以MySQL和Redis加固为例

目录 引出数据库加固加固思路MySQLRedis Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 数据库进阶——如何提升数据库的安全性&#xff0c;以MySQL和Redis加固为例 数据库加固 加固思路 账号配置 应按照用户分配账号&…

达梦数据库基础操作(二):表空间操作

达梦数据库基础操作(二)&#xff1a;表空间操作 1. 表空间操作 1.1 达梦表空间介绍 表空间的概念&#xff1a; 每个DM 数据库都是由一个或者多个表空间组成&#xff0c;表空间是一个逻辑的存储容器&#xff0c;它位于逻辑结构的顶层&#xff0c;用于存储数据库中的所有数据&am…

git介绍4.2

git(版本控制工具) 一、git 介绍 1、git是目前世界上最先进的分布式版本控制系统&#xff0c;可以有效&#xff0c;高速的处理从小到大的项目版本管理。 2、git是linux torvalds 为了帮助管理linux内核开发二开发的一个开放源码的版本控制软件。 3、git作用&#xff1a;更好…

5_怎么看原理图之协议类接口之NAND Flash笔记

NAND Flash原理图&#xff1a; 由NAND Flash的原理图可以看出&#xff0c;做为一个存储芯片&#xff0c;只有I/O引脚&#xff0c;并没有地址引脚&#xff0c;怎么传地址&#xff1f;遵循一定的规范&#xff0c;先通过LDATA把地址传出去&#xff0c;再传数据。具体的需要查看芯片…

Django初识前后端交互

Django初识前后端交互&#xff08;含MySQL&#xff09; 目录 Django初识前后端交互&#xff08;含MySQL&#xff09;request方法示例连接数据库Django ORM在models.py中建表允许为空指定默认值 数据库迁移命令数据的增删改查数据的增加数据的查询查询所有数据查询单个数据(对象…

C++记录

常用快捷键&#xff1a; CTRL -向后定位 CTRL SHIFT -向前定位 1.注释&#xff1a;CTRLKC 2.取消注释&#xff1a;CTRLKU 11.调试(启动)&#xff1a;F5 20.查找&#xff1a;CTRLF 21.替换&#xff1a;CTRLH 31.跳转到指定的某一行 1)方法1&#xff1a;组合键“CtrlG…