Dremel - 重复和定义级别

Ton*_*ous 9 algorithm dataset data-structures parquet dremel

阅读Web规模数据集论文的互动分析,我碰到了重复和定义层次的概念.
虽然我理解这两者的必要性,为了能够消除出现的歧义,它会为每个值附加重复和定义级别.

对我来说不清楚的是他们如何计算水平......

如图所示: 在此输入图像描述

它说:

考虑图2中的现场代码.它在r1中出现三次.出现'en-us'和'en'在第一个名称中,而'en-gb'在第三个名称中.为了消除这些事件的歧义,我们将重复级别附加到每个值.它告诉我们在现场的重复现场重复的价值.


字段路径Name.Language.Code包含两个重复的字段,名称和语言.因此,Code的重复级别在0到2之间; 级别0表示新记录的开始.现在假设我们正在扫描记录r1自上而下.当我们遇到'en-us'时,我们没有看到任何重复的字段,即重复级别为0.当我们看到'en'时,现场语言已经重复,所以重复级别为2.

我只是无法让我围绕它,Name.Language.Coder1en-usen价值观.虽然是第一个r = 0,第二个r = 2是因为两个定义重复了吗?(语言和代码)?

如果它是:

Name
    Language
       Code: en-us
Name 
    Language
        Code: en
Name
    Language
        Code: en-gb
Run Code Online (Sandbox Code Playgroud)

可不可能是 ?

0 2
1 2
2 2 
Run Code Online (Sandbox Code Playgroud)

定义水平.具有路径p的字段的每个值,尤其是 每个NULL,都有一个定义级别,指定p中可能未定义的多少个字段(因为它们是可选的或重复的)实际存在于记录中.

为什么定义级别是2?是不是该路径Name.Language包含两个字段CodeCountry只有1 optional\repeated

use*_*468 9

可能你不再感兴趣了.然而,其他人可能会偶然发现这个问题.Dremel条带化算法绝不是微不足道的.

回答你的第一个问题:

  • 重复级别en-us为0,因为它是记录中第一次出现的name.language.code路径.

  • 重复级别en为2,因为重复发生在级别2(语言标签).

要回答你的第二个问题,请提供以下记录,

DocId: 20
Name
  Language
    Code: en-us
Name 
  Language
    Code: en
Name
  Language
    Code: en-gb
Run Code Online (Sandbox Code Playgroud)

条目name.language.code将是

en-us 0 2
en    1 2
en-gb 1 2 
Run Code Online (Sandbox Code Playgroud)

说明:

  • 该定义级别通常是两个,因为这两个可选的标签namelanguage存在.
  • 重复级别en-us为零,因为它是name.language.code记录中的第一个.
  • 对于重复水平enen-gb为1时,由于重复发生在name标签(1电平).

这有帮助吗?

  • 问题和答案都很好,你能举一些更随机的例子吗,这样就更清楚了。 (3认同)