如何将 ORC BytesColumnVector 值设置为 NULL?

How to set ORC BytesColumnVector value to NULL?

我正在使用 Groovy.

编写一个 ORC 文件

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

.addField("Name", TypeDescription.createString())

列向量为:

BytesColumnVector vName = (BytesColumnVector) batch.cols[1]

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

尝试通过 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"}

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

编辑:有了这个问题的答案,我能够完成一些代码来将数据库table的内容写入ORC。它可能对搜索与 ORC 相关的示例的人有用。 https://www.linkedin.com/pulse/orc-adls-polybase-ron-dunn/enter link description here

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

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

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

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;