如何将 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;
我正在使用 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;