我正在使用Groovy编写ORC文件。
其中一列是String。 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)
但是这会将空字符串放入数据文件中,如以下转储片段所示(请参阅第二列,'名称'):
{"ProductID":355,"Name":"","MakeFlag":false,"StandardCost":0,"Weight":null,"ModifiedDate":"2014-02-08 10:01:36.827"}
关于如何设置空字符串的任何想法?
编辑:通过这个问题的答案,我能够完成一些代码,将数据库表的内容写入ORC。它可能对搜索ORC相关示例的人有用。 https://www.linkedin.com/pulse/orc-adls-polybase-ron-dunn/ enter link description here
答案 0 :(得分:4)
我使用的是空字符串。我不认为还有另一种方法可以做到。
只需确保将列标记为包含空值。
您的代码理想情况如下:
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;