2017-04-23 28 views
2

閱讀Interactive Analysis of Web-Scale Datasets紙,我碰到了重複和定義水平的概念。
雖然我理解這兩者的必要性,爲了能夠消除事件的歧義,它將重複和定義級別附加到每個值。Dremel - 重複和定義水平

什麼我不清楚他們是如何計算的水平...

正如圖片所示: enter image description here

它說:

考慮網絡場碼如圖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 

會是誰?

0 2 
1 2 
2 2 

德網絡nition水平。具有路徑p的字段的每個值,尤其是每個NULL都有一個定義級別,用於指定p中有多少可能未定義的字段(因爲它們是可選的或重複的)實際上存在於記錄中。

爲什麼那麼定義級別是2? 是不是路徑Name.Language包含兩個字段CodeCountry其中只有1是optional\repeated

+2

在https://blog.twitter.com/2013/dremel-made-simple-with-parquet上有重複和定義級別的另一個很好的解釋,它也許值得一讀。 – Zoltan

+0

@Zoltan是的,我已經閱讀過它。所以有些句子有點不清楚,總的來說這是一個很好的解釋。我很驚訝在這個問題之前沒有dremel標籤... –

回答

0

我想我現在明白了。讓我們做一個簡單的不同例如:

message Document { 
    required int64 DocId; 

    repeated group Name { 
     repeated group Language { 
      required string Code; 
      repeated string Country; 
     } 
    } 
} 




r1: 
    DocId: 10 

    Name 
     Language 
      Code: 'en-us' 
      Country: 'us' 
     Language 
      Code: 'en' 
      Country = NULL 
    Name 
     Language 
      Code: NULL 
      Country: 'gb' 

每場可以被歸類爲repeatedOptionalrequired。 最後2個不添加到深度爲NULL的定義級別。

  • 文件-ID字段不爲空,但因爲它不屬於repeated它 不會增加定義級別。
  • 代碼也不是重複類型,所以如果語言存在,代碼是否爲 NULL或任何賦值相同的定義級別無關緊要。

有多少字段重複的方式,直到代碼? (2),因此它的深度是2

Doc-Id Definition  Repetition 
    10   0    0 


Code  Definition  Repetition 
en-us  2    0 (first occurrence) 
en   2    2 (second time in same name that we have code) 
NULL  2    1 (new entry of Language) 


Country Definition  Repetition 
    us   3    0 
    NULL  2    2 
    gb   3    1 

編輯:,如果你認爲我的答案是不正確 - 隨意編輯/添加不同的例子。