我使用vertica flex table将json加载到vertica而不定义表格,我的加载时间出现了问题。
我使用jdbc驱动器连接到我的vertica,然后使用此代码..
String copyQuery = "COPY schema.tablename FROM STDIN PARSER fjsonparser()";
VerticaCopyStream vstream = new VerticaCopyStream((VerticaConnection)conn, copyQuery);
InputStream input;
vstream.start();
for(JsonNode json : jsonList){
input = new ByteArrayInputStream(json.toString().getBytes());
vstream.addStream(input);
input.close();
}
vstream.execute();
vstream.finish();
对于5000 jsons,命令“vstream.execute()”需要12秒,但是当我从文件中使用COPY命令时,它运行的时间少于一秒。
答案 0 :(得分:0)
您的问题不在于VerticaCopyStream,问题在于您使用的不同解析器,您需要将apple与apple进行比较,JSON解析器应该比简单的CSV解析器更慢。
答案 1 :(得分:0)
如果你通过使用vsql运行samr插入它解决了问题
答案 2 :(得分:0)
COPY FROM STDIN
和COPY LOCAL
流数据。仅使用COPY
(无LOCAL或STDIN)在服务器上运行它将直接从vertica守护程序加载而没有网络延迟(假设它位于本地磁盘而不是NAS)。
此外,重新实现ByteArrayInputStream的方法...将jsonList转换为InputStream并将其传递给而不是为每个项创建输入流不是更好吗?