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

让我们直入主题,讨论 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 中的序号即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值