2

我有一个这样的结构(我在这里使用 JSON 来表示数据,但这可以是任何形式的对象):

[ 
  {
    "DocID": ["A", "B"]
  },
  {},
]

根据 Dremel 规范,此处提交的唯一数据“DocID”(重复)的重复{0,1,0}级别是,定义级别是{1,1,0}因为最后一项为空。

现在,如果我有这样的事情:

[ 
  {
    "DocID": ["A", "B"]
  },
  { "DocID": [null]},
]

再说一遍,重复级别是{0,1,0},定义级别是{0,1,1}

为了在 parquet 中存储 Dremel 数据,我们从不存储空字段(此处

所以在这种情况下我们存储两个值"A", "B"(编码无关紧要),但是对于构造结构,第一个 RLevel 为零,所以这是一个新对象的开始,第一个 DLevel 是 1,所以 this 不为空。我们读取第一个值,即“A”(正确),第二个 RLevel 为 1,这意味着它仍然是同一个对象,它是一个重复字段,DLevel 为 1,因此它不为空,我们读取第二个值这是“B”(正确)。第三个 RLevel 为 0,这意味着一个新对象。在第一个示例中,DLevel 为零,因此它为空,我们不需要读取任何内容(没有任何内容)并且它可以工作。但是在第二种情况下,DLevel 是 1,所以我们需要读取一些东西,而没有什么可读取的了。

在这种情况下我们应该怎么做?

就上下文而言,我是fraugster/parquet-go库的合著者,这是我们最近面临的问题。

4

0 回答 0