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 在历史上似乎没有对这些概念进行明确的区分,或者中途引入的概念有一些冲突,各种混用导致了概念上的一些轻微的混淆。
相关文章:
Flink:动态表 / 时态表 / 版本表 / 普通表 概念区别澄清
博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…...
异常网络下TCP的可靠服务机制(慢启动、拥塞避免、快重传、快恢复)
目录 TCP超时重传拥塞控制概述慢启动和拥塞避免下面讲解发送端如何判断拥塞发生。 快速重传和快速恢复 本文描述TCP在异常网络下的处理方式 以保证其可靠的数据传输的服务 TCP超时重传 tcp服务能够重传其超时时间内没有收到确认的TCP报文段,tcp模块为每一个报文段都…...
PL/SQL执行.sql文件
1.编写.sql文件,创建update.sql文件,文件如下: set feedback off set define off --更新表中所有人的年龄 update a set age18; prompt Done. 2.打开plsql选择命令窗口,即选择File->New->Command Window; 打…...
赋能中国制造,大道云行发布智能制造分布式存储解决方案
《中国制造2025》指出,“制造业是国民经济的主体,是立国之本、兴国之器、强国之基。” 智能制造引领产业提质增效 智能制造是一种利用先进的信息技术、自动化技术和智能技术来优化和升级制造业生产过程的方法。它将人工智能、大数据、物联网、机器学习等…...
MySQL Strict Mode is not set for database connection ‘default‘
在使用 DJango 框架执行迁移文件的命令时,可以看到出现如下警告: (ll_env) D:\workspace\workspace-mengll\learning-log>python manage.py migrate System check identified some issues: WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set …...
分享:大数据信用报告查询的价格一般要多少钱?
现在很多人都开始了解自己的大数据信用了,纷纷去查大数据信用报告,由于大数据信用与人行征信有本质的区别,查询方式和价格都不是固定的,本文就为大家详细讲讲大数据信用报告查询的价格一般要多少钱,希望对你有帮助。 大…...
tomcat下载安装配置教程
tomcat下载安装配置教程 我是使用tomcat下载安装及配置教程_tomcat安装-CSDN博客 此贴来进行安装配置,原文21年已经有些许不同。 下载tomcat 官网:http://tomcat.apache.org/ 我们老师让安装8.5以上,所以我直接选择版本9 点击9页面之后…...
GO—变量
Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。 我们从计算机系统的角度来讲,变量就是一段或者多段内存,用于存储数据 1.1 标准格式 var 变量名 变量类型 1 …...
【计算机毕业设计】044学生管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
揭秘App访问量背后的秘密:数据统计与分析
在移动互联网时代,App已成为人们日常生活的重要组成部分。对于App运营者来说,了解用户的访问量、行为习惯等数据至关重要。本文将深入探讨如何精准统计App访问量,为运营者提供有价值的数据支持。 一、App访问量统计的重要性 访问量是衡量A…...
Qt 样式表
Qt样式表可以在帮助文档中搜索 "Qt Style Sheets" 在帮助文档中可更详细的查阅相关资料。 通常情况下我们需要知道样式表中的各个样式,需要我们查阅官方文档的相关资料; 可以在帮助文档中搜索 "Qt Style Sheets Reference&quo…...
leetcode hot100 每日温度
在本题中,我们是通过单调栈来解决的,因为我们采用了栈的数据结构,并且,栈内存储的元素是单调的。 本题我们考虑,将气温数组元素的下标存入栈中,首先初始化要把0放入,0是下标的意思。然后我们拿…...
【Java EE初阶二十六】简单的表白墙(二)
2. 后端服务器部分 2.1 服务器分析 2.2 代码编写 2.2.2 前端发起一个ajax请求 2.2.3 服务器读取上述请求,并计算出响应 服务器需要使用 jackson 读取到前端这里的数据,并且进行解析: 代码运行图: 2.2.4 回到前端代码,处理服务器返回的响应…...
【wpf】关于绑定的一点明悟
背景简介 软件功能为,读取一个文件夹下的所有子文件夹,每个文件夹对自动对应生成 一组 “按键四个勾选” 按键点击触发,可以发送与其对应文件夹中的一些内容。这个绑定的过程我在之前的文章有过详细的介绍,非常的简单。 这里回顾…...
叠罗汉游戏
题目描述 农场的N头奶牛喜欢玩叠罗汉游戏,就是几头奶牛1头奶牛接着1头奶牛的站成一柱子形状。不过奶牛的力量不一样,用数值Ci表示第i头奶牛它的上面最多可以站多少头奶牛,问这些奶牛最少可以站成几个柱子形状。 输入格式 输入文件名&#…...
太阳能风吸式杀虫灯是什么
TH-FD1随着农业科技的不断进步,太阳能风吸式杀虫灯作为一种新兴的绿色农业技术,正逐渐走进人们的视野。这种集太阳能和风吸技术于一体的杀虫设备,不仅具有环保节能的特点,还能有效减少农药使用,提高农产品质量…...
SpringBoot启动扩展应用:干预优化+加快启动时间
一、SpringBoot启动配置原理简述 本内容直接查看分析SpringBoot启动配置原理,传送门: 二、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作: 修改Spring Boot默认的配置属性。使用ConfigurationProperties和Enable…...
探索Linux世界:初次接触和基本指令(文件操作)
文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…...
递归函数(c++题解)
题目描述 对于一个递归函数w(a, b, c)。 如果a < 0 or b < 0 or c < 0就返回值1。 如果a > 20 or b > 20 or c > 20就返回W(20,20,20)。 如果a < b并且b < c 就返回w(a, b, c − 1) w(a, b − 1, c − 1) − w(a, b − 1, c), 其它别…...
Qt将Unicode转换成UTF8中文
解析字符串,并将里面的Unicode转换成中文 QString unicodeToUtf8(QString unicode) {QString result;for (int i 0; i < unicode.length(); i){QString flag unicode.mid(i,2); if (flag "\\u"){QString s1 unicode.mid(i 2, 4);result.append(s…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
