【问题标题】:How to print end Query in Cassandra nodejs-driver?如何在 Cassandra nodejs-driver 中打印结束查询?
【发布时间】:2016-04-30 02:52:25
【问题描述】:

我正在寻找在 Cassandra nodejs-driver 中打印 end Query 的方法,即绑定所有参数后的 CQL 字符串,以便我可以调试并查看实际进入 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 );
});

我想得到这样的字符串

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

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

【问题讨论】:

    标签: node.js cassandra


    【解决方案1】:

    你可以试试这个

    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);
    });
    

    【讨论】:

      【解决方案2】:

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

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

      java-driver 有一个Query Logger concept 记录执行的查询及其延迟。您可以将其配置为仅记录慢速查询或所有查询。它还记录在准备好的语句中使用的参数,即:

      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 的答案在大多数情况下都可以使用,唯一的例外是您使用命名参数或者您实际上有 '?'在列名中(这是有效的,但可能不是人们实际做的事情)。我已经登录NODEJS-220 请求实现这样的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        • 2014-08-01
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多