VerticaCopyStream非常慢

时间:2016-05-25 08:12:56

标签: java json jdbc vertica

我使用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命令时,它运行的时间少于一秒。

3 个答案:

答案 0 :(得分:0)

您的问题不在于VerticaCopyStream,问题在于您使用的不同解析器,您需要将apple与apple进行比较,JSON解析器应该比简单的CSV解析器更慢。

答案 1 :(得分:0)

如果你通过使用vsql运行samr插入它解决了问题

答案 2 :(得分:0)

来自客户端的

COPY FROM STDINCOPY LOCAL流数据。仅使用COPY(无LOCAL或STDIN)在服务器上运行它将直接从vertica守护程序加载而没有网络延迟(假设它位于本地磁盘而不是NAS)。

此外,重新实现ByteArrayInputStream的方法...将jsonList转换为InputStream并将其传递给而不是为每个项创建输入流不是更好吗?