私は次のような構造を持っています (ここではデータを表すために JSON を使用しましたが、これは任意の形式のオブジェクトにすることができます):
[
{
"DocID": ["A", "B"]
},
{},
]
Dremel の仕様に基づいて、ここにファイルされる唯一のデータ "DocID" (繰り返される)の繰り返しレベルはであり、最後の項目が null であるため{0,1,0}
、定義レベルはです。{1,1,0}
今、私はこのようなものを持っている場合:
[
{
"DocID": ["A", "B"]
},
{ "DocID": [null]},
]
繰り返しますが、繰り返しレベルは{0,1,0}
で、定義レベルは{0,1,1}
Dremel データを寄木細工の床に保存するために、null フィールドを保存することはありません (ここ)
したがって"A", "B"
、この場合は 2 つの値を格納します (エンコーディングは問題ではありません) が、構造を構築するために、最初の RLevel は 0 であるため、これは新しいオブジェクトの開始であり、最初の DLevel は 1 であるため、null ではありません。最初の値は "A" (正しい) です。2 番目の RLevel は 1 です。これは、同じオブジェクトであり、繰り返しフィールドであることを意味します。DLevel は 1 であるため、null ではありません。2 番目の値を読み取ります。これが「B」(正解)です。3 番目の RLevel は 0 です。これは新しいオブジェクトを意味します。最初の例では、DLevel が 0 であるため null であり、何も読み取る必要がなく (何も残っていない)、動作します。しかし、2 番目のケースでは、DLevel が 1 であるため、何かを読み取る必要があり、読み取るものが残っていません。
この場合、私たちは何をすべきですか?
参考までに、私はfraugster/parquet-goライブラリの共著者であり、これが最近直面した問題です。