【问题标题】:Dremel - repetition and definition levelDremel - 重复和定义级别
【发布时间】:2017-09-19 22:58:01
【问题描述】:

阅读Interactive Analysis of 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.Code 中的 r1 具有 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不是包含两个字段CodeCountry,其中只有1是optional\repeated吗?

【问题讨论】:

标签: algorithm data-structures dataset parquet dremel


【解决方案1】:

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'

应该是:

Code Repetition Definition
en-us 0 2
en 1 2
en-gb 1 2
zh 2 2
NULL 1 1

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

表中最后一个NULL指的是https://AName缺少的Name.Language.Code。重复级别为1,因为@ 987654337是重复级别。定义级别是 1 ,因为只有1个可选级别定义(Name)。

定义级别

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

DocId: 20
Name
  Language
    Code: en-us
    Country: us
Code Repetition Definition
en-us 0 2
Country Repetition Definition
us 0 3

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

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

所以回答原来的问题:

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

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

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

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

@ 987654351和Country不会改变:

Path Value Repetition Definition
Name.Language.Code en-us 0 2
Name.Language.Country us 0 3
Name.Language.Direction right_to_left 0 3
Name.Language.Script Latin 0 3

【讨论】:

    【解决方案2】:

    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
    

    name.language.code 的条目将是

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

    解释:

    • 定义级别始终为两个,因为存在两个可选标签namelanguage
    • en-us 的重复级别为零,因为它是记录中的第一个 name.language.code
    • enen-gb 的重复级别为 1,因为重复发生在 name 标记(级别 1)。

    【讨论】:

    • 问题和答案都很好,你能举一些更随机的例子,这样就更清楚了。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多