Astyanax cql3 COUNT查询返回ROWS而不是NUMBER

时间:2013-09-24 16:52:26

标签: java cassandra cql3 astyanax

根据Astyanax的示例页面:

https://github.com/Netflix/astyanax/wiki/Cql-and-cql3

当您运行COUNT查询时,result会返回“数字”,因此您可以通过以下方式查询:

try {
    OperationResult<CqlResult<String, String>> result
        = keyspace.prepareQuery(CF_STANDARD1)
            .withCql("SELECT count(*) FROM Standard1 where KEY='A';")
            .execute();

    System.out.println("CQL Count: " + result.getResult().getNumber());
} catch (ConnectionException e) {
}

它应该给你COUNT结果,但我用cql3查询我的表并且它没有给我一个“数字”,而是“行”,只有一行而且只有一列。 / p>

方法hasNumber提供False,方法hasRows提供True,现在,如何获取COUNT查询的结果?< / p>

2 个答案:

答案 0 :(得分:3)

你应该使用

System.out.println("CQL Count: " + result.getResult().getRows().getRowByIndex(0).getColumns().getColumnByName("count").getLongValue());

答案 1 :(得分:1)

根据abhi的回答,但增加了1M的限制以绕过默认限制10K。

private long getCount(ColumnFamily<String, String> columnFamily) throws ConnectionException {
    OperationResult<CqlResult<String, String>> result = context.getClient().prepareQuery(columnFamily)
            .withCql("SELECT count(*) FROM Standard1 limit 1000000;")
            .execute();

    return result.getResult().getRows().getRowByIndex(0).getColumns().getColumnByName("count").getLongValue();
}