基本概念
文件布局
一个表的所有文件都存储在一个基础目录下。Paimon 文件采用分层方式组织。以下图片展示了文件布局。从快照文件开始,Paimon 读取器可以递归地访问表中的所有记录。

快照
所有快照文件都存储在快照目录中。
快照文件是一个 JSON 格式的文件,其中包含了关于此快照的相关信息,包括
- 正在使用的schema文件
- 包含此快照所有变更内容的清单 manifest list
快照能够捕捉到某个时间点上表的状况。用户可以通过最新的快照访问表的最新数据。通过时间旅行,用户还可以通过较早的快照访问表的先前状态。
清单文件
所有清单列表和清单文件都存储在清单目录中。
清单列表意为清单文件名列表。
一个清单文件是一个包含有关 LSM 数据文件和变更日志文件变更信息的文件。例如,在相应的快照中创建了哪个 LSM 数据文件以及删除了哪个文件。
数据文件
数据文件是按照分区进行分组的。目前,Paimon 支持使用 parquet(默认格式)、orc 和 avro 作为数据文件的格式。
分区
Paimon 采用了与 Apache Hive 相同的数据分区概念来对数据进行划分。
分区是一种可选的方式,用于根据特定列(如日期、城市和部门)的值将表划分为相关部分。每个表可以有一个或多个分区键来标识特定的分区。
通过分区操作,用户能够高效地对表中的某一部分记录进行处理。
一致性保证
Paimon 写入器使用两阶段提交协议来原子性地将一批记录提交到表中。每次提交最多会产生两个快照,快照是在提交时生成的。这取决于增量写入和压缩策略。如果仅执行增量写入而未触发压缩操作,则只会创建一个增量快照。如果触发了压缩操作,则会创建一个增量快照和一个压缩快照。
对于任何同时修改同一张表的两个写入者而言,只要他们不修改相同的分区,他们的提交就可以并行进行。如果他们修改了相同的分区,那么仅能保证实现快照隔离。也就是说,最终的表状态可能会是两个提交的混合体,但不会丢失任何更改。有关更多信息,请参阅专门的合并任务。