一分钟看懂 Parquet 中最复杂的两个 “Level”!

文章探讨了Parquet格式中RepetitionLevel和DefinitionLevel的概念,它们用于处理数据的重复和可选性。RepetitionLevel指示字段在路径中的重复位置,而DefinitionLevel则表示最后一个可选或重复字段的位置。通过举例和分析,解释了如何计算这两个级别的值,帮助读者理解Parquet数据存储的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

让我们直入主题,讨论 parquet 文章里最常见各种翻译文章介绍 level 说的语焉不详,让人迷迷糊糊。

Repetition Level

定义:本质是为了在还原顺序记录时,能够处理重复字段的问题。
前提:对于一个 record,每个字段有一个 path,即从 record 到该字段的所有嵌套字段的拼接。
怎么算:(record 中第一个 field 是 0 不讨论)重复字段出现时,找到 path 中最后一个在重复的字段,这个字段在 path 的所有可重复(repeated)字段中的次序,就是 level 值。

其实论文本身给的例子非常充分了,但是但是缺少一些细节解释。

在这里插入图片描述
这个例子直接给出了三种 level 值计算方式:

  1. 对于 Name.Language.Code: 'en' ,最后一个重复的字段是 Language(重复的空间是所属 Name),而这个 path 中,Name 和 Language 都是 repeated ,因此 level 值为 2;
  2. 对于 Name.Language.Code: 'gb',注意最后一个重复字段是 Name (重复空间是整个 record),同理,level 值为 1;
  3. 对于 Links.Forward: 40,这个形式对于理解最为关键,最后一个重复的字段是 Forwards,论其在 path 中的序号是 2,但 Links 本身不是 repeated,所以此时 Forwards 是 path 中第一个 repeated,因此 level 值为 1。

其实,parquet 作者的另一幅图很能说明这个逻辑:

出处:https://github.com/julienledem/redelm/wiki/The-striping-and-assembly-algorithms-from-the-Dremel-paper

Definition Level

这个似乎相对更简单,简单一句话:最后一个 optional/repeated 字段在 path 中的序号即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值