如何从NodeJS中的stdin响应获取Vertica副本?

我使用的是Vertica Database 07.01.0100和node.js v0.10.32。 我正在使用vanberger的vertica nodejs模块 。 我想从stdin命令发送一个副本,并且正在使用这个示例: https : //gist.github.com/soldair/5168249 。 这是我的代码:

var loadStreamQuery = "COPY \""+input('table-name')+"\" FROM STDIN DELIMITER ',' skip 1 direct;" var stream = through(); connection.copy(loadStreamQuery,function(transfer, success, fail){ stream.on('data',function(data){ log.info("loaddata: on data =>",data); transfer(data); }); stream.on('end',function(data){ log.info("loaddata: on end =>", data); if(data) { transfer(data); } success(); callback(null,{'result':{'status':'200','result':"Data was loaded successfully into Vertica"}}); }); stream.on('error',function(err){ fail(); log.error("loaddata: on error =>",err); connection.disconnect(); }); stream.write(new Buffer(file)); stream.end(); } ); 

但是,如果数据文件有比目标表更多的列,它不会这么说。 它只是愉快地运行,没有复制,然后结束。 当我看着桌子时,什么也没有加载。 如果我在dbvisualizer中做同样的事情,它会告诉我0行受到影响。

我想检查命令的状态,但我不知道如何。 还有其他一些事情我需要听吗? 我是否需要将复制的结果保存到variables中并在那里进行监听,就像查询调用一样? 我是一个nodejs noob,所以如果答案是显而易见的,请让我知道。

谢谢!

我真的不认为这是一个node.js东西,因为它是一个Vertica东西。

您需要查找被拒绝的行。 你可以在这里find一些很好的例子。

如果要真正看到拒绝的行,可以使用REJECTED DATA AS table "loader_rejects"语句子句(如REJECTED DATA AS table "loader_rejects"来执行此操作。 或者,您可以将其发送到群集上的文件。 我不知道使用STDIN将被拒绝行logging到本地文件的方法。

如果你不关心实际的数据,只想知道有多less行加载和拒绝…你可以使用GET_NUM_REJECTED_ROWS()GET_NUM_ACCEPTED_ROWS() 。 我认为COPY实际上也会返回一个只有加载行数的结果集,至less这是我以前注意到的。

所以我想作为一个例子,如果你想看看有多less行被接受和拒绝,你可以这样做:

 connection.query "SELECT GET_NUM_REJECTED_ROWS() AS REJECTED_ROWS, GET_NUMBER_ACCEPTED_ROWS() AS ACCEPTED_ROWS", (err, resultset) -> log.info( err, resultset.fields, resultset.rows, resultset.status )