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

请先了解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合并引擎
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值