Apache Paimon 基础概念

Snapshot

快照(Snapshot)是在某个时间点上捕捉表状态的方式。用户可以通过最新的快照访问表的最新数据。通过时间回溯,用户还可以通过较早的快照访问表的先前状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static final String FIELD_VERSION = "version";
private static final String FIELD_ID = "id";
private static final String FIELD_SCHEMA_ID = "schemaId";
private static final String FIELD_BASE_MANIFEST_LIST = "baseManifestList";
private static final String FIELD_DELTA_MANIFEST_LIST = "deltaManifestList";
private static final String FIELD_CHANGELOG_MANIFEST_LIST = "changelogManifestList";
private static final String FIELD_INDEX_MANIFEST = "indexManifest";
private static final String FIELD_COMMIT_USER = "commitUser";
private static final String FIELD_COMMIT_IDENTIFIER = "commitIdentifier";
private static final String FIELD_COMMIT_KIND = "commitKind";
private static final String FIELD_TIME_MILLIS = "timeMillis";
private static final String FIELD_LOG_OFFSETS = "logOffsets";
private static final String FIELD_TOTAL_RECORD_COUNT = "totalRecordCount";
private static final String FIELD_DELTA_RECORD_COUNT = "deltaRecordCount";
private static final String FIELD_CHANGELOG_RECORD_COUNT = "changelogRecordCount";
private static final String FIELD_WATERMARK = "watermark";

Partition

Paimon 采用与 Apache Hive 相同的分区概念来分离数据。分区是根据特定列(如日期、城市和部门)的值将表划分成相关部分的可选方式。每个表可以有一个或多个分区键来标识特定的分区。通过分区,用户可以高效地操作表中的一部分记录,请参考文档如何划分为多个分区。

如果定义了主键,分区键必须是主键的子集。

Bucket

未分区的表,或者分区表中的分区,被细分为 bucket,以为数据提供额外的结构,以便进行更高效的查询。

bucket 的范围由记录中一个或多个列的哈希值确定。用户可以通过提供存储桶键选项来指定bucket 列。如果未指定 bucket 键选项,则主键(如果定义)或完整记录将被用作 bucket 键。

bucket 是读写的最小存储单元,因此 bucket 的数量限制了最大的处理并行性。然而,这个数量不应该过大,因为会导致大量的小文件和低读取性能。一般来说,每个 bucket 中推荐的数据大小约为1GB。

请参阅资料了解文件如何被划分为 bucket。此外,如果您想在创建表后调整 bucket 的数量,请参阅重新调整 bucket

一致性保证

Paimon 的写操作使用两阶段提交协议来原子地将一批记录提交到表中,每次提交最多会产生两个快照。

对于同时修改同一表的任意两个写入者,只要它们不修改同一个存储桶,它们的提交可以并行进行。如果它们修改同一个存储桶,只能保证快照隔离性。也就是说,最终的表状态可能是两个提交的混合,但不会丢失任何更改。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. Snapshot
  2. 2. Partition
  3. 3. Bucket
  4. 4. 一致性保证