我有一个这样的结构(我在这里使用 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库的合著者,这是我们最近面临的问题。