何らかの理由で、Hive は整数として出力された列を認識しませんが、文字列として出力された列を認識します。
RCFile
int の適切なレンダリングを妨げているHive または GZ について何かありますか?
私のHive DDLは次のようになります。
create external table if not exists db.table (intField int, strField string) stored as rcfile location '/path/to/my/data';
そして、私のJavaの関連部分は次のようになります:
BytesRefArrayWritable dataWrite = new BytesRefArrayWritable(2);
byte[] byteArray;
BytesRefWritable bytesRefWritable = new BytesRefWritable(); intWritable.set(myObj.getIntField());
byteArray = WritableUtils.toByteArray(intWritable.get());
bytesRefWritable.set(byteArray, 0, byteArray.length);
dataWrite.set(0, bytesRefWritable); // sets int field as column 0
bytesRefWritable = new BytesRefWritable();
textWritable.set(myObj.getStrField());
bytesRefWritable.set(textWritable.getBytes(), 0, textWritable.getLength());
dataWrite.set(1, bytesRefWritable); // sets str field as column 1
Writables
コードは正常に実行され、ログによって、さまざまなバイトが含まれていることがわかります。
Hive は外部テーブルも読み取ることができますが、int
フィールドは として表示されNULL
、エラーを示します。
SELECT * from db.table;
OK
NULL my string field
Time taken: 0.647 seconds
ここで何が起こっているのでしょうか?