我正在使用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/ 在此处输入链接描述
我使用的是空字符串。我认为没有其他方法可以做到。
只要确保将列标记为包含空值即可。
理想情况下,您的代码如下所示:
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)
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |