我使用的是Vertica数据库07.01.0100和node.js v0.10.32。我正在使用vertica nodejs module by vanberger。我想从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行受到影响。
我想检查命令的状态,但我不知道如何。还有其他一些我需要倾听的事件吗?我是否需要将复制结果保存到变量并在那里监听,就像我对查询调用一样?我是一个节点菜鸟,所以如果答案很明显,请告诉我。
谢谢!
答案 0 :(得分:1)
我并不认为它是node.js
的东西,而是Vertica
的东西。
您需要查找被拒绝的行。您可以在文档here中找到一些很好的示例。
如果要实际查看拒绝的行,可以使用COPY
语句子句REJECTED DATA AS table "loader_rejects"
来执行此操作。或者,您可以将其发送到群集上的文件。我不知道使用STDIN将被拒绝的行放到本地文件的方法。
如果您根本不关心实际数据,只想知道加载和拒绝了多少行......您可以使用GET_NUM_REJECTED_ROWS()
和GET_NUM_ACCEPTED_ROWS()
。我认为COPY
实际上也会返回一个只包含已加载行数的结果集,至少这是我过去注意到的。
所以我想作为一个例子,如果你想看看接受和拒绝了多少行,你可以这样做:
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 )