Как получить количество строк в таблице Кассандра

это супер основной вопрос, но это на самом деле меня беспокоило в течение нескольких дней. Есть ли хороший способ получить эквивалент a COUNT(*) данного стола в Кассандре?

Я буду перемещать несколько сотен миллионов строк в C* для некоторого нагрузочного тестирования, и я хотел бы, по крайней мере, получить количество строк на некоторых образцах заданий ETL, прежде чем перемещать огромные объемы данных по сети.

лучшая идея, которую я имею, - это в основном цикл над каждой строкой с Python и auto увеличить счетчик. Есть ли лучший способ определить (или даже оценить) размер строки таблицы C*? Я также проверил центр операций Datastax, чтобы узнать, могу ли я определить размер строки там. Если можешь, я не вижу, как это возможно.

кто-то еще должен был получить count(*) таблицы в C*? Если да, то как вы это сделали?

6 ответов


Да, вы можете использовать COUNT(*). Вот документация.

выражение SELECT с помощью COUNT (*) возвращает количество строк, соответствующих запросу. Кроме того, вы можете использовать COUNT(1) для получения того же результата.

подсчитать количество строк в таблице users:

SELECT COUNT(*) FROM users;

вы также можете получить некоторые оценки от nodetool cfhistograms Если вам не нужен точный счетчик (эти значения являются оценками).

вы также можете использовать spark, если вы используете DSE.


nodetool tablestats может быть довольно удобно для быстрого получения оценок строк (и другой статистики таблицы).

nodetool tablestats <keyspace.table> для определенной таблицы


вы можете использовать копию, чтобы избежать тайм-аута Кассандры, как правило, происходит на count ( * )

cqlsh -e "copy keyspace.table_name (first_partition_key_name) to '/dev/null'" | sed -n 5p | sed 's/ .*//'


для тех, кто использует адаптер компонентов C# Linq, вы можете использовать:

var t = new Table<T>(session);
var count = t.Count().Execute();

nodetool cfstats / grep-A 1000 KEYSPACE

замените KEYSPACE для получения сведений обо всех таблицах в этом KEYSPACE