让我们直入主题,讨论 parquet 文章里最常见各种翻译文章介绍 level 说的语焉不详,让人迷迷糊糊。
Repetition Level
定义:本质是为了在还原顺序记录时,能够处理重复字段的问题。
前提:对于一个 record,每个字段有一个 path,即从 record 到该字段的所有嵌套字段的拼接。
怎么算:(record 中第一个 field 是 0 不讨论)重复字段出现时,找到 path 中最后一个在重复的字段,这个字段在 path 的所有可重复(repeated)字段中的次序,就是 level 值。
其实论文本身给的例子非常充分了,但是但是缺少一些细节解释。

这个例子直接给出了三种 level 值计算方式:
- 对于
Name.Language.Code: 'en',最后一个重复的字段是 Language(重复的空间是所属 Name),而这个 path 中,Name 和 Language 都是 repeated ,因此 level 值为 2; - 对于
Name.Language.Code: 'gb',注意最后一个重复字段是 Name (重复空间是整个 record),同理,level 值为 1; - 对于
Links.Forward: 40,这个形式对于理解最为关键,最后一个重复的字段是 Forwards,论其在 path 中的序号是 2,但 Links 本身不是 repeated,所以此时 Forwards 是 path 中第一个 repeated,因此 level 值为 1。
其实,parquet 作者的另一幅图很能说明这个逻辑:

Definition Level
这个似乎相对更简单,简单一句话:最后一个 optional/repeated 字段在 path 中的序号即可。
文章探讨了Parquet格式中RepetitionLevel和DefinitionLevel的概念,它们用于处理数据的重复和可选性。RepetitionLevel指示字段在路径中的重复位置,而DefinitionLevel则表示最后一个可选或重复字段的位置。通过举例和分析,解释了如何计算这两个级别的值,帮助读者理解Parquet数据存储的逻辑。
638





