• 快速理解Parquet的DL和RL


          关于Parquet的详细介绍,请参考: 新一代列式存储格式Parquet,此文中对Parquet做了详细的介绍,这里不做重复介绍,但其中关于Definition Level(DL)和Repeated Level(RL)部分,比较难懂,这里做一个更加方便易懂的总结。

          对DL和RL的理解,最好是文中的关于Document对象的示例,摘录如下:

    一个完整的例子

    本节我们使用Dremel论文中给的Document示例和给定的两个值r1和r2展示计算repeated level和definition level的过程,这里把未定义的值记录为NULL,使用R表示repeated level,D表示definition level。

    document schema

     

          这个示例及讲解已经够明白了,但对于思维不那么发达的童鞋来说,理解起来还是颇有困难的,比如说我!

          首先阐明我对DL和RL的理解:

          DL,Definition Level,顾名思义,即在对象树中,对与相应schema来讲,当前节点的定义深度(到节点本身),即在第几深度被定义的,如果该节点有值,那么对应的DL值就是从根节点到该节点本身的深度,如果值为NULL,则其值应该为从根节点到该节点路径的最大深度

          RL, Repeated Level,顾名思义,即在对象树中,对与相应schema来讲,当前节点的“重复深度”,何谓“重复深度”,这正是通篇中最不易理解的地方。我给出自己的定义:所谓重复深度是指repeated类型节点(处于Array或List集合中的节点)记为“certainType A”相对于上一个相同schema类型节点(记为“certainType B”)而言,两者最大能在哪个Level上repeat,更通俗地讲就是指两者的“共同的相互repeated的祖先的深度”,唉,实际上还是有点绕!

          举个栗子来说,如上述示例中的值为en_us的Code节点A,和值为en的Code节点B以及值为en-gb的Code节点C, 因为A在r1中首次出现,且被定义在第3深度,所以对应的RL=0,DL=3, 而B节点相对于上一相相同schema类型的节点A来说,两者只能在Language深度上被Language做repeated,而不能在Language内部作为兄弟节点进行repeate,因为而者父亲不同,所以对于B来讲,其RL值就是祖先中Language节点的深度,DL值就是B本身的深度,因为RL=2,DL=3,但是,注意到,因为schema中规定Code节点是required类型,即必填值,因此对这种类型的节点而言,其值一定被定义了,所以可以忽略DL的值,同时该列中RL最大值只到2,所以DL也取了2,其实我理解这时候DL取几都无所谓。因为DL只对repeated和optional型节点有意义。同理C节点和A、B节点最多只能在Name节点的深度上repeate,而C是在第3深度定义的,因此,RL=1,DL=3,同上述解释,DL取最大的RL,即2。

    最后

    对于DL,用一句话理解:这个非requied节点在第几深度被定义,DL就是几

    对于RL,用一句话理解:这个repeted节点与前一个同型节点在第几深度做repeate,RL就是几

  • 相关阅读:
    Kafka系列之-Kafka入门
    2018个人年终总结
    javascript 模块化学习:Class打包出来无法实例化问题
    [SqlServer] Error: 15023
    [Auto Testing] 工具准备:Selenium 与 ChromeDriver
    [Python] 模拟登录网站(。。为了之后操作数据。。)
    [Angular 6] 初学angular,环境全部最新,[ ng serve ] 不能启动,卡在 95% 不动 => 解决方案
    [nuget]VS中包管理器打开后找不到其它工程的问题
    当需要给<span>标签设宽度
    关于近期打算
  • 原文地址:https://www.cnblogs.com/yepei/p/6239938.html
Copyright © 2020-2023  润新知