14

阅读Web-Scale Datasets 论文的交互式分析时,我遇到了重复和定义级别的概念。
虽然我理解这两个的必要性,以便能够消除出现的歧义,但它为每个值附加了重复和定义级别。

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

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

它说:

考虑图 2 中的字段代码。它在 r1 中出现了 3 次。出现“en-us”和“en”在第一个名称中,而“en-gb”出现在第三个名称中。为了消除这些情况的歧义,我们为每个值附加了一个重复级别。它告诉我们该值在字段路径中的哪个重复字段中重复。


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

Name.Language.Coder1拥有en-usen价值观方面,我无法绕过它。虽然是第一个r = 0,第二个r = 2是因为重复了两个定义?(语言和代码) ?

如果它是:

Name
    Language
       Code: en-us
Name 
    Language
        Code: en
Name
    Language
        Code: en-gb

可不可能是 ?

0 2
1 2
2 2 

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

那么为什么定义级别是 2 呢?路径不是Name.Language包含两个字段Code并且Country只有 1optional\repeated吗?

4

2 回答 2

12

Dremel 条带化算法绝不是微不足道的。

要回答您的第一个问题:

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

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

为了回答你的第二个问题,为了以下记录,

DocId: 20
Name
  Language
    Code: en-us
Name 
  Language
    Code: en
Name
  Language
    Code: en-gb

的条目name.language.code将是

en-us 0 2
en    1 2
en-gb 1 2 

解释:

  • 定义级别总是两个,因为两个可选标签namelanguage存在。
  • 的重复级别en-us为零,因为它是name.language.code记录中的第一个。
  • en和的重复级别为en-gb1,因为重复发生在name标记处(级别 1)。
于 2018-06-21T13:20:40.827 回答
0

Adelin要求提供一些更随机的示例以使事情更清楚。要扩展user152468的答案:

DocId: 20
Name
  Language
    Code: en-us
Name 
  Language
    Code: en
Name
  Language
    Code: en-gb
  Language
    Code: zh
Name
  url: 'https://A'

将会:

代码 重复 定义
恩-我们 0 2
zh 1 2
英文 1 2
zh 2 2
无效的 1 1

对于zh,定义级别与前三个代码一样为 2 ,但其重复级别为2。重复级别不是项目重复的次数,它是树中重复的级别。重复级别为 2,因为Name.Language重复(深度为 2)。en并且en-gb重复级别为 1,因为Name正在重复(不是Name.Language)。

表中最后一个NULL指的Name.Language.Codehttps://A Name. 重复级别为 1,因为Name是重复级别。定义级别为1,因为仅定义了 1 个可选级别 ( Name)。

定义级别

在尝试理解定义级别时,了解这些字段是必需的还是可选的(可为空的或重复的)非常重要。在 Dremel 论文示例中,Code是必需的并且Country可以为空。我在这个例子上挣扎了一段时间:

DocId: 20
Name
  Language
    Code: en-us
    Country: us
代码 重复 定义
恩-我们 0 2
国家 重复 定义
我们 0 3

的定义级别en-us为 2,因为定义了 2 个可选字段:NameLanguage。代码本身是必需的,因此不计入定义级别。

的定义级别为 3,因为路径中us有 3 个可选Name字段: 、LanguageCountry

所以回答原来的问题:

那么为什么定义级别是2呢?路径 Name.Language 是不是包含两个字段 Code 和 Country ,其中只有 1 是可选的\重复的?

定义级别不传达Language记录中有多少可选字段。它传达了路径中定义了多少可选字段。定义所有内容时似乎没有必要,但是当存在NULL值时它很有用。

如果语言记录有更多可选字段(国家、方向和脚本):

DocId: 20
Name
  Language
    Code (required): en-us
    Country (nullable): us
    Direction (nullable): right_to_left
    Script (nullable): Latin

Codeand的定义级别Country不会改变:

小路 价值 重复 定义
Name.Language.Code 恩-我们 0 2
Name.Language.Country 我们 0 3
Name.Language.Direction 右到左 0 3
Name.Language.Script 拉丁 0 3
于 2021-09-11T17:15:32.703 回答