出于某种原因,Hive 不识别作为整数发出的列,但确实识别作为字符串发出的列。
Hive 或RCFile
GZ 是否存在阻止正确渲染 int 的内容?
我的 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
知道这里可能会发生什么吗?