Apache Paimon | 基本概念
快照(Snapshot)
快照捕获了一个表在某个时间点上的状态。用户可以通过最新的快照来访问一个表的最新数据。通过时间旅行,用户也可以通过较早的快照访问表的先前状态。
分区(Partition)
Paimon 采用了与 Apache Hive 相同的分区概念来分离数据。
分区是一种可选的方式,可以根据特定列的值(如日期、城市和部门等)将表划分为相关部分。每个表可以有一个或多个分区键来标识一个特定的分区。
通过分区,用户可以高效地对表中的某一记录切片进行操作。有关如何将文件划分为多个分区的详细信息,请参见文件布局。
如果定义了主键,分区键必须是主键的一个子集。
桶(Bucket)
非分区的表或分区表中的分区会被细分为桶,以便为数据提供额外的结构,这可用于更有效的查询。
一个桶的范围是由记录中的一个或多个列的哈希值决定的。用户可以通过提供 bucket-key
选项来指定桶的列。如果没有指定 bucket-key
选项,将使用主键(如果定义了的话)或完整记录作为桶的键。
桶是最小的读写存储单元,所以桶的数量限制了最大的处理并行度。不过,这个数字不应该太大,因为它会导致大量的小文件和低读取性能。一般来说,建议每个桶的数据大小约为 1GB。
有关文件如何划分为桶的详细信息,请参见文件布局。另外,如果想在创建表后调整桶数的量,请参见调整桶大小。
一致性保证(Consistency Guarantees)
Paimon 写入器(writers)使用两阶段提交协议,将一批记录原子地提交到表中。每次提交最多产生两个快照。
对于任何两个同时修改同一张表的写入器来说,只要他们不修改同一个桶,他们的提交是可串行化的。如果他们修改同一个桶,则只能保证快照的隔离。也就是说,最终的表状态可能是两个提交的混合体,但不会丢失任何变更。
(END)
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.