Dremel - 重复和定义级别

时间:2017-04-23 06:35:47

标签: algorithm data-structures dataset parquet dremel

阅读Interactive Analysis of Web-Scale Datasets论文,我碰到了重复和定义层次的概念。
虽然我理解这两者的必要性,为了能够消除事件的歧义,它会为每个值附加重复和定义级别。

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

如图所示: 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.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,其中只有一个是optional\repeated

1 个答案:

答案 0 :(得分:7)

Dremel条带化算法绝非易事。

要回答第一个问题:

  • using(SqlConnection connection = new SqlConnection("server=.\\server1; database = PMS; Integrated security=true;")) { String query = "INSERT INTO tblEmployees (cid, empID, empFirstName, empMidName,empLastName, empAge, empTitle, empAddress, empRank, empSalary, empEmail, empPhone,empMobile, Notes, userName, usrPassword, usrAccessLevel, empActive, empMarked, empType) VALUES (@cid, @empID, @empFirstName, @empMidName,@empLastName, @empAge, @empTitle, @empAddress, @empRank, @empSalary, @empEmail, @empPhone,@empMobile, @Notes, @userName, @usrPassword, @usrAccessLevel, @empActive, @empMarked, @empType)"; using(SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@cid", cid); command.Parameters.AddWithValue("@empID", empID); command.Parameters.AddWithValue(" @empFirstName", empFirstName); command.Parameters.AddWithValue("@empMidName", empMidName); command.Parameters.AddWithValue("@empLastName", empLastName); command.Parameters.AddWithValue("@empAge", empAge); command.Parameters.AddWithValue(" @empTitle", empTitle); command.Parameters.AddWithValue("@empAddress", empAddress); command.Parameters.AddWithValue("@empRank", empRank); command.Parameters.AddWithValue("@empSalary", empSalary); command.Parameters.AddWithValue(" @empEmail", empEmail); command.Parameters.AddWithValue("@empPhone", empPhone); command.Parameters.AddWithValue("@empMobile", empMobile); command.Parameters.AddWithValue("@Notes", Notes); command.Parameters.AddWithValue("@userName", userName); command.Parameters.AddWithValue("@usrPassword", usrPassword); command.Parameters.AddWithValue("@usrAccessLevel", usrAccessLevel); command.Parameters.AddWithValue("@empActive", empActive); command.Parameters.AddWithValue("@empMarked", empMarked); command.Parameters.AddWithValue("@empType", empType); connection.Open(); int result = command.ExecuteNonQuery(); // Check Error if(result < 0) Console.WriteLine("Error inserting data into Database!"); } } 的重复级别为0,因为它是记录中en-us路径的首次出现。

  • name.language.code的重复级别为2,因为重复发生在级别2(语言标记)上。

要回答第二个问题,请记录以下信息

en

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 name,因此定义级别始终为2。
  • language的重复级别为零,因为它是记录中的第一个en-us
  • name.language.codeen的重复级别为1,因为重复发生在en-gb标签(级别1)上。