Astyanax cql3 COUNT запрос возвращает строки не NUMBER
Согласно примеру страницы 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, и она не дает мне "Число", а "Строки", только одну Строку и только один Столбец.
Метод hasNumber
дает False
и метод hasRows
дает True
Итак, как я могу получить результат моего COUNT
запрос?
2 ответа
Решение
Вы должны использовать
System.out.println("CQL Count: " + result.getResult().getRows().getRowByIndex(0).getColumns().getColumnByName("count").getLongValue());
Основано на ответе 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();
}