2

私は次のような構造を持っています (ここではデータを表すために 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ライブラリの共著者であり、これが最近直面した問題です。

4

0 に答える 0