paimon的四种changelog模式(3)-lookup模式

数据湖Paimon入门指南 如果用户建表时指定'merge-engine' = 'partial-update',那么就会使用部分更新表引擎,可以做到多个 Flink 流任务去更新同一张表,每条流任务只更新一张表的部分列,最终实现一行完整的数据的更新,对于需要拉宽表的业务场景,partial-update 非常适合此场景,而且构建宽表的操作也相对简单。这种方式的成本相对较高,同时官方不建议这样使用,因为下游任务在 State 中存储一份全量的数据,即每条数据以及其变更记录都需要保存在状态中。流式查询将不断产生最新的更改。 阅读详情
AI摘要

本文介绍了Paimon的Lookup模式Changelog。先阐述了环境创建及snapshot和checkpoint关系,一次snapshot产生一个data文件,checkpoint依情况产生1 - 2个。通过插入操作展示文件变化,指出lookup模式写入后会执行Compaction。还说明了查询方式、结论及应用场景,适用于非cdc采集且用于流式处理的表。

请先了解input模式和none模式,然后再看lookup模式

环境创建

 CREATE CATALOG fs_catalog WITH (
    'type'='paimon',
    'warehouse'='file:/data/soft/paimon/catalog'
);

USE CATALOG fs_catalog;

drop table if exists t_changelog_lookup;
 
CREATE TABLE t_changelog_lookup (
      age BIGINT,
      money BIGINT,
      hh STRING,
      PRIMARY KEY (hh) NOT ENFORCED
)WITH (
    'merge-engine' = 'deduplicate',
    'changelog-producer' = 'lookup'
);

paimon的snapshot和checkpoint之间的关系

  • 一次snapshot会产生一个data文件
  • 一次checkpoint会产生1-2个snapshot文件,要看这次checkpoint是否触发compaction,触发了就是2个data文件(一个是合并后的数据,一个本次checkpoint写入数据),否则只有一个(本次checkpoint写入数据)
  • 流式写入根据checkpoint间隔,定期进行checkpoint
  • 批写(手动执行sql脚本)每一个sql会立即生成一次checkpoint效果

执行一次插入操作

insert into t_changelog_lookup values(10,1000,'1');

root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_lookup/bucket-0# ll
total 8
-rw-r–r-- 1 root root 1217 Nov 27 16:26 changelog-81638785-5ddb-41ba-893d-466b4166374a-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 16:26 data-f8c4281c-3453-46b2-a881-b893bb4ef0e4-0.parquet

changelog文件
在这里插入图片描述

data文件
在这里插入图片描述

相同主键,再执行一次插入操作

insert into t_changelog_lookup values(10,2000,'1');

root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_lookup/bucket-0# ll
total 20
-rw-r–r-- 1 root root 1362 Nov 27 16:30 changelog-66b5f009-9fed-4221-bf9d-253a5e324ffe-1.parquet
-rw-r–r-- 1 root root 1217 Nov 27 16:26 changelog-81638785-5ddb-41ba-893d-466b4166374a-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 16:30 data-4ec9395b-0856-4dc6-aac0-d5f3d597c481-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 16:30 data-66b5f009-9fed-4221-bf9d-253a5e324ffe-0.parquet
-rw-r–r-- 1 root root 1217 Nov 27 16:26 data-f8c4281c-3453-46b2-a881-b893bb4ef0e4-0.parque

changelog文件
lookup模式下changelog文件会先查询变更前的数据,然后和当前操作合并出一个changelog文件来
在这里插入图片描述

data文件

lookup模式下,从第二次写入开始,每次都会产生两个data文件,一个是本次操作数据,一个是本次操作COMPACT完成后的数据
为什么,input、none模式只有2个呢?

root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_lookup/snapshot# ll
total 16
-rw-r–r-- 1 root root 1 Nov 27 16:26 EARLIEST
-rw-r–r-- 1 root root 1 Nov 27 16:31 LATEST
-rw-r–r-- 1 root root 621 Nov 27 16:26 snapshot-1
-rw-r–r-- 1 root root 672 Nov 27 16:26 snapshot-2
-rw-r–r-- 1 root root 621 Nov 27 16:31 snapshot-3
-rw-r–r-- 1 root root 673 Nov 27 16:31 snapshot-4
cat这四个snapshot文件你会,发现执行一次APPEND操作后会执行一次COMPACT(合并)操作
root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_lookup/snapshot# cat snapshot-1
{
“version” : 3,
“id” : 1,
…
“commitKind” : “APPEND”,
…
}
root@wsl01:/data/soft/paimon/catalog/default.db/t_changelog_lookup/snapshot# cat snapshot-2
{
“version” : 3,
“id” : 1,
…
“commitKind” : “COMPACT”,
…
}
也就是说,lookup模式会在写入完成后,立即执行一次Compaction动作,所以才会产生双份了snapshot,才产生了两个data文件,一个是当前操作,一个是合并后数据

本次操作数据
在这里插入图片描述
本次操作完成后的数据在这里插入图片描述

sqlclient 流式查询

-- Flink SQL
SET 'execution.runtime-mode' = 'streaming';

--设置检查点的间隔为10秒
SET 'execution.checkpointing.interval'='10 s';
set parallelism.default=1;

-- 使用changelog,展示op,操作类型
SET 'sql-client.execution.result-mode'='changelog';

-- 从当前快照开始,读取变化情况 
SELECT * FROM t_changelog_lookup;

在这里插入图片描述

-- 从ID=1的快照开始,读取变化情况 
SELECT * FROM t_changelog_lookup/*+ OPTIONS('scan.snapshot-id' = '1') */;

在这里插入图片描述

sqlclient 批查询

Flink SQL> SET 'sql-client.execution.result-mode'='tableau';
[INFO] Execute statement succeed.

Flink SQL> SET 'execution.runtime-mode' = 'batch';
[INFO] Execute statement succeed.

Flink SQL> SELECT * FROM t_changelog_lookup;
+-----+-------+----+
| age | money | hh |
+-----+-------+----+
|  10 |  2000 |  1 |
+-----+-------+----+
1 row in set

Flink SQL> SELECT * FROM t_changelog_lookup/*+ OPTIONS('scan.snapshot-id' = '1') */;
+-----+-------+----+
| age | money | hh |
+-----+-------+----+
|  10 |  1000 |  1 |
+-----+-------+----+
1 row in set

Flink SQL> SELECT * FROM t_changelog_lookup/*+ OPTIONS('scan.snapshot-id' = '2') */;
+-----+-------+----+
| age | money | hh |
+-----+-------+----+
|  10 |  2000 |  1 |
+-----+-------+----+
1 row in set

结论

  • changelog=lookup的情况下,一次checkpoint,产生两个data文件的同时(第一次只会产生一个),也会产生一个changelog文件
  • changelog文件内容,会查询变化前的数据,并对比变化后数据,自动生成一份chagelog。相比input模式,这就是lookup的最大区别,他会自己产生正确的changelog,而不管你的输入数据是否符合规范
  • lookup模式针对于不是cdc采集的表,而且要用于流式处理的表

应用场景

  • (非cdc采集的表-不能完整的提供数据变化流
  • and
  • 后期要进行流式处理的表
  • and
  • 更在乎数据延迟(见4full-compaction)
  • )
  • or
  • 使用了聚合引擎或者写入过程有计算逻辑
  • or
  • 流处理表使用了first-row合并引擎
paimon实战 -- Changelog Producer到底有什么用? 其实是不适用的, 上面我们提到 None 模式的流读其实就是读取 L0的文件, 那么我们只要看 L0的文件是否包含 Key 的变更记录. 因为 write buffer 会有合并的逻辑, 所以, 对于 CDC 的数据, L0中可能会是已经在内存合并后的数据. 比如同一个 key 的-U 和+U 消息, 同时写入, 那么在 writer buffer 写入的时候就已经只保留+U 消息了, 所以 None 模式中 L0文件中的数据, 可能已经是合并后的数据, 对于 CDC 的数据也不适用. 阅读详情

相关推荐

paimon0.9 主键表的之 changelog producer 笔记

paimon解决-U的的方式是增加normalize算子,存储老数据再state中,比对后可补齐-U,所以成本高 可配置 scan.remove-normalize 取消,同时导致没-U。如果没关闭normalize算子,先发-U(小王,18,100) 再发+U(小王,18,300) 那么结果就是 18,(103-100+300)=303 这才是正确值.normalize算子开启(flink state存老数据 注意ttl要永久,否则部分-U也会丢): sink: +I -U +U -D。

yy的博客 691

新一代数据湖存储技术Apache Paimon入门Demo

新一代数据湖存储技术Apache Paimon(Flink Table Store)入门Demo,本文给出了一些简单的flink-paimon样例(example),可供快速学习上手(文中所有代码均已跑通)。

Leonardo_KY的博客 1万+

Apache Paimon 数据出仓源码导读(二):Paimon Changelog 到底输出什么?+I、-U、+U、-D 与 Changelog Producer

同一条 MySQL UPDATE,为什么有时输出 +I,有时是 -D/+I,还有时是 -U/+U?本文结合 Apache Paimon 1.4.2 源码,从 RowKind、Changelog Producer、Changelog 文件与 Flink Normalize 入手,讲清 none、input、lookup、full-compaction 的输出差异、实现原因和运维取舍。

随便写写,记录一些生活、想法和偶尔冒出的念头。 393

理解 Paimon changelog producer

Chaneglog producer 的主要目的是为了在 Paimon 表上产生流读的 changelog, 所以如果只是批读的表是可以不用设置 Chaneglog producer 的.一般对于数据库如 MySQL 来说, 当执行的语句涉及数据的修改例如插入、更新、删除时,MySQL 会将这些数据变动记录在 binlog 中。相当于额外记录一份操作日志, 类似于 Paimon 中的 input changelog producer 的模式。

dsgdauigfs的博客 2018

数据湖Paimon 1.4.2 从理论到实践 —— 第 6 章 表存储模式与 Changelog Producer

Paimon 1.4.2 支持 MOR、COW、MOW 三种主键表存储模式,分别适用于写入密集、读多写少及读写均衡场景。MOW 模式通过 Deletion Vector 实现高效查询与良好写入性能,推荐用于实时查询表。Changelog Producer 提供四种模式:none(默认)、input(低延迟)、lookup(完整变更)、full-compaction(高一致性),根据下游需求选择,lookup 模式兼顾完整性与实时性,是主流推荐方案。

大数据架构师,深耕车联网实时数仓。专注 Flink / Paimon / Doris 流批一体、CDC 同步与实时 AI 推理,把生产里的架构选型、作业实战和故障排查整理成 4 个连载系列,只写实测跑得通的方案,欢迎私信交流。 19

基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 3 章 Paimon 1.4 湖仓底座与 Catalog 配置

本章基于车联网TSP真实生产场景,详解Paimon 1.4湖仓底座配置。通过Hive Metastore Catalog实现与存量数仓共用元数据与权限体系,保障兼容性与运维统一;确立主键、分区、桶等核心参数(如bucket=6、primary-key=vin,collect_time,dt),确保流批一体更新能力与并行性能;明确changelog-producer选型及连接器jar加载位置,规避Catalog创建失败风险。所有配置均经生产验证,为后续流批作业奠定坚实基础。

大数据架构师,深耕车联网实时数仓。专注 Flink / Paimon / Doris 流批一体、CDC 同步与实时 AI 推理,把生产里的架构选型、作业实战和故障排查整理成 4 个连载系列,只写实测跑得通的方案,欢迎私信交流。 108

Apache Paimon生产环境表模式最佳实践

01前言Apache Paimon 作为数据湖对各种场景有着完整的功能支持,看完这篇文章,你可以了解到 Paimon 有哪几种表模式。对应哪些场景。此文部分内容来自 Paimon 官网:https://paimon.apache.org/docs/master/02概览上图描述了大致所有表模式的配置及能力,在下文中,会逐个简单介绍下。以上的所有表模式在最新版本中已得到生产验证。03主键表主键表是 ...

微信搜:import_bigdata,大数据领域硬核原创作者 1858

Apache Paimon 数据出仓源码导读(三):Paimon 出仓到 MySQL:UPSERT、DELETE 与幂等恢复

本文从源码拆解 Paimon 出仓到 MySQL 的完整写入链路,讲清 Flink JDBC Sink 是逐条接收、按子任务攒批,再通过 UPSERT 与 DELETE 批量执行;同时分析 Checkpoint 重放、主键幂等、跨批短暂空窗及无状态重跑的边界。

随便写写,记录一些生活、想法和偶尔冒出的念头。 469

Paimon的Changelog Producer到底有什么用?

很早以前我在一篇文章中提到流批落地的方案,其中之一就是在存储引擎上实现流批的能力。可以说Paimon的Changelog能力是Paimon能够成为流批框架落地最佳选型的核心因素之一。Paimon本身提供了4种Changelog生成方式。他们有什么不同?目的Chaneglog producer 的主要目的是为了在 Paimon 表上产生流读的 changelog, 所以如果只是批读的表是可以不用设置...

微信搜:import_bigdata,大数据领域硬核原创作者 1754

COMSOL实战:如何用有限元法(FEM)准确仿真电磁场问题?避坑指南

本文是一份COMSOL电磁场仿真实战指南,重点讲解如何运用有限元法(FEM)准确模拟电磁场问题。文章通过矩形波导和偶极子天线两大经典案例,详细剖析了从几何建模、物理场设置、网格剖分到结果验证的全流程,并提供了处理非线性材料、求解器收敛失败等高级问题的避坑技巧,旨在帮助工程师建立可靠的仿真工作流。

weixin_29297127的博客 514

2019年7月28日解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 00840

Blizzard—Battle.net—2019年7月28解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 008402019年7月28日再次更新写在前面■■■ 排查网路问题 ■■■■■■ 排查电脑自身问题 ■■■■尝试重置internet设置■网络的设置和防火墙规则■如果还是不...

MCGC高质人类协作会-MCG贴吧 3万+

paimon的四种changelog模式(4)-full-compaction模式

# 结论 - changelog=full-compaction模式相比于lookup模式区别在于changelog的生成时间 - lookup模式:一次checkpoint产生一次changelog,数据延迟小,资源消耗大 - full-compaction模式:n次checkpoint产生一次changelog,数据延迟大,资源消耗小 # 应用场景 - 非cdc采集的表(不能完整的提供数据变化流) - and - 后期要进行流式处理的表 - and - 不在乎数据延迟的场景

javaMylife的博客 1449

使用Kolla部署多节点Rocky版本OpenStack

openstack命令行客户端使用,post-deploy会在 /etc/kolla/目录下生成文件admin-openrc.sh。每次使用openstack命令时执行source /etc/kolla/admin-openrc.sh(manager节点执行)source /etc/kolla/admin-openrc.sh (将文件内容复制到/etc/profile中,即可一直生效)3.2.2 开始安装kolla-ansible,要带上--ignore-installed PyYAML,否则可能会报错。

gyc1206的博客 1928

Paimon系列:主键表流读之changelog producer

在上一篇《主键表之合并引擎merge-engine》中的结尾,当 'merge-engine' = 'first-row',开启流读的时候,会抛一下错误,提示要使用 lookup 或 full-campaction 这两种 changelog producer 才支持流读,input 模式也支持,但是只会返回输入的记录。changelog producer的作用。

2502_92343817的博客 870

ES快速入门,一篇就懂!

Elastic Search 入门前言什么是搜索为什么常用数据库不适合做搜索什么是Lucene什么是Elastic SearchES核心概念ES使用正常启动索引​增删改查ES增加常见问题:ES删除ES查询欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的

qq1592的博客 9311

拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)

本文介绍了拜耳阵列的工作原理(Bayer Pattern)以及常用的彩色滤波矩阵(CFA)

风一样的男子(quinta)的博客 7122

Paimon changelog-producer 与 merge-engine

Paimon表的changelog-producer用于生成数据变更日志,支持四种模式:None、Input、Lookup和full-compaction。None模式不存储额外数据,适用于批处理场景;Input模式直接传递输入消息,适合数据库binlog场景;Lookup模式查找旧值生成完整变更日志,适合有计算逻辑的表;full-compaction模式在完全合并文件时生成变更日志,代价较高。不同模式根据业务需求选择,以平衡时效性和资源开销。

qq_15138049的博客 476

在 RAP 里把编号这件事做得既优雅又合规:Early Numbering 与 Late Numbering 的落地指南

本文探讨了 SAP RAP 框架中的三种主键编号策略及其适用场景。文章首先指出传统 ABAP 应用中主键处理的局限性,详细分析了早期编号(外部/内部)和延迟编号的差异,强调延迟编号在避免业务断号方面的优势。通过 Partner 业务对象案例,文章演示了延迟编号的实现方法,包括行为定义配置、保存类实现和编号分配逻辑。同时指出测试中常见的校验陷阱,并提醒生产环境应避免简单的 MAX+1 方案,建议采用原子取号机制确保并发安全。全文从业务合规性和技术实现两个维度,为 RAP 应用的编号策略选择提供了实用指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1847

Paimon Lookup Join 详解

Paimon Lookup Join 是一种基于快照查询的维表关联方式,专为 Paimon 的 LSM 存储特性设计。它采用请求-响应模式,当主表数据到达时触发对维度表的点查询,返回维度表最新快照数据,而非实时关联。维度表需配置 merge-engine 为 deduplicate 或 partial-update,且 changelog-producer 必须设为 lookup。查询延迟取决于 compaction 频率,通过参数可控制是否等待 compaction 完成。相比传统双流 Join,Look

qq_15138049的博客 534

单板电源设计(LDO、DC/DC)

高速电路设计的电源架构 在电路设计中,一块单板往往涉及多种电源,常见的如5V/3.3V/2.5V/1.8V/1.5V/1.2V/1V0.9V/0.75V等,如此多种类的电源不可能都直接通过背板从电源板获得。一般,单板仅有一种或者两种输入电源,如48V或12V,再由它们产生单板上器件所需要的电源。 单板如何由输入电源生成所需电源,常见有两种架构:集中式电源架构和分布式电源架构。 ...

sinat_15677011的博客 8333

Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析

本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。

1131

Flink x Paimon 在抖音集团生活服务的落地实践

摘要:本文整理自抖音集团数据工程师陆魏老师和流式计算工程冯向宇老师,在Flink Forward Asia 2024 流式湖仓(二)专场的分享。内容分为以下三个部分:Tips:关注「公众号」回复 FFA 2024 查看会后资料~01背景及现状抖音生活服务是抖音集团重要的业务板块,主要通过抖音直播、短视频、团购以及本地同城等流量入口,引导用户进行线上下单支付,并进而引导用户线下消费履约,最终完成线上到线下的引流操作。近些年,抖音生活服务迎来了快速增长,伴随业务增长,生活服务实时数仓技术也迎来关键的技术转变。第

Ververica的博客 1154

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Paimon 表里明明是 80 元,下游为何算成 180?Checkpoint 成功不等于变更完整

Paimon 表里的最终值正确,只证明状态存对了;下游能不能算对,还取决于变化过程有没有被完整表达。

weixin_42426485的博客 309

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Apache Paimon系列之:主键表

创建表时,可以通过指定字段来指定“sequence.field”来确定更新的顺序,也可以指定“rowkind.field”来确定记录的changelog种类。如果你觉得“lookup”的资源消耗太大,可以考虑使用“full-compaction”的changelog Producer,它可以解耦数据写入和changelog生成,更适合高延迟的场景(例如10分钟) )。先到达的key会落入旧的bucket,新的key会落入新的bucket,bucket和key的分布取决于数据到达的顺序。

zhengzaifeidelushang的博客 4755

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

write-only 救活写入后,Paimon 查询为什么一周比一周慢

`write-only` 关闭的是 Writer 内 Compaction,不是 Paimon 对 Compaction 的需要;没有独立作业,合并债会原样留在表里。

weixin_42426485的博客 245

2024年3 Paimon数据湖中的表类型详解_paimon表和hive区别(3),Jetpack-MVVM-高频提问和解答

看这个图,当我们通过Flink CDC去采集数据库中的数据的时候,是可以获取到数据库中的所有Changelog变更日志数据的,所以里面会包含完整的这些类型的数据。此时在Paimon中创建表的时候,就可以指定,这样在存储数据的时候就会单独存储一份Changelog File。下游任务在从Paimon表中读取数据的时候就不需要再产生物化节点生成Changelog了,直接从Paimon表中读取Changelog File即可获取到完整的Changelog数据。下面我们来具体演示一下建表语句中指定时的效果。

2401_84160087的博客 917
上一篇: paimon的四种changelog模式(2)-none模式
下一篇: paimon的四种changelog模式(4)-full-compaction模式
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值