Apache Paimon主键表的一些最佳实践

今天我们说说Paimon主键表的一些使用上的注意事项。

一、主键表

主键表是Paimon的一种表类型。用户可以插入、更新或删除表中的记录。

说的直白点就是,允许你设置唯一主键,然后覆盖更新。

Bucket选择

无论分区表还是未分区表,Bucket都是最小的读写单元。每个Bucket包含一个LSM树及其变更日志文件。

用户可以通过提供bucket-key选项来指定分桶列。如果未指定bucket-key,那么就根据整条记录的hash值进行数据分布(最新版本中,创建Append Queue表时必须指定bucket-key),如果指定了主键,那么会根据主键进行hash。

Bucket数量会限制处理的最大并行度。但是这个值不是越大越好,一般每个Bucket中的数据量官方推荐的值是200MB-1GB,事实上2G左右也可以,但是总之Bucket中的数量不能过多。

同时Paimon是支持扩容Bucket的,并且提供了Rescale Bucket的功能对历史数据重新分布。

跨分区更新问题

Paimon主键表本身是允许设置分区的。例如你的某一张表设置了天分区,如果你的Primary Key不包含分区键,这时候就会出现跨分区更新的问题。根据你的合并引擎不同,表现不同:

  • Deduplicate:删除旧分区中的数据,并将新数据插入到新分区中;

  • PartialUpdate & Aggregation:将新数据插入旧分区;

  • FirstRow:如果有旧值,则忽略新数据

数据量较大时,性能下降明显。

所以,强烈建议,如果你要用主键表,那么最好是不带分区,并且配合行级别过期能力进行数据失效。

核心配置就两个:

'record-level.expire-time': 要保留的时间,秒值

'record-level.time-field': 过期字段,INT类型

文件合并

压缩是一个资源密集型过程,会消耗一定的CPU时间和磁盘IO,因此过于频繁的压缩可能会导致写入速度变慢。

Paimon框架本身提供了通用的压缩策略。大多数场景,你不需要做任何事情。但是如果你的任务因为compaction导致lag,那么有两种方案可以考虑:

  1. 同步变异步

直接把这两个参数打开,数据写入不会受到文件合并的影响。

go 复制代码
num-sorted-run.stop-trigger = 2147483647
sort-spill-threshold = 10
  1. 启动专属压缩任务

Paimon给我们提供了Dedicated Compaction压缩策略,这个策略类似Hudi中的Off-line Compaction。

什么意思呢?你可以单独启动一个任务专门进行文件的合并。

例如:

go 复制代码
<FLINK_HOME>/bin/flink run \
    /path/to/paimon-flink-action-0.8.2.jar \
    compact \
    --warehouse s3:///path/to/warehouse \
    --database test_db \
    --table test_table \
    --partition dt=20221126,hh=08 \
    --partition dt=20221127,hh=09 \
    --table_conf sink.parallelism=10 \
    --catalog_conf s3.endpoint=https://****.com \
    --catalog_conf s3.access-key=***** \
    --catalog_conf s3.secret-key=*****

300万字!全网最全大数据学习面试社区等你来!

如果这个文章对你有帮助,不要忘记 「在看」 「点赞」 「收藏」 三连啊喂!

全网首发|大数据专家级技能模型与学习指南(胜天半子篇)

互联网最坏的时代可能真的来了

我在B站读大学,大数据专业

我们在学习Flink的时候,到底在学习什么?

193篇文章暴揍Flink,这个合集你需要关注一下

Flink生产环境TOP难题与优化,阿里巴巴藏经阁YYDS

Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点

我们在学习Spark的时候,到底在学习什么?

在所有Spark模块中,我愿称SparkSQL为最强!

硬刚Hive | 4万字基础调优面试小总结

数据治理方法论和实践小百科全书

标签体系下的用户画像建设小指南

4万字长文 | ClickHouse基础&实践&调优全视角解析

【面试&个人成长】社招和校招的经验之谈

大数据方向另一个十年开启 |《硬刚系列》第一版完结

我写过的关于成长/面试/职场进阶的文章

当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

相关推荐
CSND7401 分钟前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim
半糖11224 分钟前
将本地项目提交到远程仓库
前端·vue.js
程序员黄同学2 小时前
如何使用 Python 连接 MySQL 数据库?
数据库·python·mysql
新手小袁_J3 小时前
实现Python将csv数据导入到Neo4j
数据库·python·neo4j·《我是刑警》·python连接neo4j·python导入csv·csv数据集导入neo4j
ZHOUPUYU3 小时前
最新 neo4j 5.26版本下载安装配置步骤【附安装包】
java·后端·jdk·nosql·数据库开发·neo4j·图形数据库
シ風箏3 小时前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j
张声录13 小时前
【ETCD】【实操篇(四)】etcd常见问题快问快答FAQ
数据库·etcd
web150850966414 小时前
【React&前端】大屏适配解决方案&从框架结构到实现(超详细)(附代码)
前端·react.js·前端框架
理想不理想v4 小时前
前端项目性能优化(详细)
前端·性能优化
Q_19284999064 小时前
基于Spring Boot的找律师系统
java·spring boot·后端