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();
}
Другие вопросы по тегам