Java 如何将ORC BytesColumnVector值设置为NULL?

Java 如何将ORC BytesColumnVector值设置为NULL?,java,orc,Java,Orc,我正在用Groovy编写一个ORC文件 其中一列是字符串。ORC柱类型为: .addField("Name", TypeDescription.createString()) 列向量为: BytesColumnVector vName = (BytesColumnVector) batch.cols[1] 要分配给vName的值可能包含null,但我无法让ORC将null值写入其数据 尝试通过set、setValue或setRef分配空值会在分配点或批处理行在ORC中写入更深时引发空指针错误

我正在用Groovy编写一个ORC文件

其中一列是字符串。ORC柱类型为:

.addField("Name", TypeDescription.createString())
列向量为:

BytesColumnVector vName = (BytesColumnVector) batch.cols[1]
要分配给vName的值可能包含null,但我无法让ORC将null值写入其数据

尝试通过set、setValue或setRef分配空值会在分配点或批处理行在ORC中写入更深时引发空指针错误

我能得到的最接近的结果是:

byte[] b = new byte[0]
vName.setRef (i,b,0,0)
但这会将一个空字符串放入数据文件,如以下转储代码段所示。请参见第二列“Name”:

{"ProductID":355,"Name":"","MakeFlag":false,"StandardCost":0,"Weight":null,"ModifiedDate":"2014-02-08 10:01:36.827"}
关于如何设置空字符串有什么想法吗

编辑:有了这个问题的答案,我能够完成一些代码,将数据库表的内容写入ORC。它可能对搜索ORC相关示例的人有用。
我使用的是空字符串。我想没有别的办法了

只需确保将列标记为包含空值即可

理想情况下,您的代码如下所示:

BytesColumnVector vName = (BytesColumnVector) batch.cols[1];
byte[] EMPTY_BYTES = "".getBytes(StandardCharsets.UTF_8);
vName.setRef(i, EMPTY_BYTES, 0, 0);
vName.isNull[i] = true;
vName.noNulls = false;

我使用的是空字符串。我想没有别的办法了

只需确保将列标记为包含空值即可

理想情况下,您的代码如下所示:

BytesColumnVector vName = (BytesColumnVector) batch.cols[1];
byte[] EMPTY_BYTES = "".getBytes(StandardCharsets.UTF_8);
vName.setRef(i, EMPTY_BYTES, 0, 0);
vName.isNull[i] = true;
vName.noNulls = false;

我使用的是空字符串。但是还要设置vName.isNull[I]=true;vName.noNulls=false@OmarAli请你把这个作为一个答案,这样我就可以适当地投票了?你解决了我的问题,谢谢。我用的是空字符串。但是还要设置vName.isNull[I]=true;vName.noNulls=false@OmarAli请你把这个作为一个答案,这样我就可以适当地投票了?你解决了我的问题,谢谢。谢谢你的回答。但是问题是当我读回字符串时,它不是空的?谢谢你的回答。但是问题是当我读回字符串时,它不是空的?