湘潭网站建设 地址磐石网络,wordpress同步文章插件,招代理的网站要怎么做的,wordpress文章指定数量博主历时三年精心创作的《大数据平台架构与原型实现#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行#xff0c;点击《重磅推荐#xff1a;建大数据平台太难了#xff01;给我发个工程原型吧#xff01;》了解图书详情#xff0c;…博主历时三年精心创作的《大数据平台架构与原型实现数据中台建设实战》一书现已由知名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 在历史上对这些概念没有进行明确的定义各种混用导致了概念上的一些轻微的混淆。