快照Snapshot

快照捕获了一个表在某个时间点上的状态。用户可以通过最新的快照来访问一个表的最新数据。通过时间旅行,用户也可以通过较早的快照访问表的先前状态。

分区(Partition)

Paimon 采用了与 Apache Hive 相同的分区概念来分离数据。

分区是一种可选的方式,可以根据特定列的值(如日期、城市和部门等)将表划分为相关部分。每个表可以有一个或多个分区键来标识一个特定的分区。

通过分区,用户可以高效地对表中的某一记录切片进行操作。有关如何将文件划分为多个分区的详细信息,请参见文件布局。

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

Bucket

非分区的表或分区表中的分区会被细分为桶,以便为数据提供额外的结构,这可用于更有效的查询。

一个桶的范围是由记录中的一个或多个列的哈希值决定的。用户可以通过提供 bucket-key 选项来指定桶的列。如果没有指定 bucket-key 选项,将使用主键(如果定义了的话)或完整记录作为桶的键。

桶是最小的读写存储单元,所以桶的数量限制了最大的处理并行度。不过,这个数字不应该太大,因为它会导致大量的小文件和低读取性能。一般来说,建议每个桶的数据大小约为 1GB。

有关文件如何划分为桶的详细信息,请参见文件布局。另外,如果想在创建表后调整桶数的量,请参见调整桶大小

一致性保证(Consistency Guarantees)

Paimon 写入器(writers)使用两阶段提交协议,将一批记录原子地提交到表中。每次提交最多产生两个快照。

对于任何两个同时修改同一张表的写入器来说,只要他们不修改同一个桶,他们的提交是可串行化的。如果他们修改同一个桶,则只能保证快照的隔离。也就是说,最终的表状态可能是两个提交的混合体,但不会丢失任何变更。

(END)