如何在Cassandra nodejs-driver中打印结束查询?

我正在寻找在Cassandra nodejs-driver中打印结束查询的方式,即在绑定了所有参数之后的CQLstring,以便我可以debugging并查看Cassandra引擎的实际值。 这个怎么做?

var query = ' select * from shahid.tbl_raw_data where yymmddhh = ? limit ? '; var params = [last_yymmddhh_value, settings.records_per_batch]; client.execute(query, params, {prepare: true}, function(err, result) { console.log( result ); }); 

我想得到这样的string

select * from shahid.tbl_raw_data where yymmddhh = '15010101' limit 100

注意:这是一个简单的例子,我实际上是在循环中处理非常复杂的查询,所以我不想做console.log(last_yymmddhh_value)来查看绑定值。

实际上由驱动程序执行的查询不同于完整查询文本,因为评估是在服务器端完成的。

实际发送到服务器的是一个唯一的ID,标识准备好的语句和您提供的参数值(请参阅: EXECUTE )。 但是,最终您提供的查询文本是正在评估的内容。

java-driver具有查询logging器概念 ,logging执行的查询及其延迟。 您可以对其进行configuration,使其仅logging慢速查询或所有查询。 它还logging准备好的语句中使用的参数,即:

 DEBUG [cluster1] [/127.0.0.1:9042] Query completed normally, took 9 ms: select * from shahid.tbl_raw_data where yymmddhh = ? limit ? [15010101, 100]; 

目前还没有nodejs-driver这样的构造,但是alex-rokabilis的答案在大多数情况下都是可行的,唯一的例外就是使用命名参数的地方,或者实际上有'?' 列名(这是有效的,但可能不是人们实际上做的事)。 我已经loginNODEJS-220请求实现这样的function。

你可以试试这个

 function dispQuery(query, params) { var params_temp = Array.from(params); return query.replace(/\?/g, function() { return params_temp.shift() }) } 

例如在你的代码中:

 client.execute(query, params, {prepare: true}, function(err, result) { console.log("Query ::%s",dispQuery(query,params)); console.log("Result ::",result); });