如何将ORC BytesColumnVector值设置为NULL?

Ron*_*unn 1 java orc

我正在使用Groovy编写ORC文件。

列之一是字符串。ORC列类型为:

.addField("Name", TypeDescription.createString())
Run Code Online (Sandbox Code Playgroud)

列向量为:

BytesColumnVector vName = (BytesColumnVector) batch.cols[1]
Run Code Online (Sandbox Code Playgroud)

要分配给vName的值可能包括NULL,但是我无法让ORC将空值写入其数据。

尝试通过set(),setValue()或setRef()分配空值,无论是在分配时还是在ORC内更深地写入批处理行时,都会引发空指针错误。

我能得到的最接近的是:

byte[] b = new byte[0]
vName.setRef (i,b,0,0)
Run Code Online (Sandbox Code Playgroud)

但这会将空字符串放入数据文件中,如以下转储代码段所示(请参见第二列“名称”):

{"ProductID":355,"Name":"","MakeFlag":false,"StandardCost":0,"Weight":null,"ModifiedDate":"2014-02-08 10:01:36.827"}
Run Code Online (Sandbox Code Playgroud)

关于如何设置空字符串有什么想法?

编辑:有了这个问题的答案,我能够完成一些代码以将数据库表的内容写入ORC。对于搜索与ORC相关的示例的人员可能有用。 https://www.linkedin.com/pulse/orc-adls-polybase-ron-dunn/ 在此处输入链接描述

Oma*_*Ali 6

我使用的是空字符串。我认为没有其他方法可以做到。

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

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

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;
Run Code Online (Sandbox Code Playgroud)