count
Считывает количество строк или ненулевых значений.
ClickHouse поддерживает следующие синтаксисы для count
:
count(expr)
илиCOUNT(DISTINCT expr)
.count()
илиCOUNT(*)
. Синтаксисcount()
специфичен для ClickHouse.
Аргументы
Функция может принимать:
- Ноль параметров.
- Одно выражение.
Возвращаемое значение
- Если функция вызывается без параметров, то она считает количество строк.
- Если передано выражение, то функция подсчитывает, сколько раз это выражение вернуло ненулевое значение. Если выражение возвращает значение типа Nullable, то результат
count
остается неNullable
. Функция возвращает 0, если выражение возвращалоNULL
для всех строк.
В обоих случаях тип возвращаемого значения — UInt64.
Подробности
ClickHouse поддерживает синтаксис COUNT(DISTINCT ...)
. Поведение этой конструкции зависит от настройки count_distinct_implementation. Она определяет, какая из функций uniq* используется для выполнения операции. Значение по умолчанию — функция uniqExact.
Запрос SELECT count() FROM table
оптимизируется по умолчанию с использованием метаданных из MergeTree. Если вам необходимо использовать безопасность на уровне строк, отключите оптимизацию с помощью настройки optimize_trivial_count_query.
Тем не менее, запрос SELECT count(nullable_column) FROM table
можно оптимизировать, включив настройку optimize_functions_to_subcolumns. При optimize_functions_to_subcolumns = 1
функция читает только подстолбец null вместо чтения и обработки всех данных столбца. Запрос SELECT count(n) FROM table
преобразуется в SELECT sum(NOT n.null) FROM table
.
Улучшение производительности COUNT(DISTINCT expr)
Если ваш запрос COUNT(DISTINCT expr)
медленный, рассмотрите возможность добавления оператора GROUP BY
, так как это улучшает параллелизацию. Вы также можете использовать проекцию для создания индекса на целевом столбце, используемом с COUNT(DISTINCT target_col)
.
Примеры
Пример 1:
Пример 2:
Этот пример показывает, что count(DISTINCT num)
выполняется с помощью функции uniqExact
в соответствии с значением настройки count_distinct_implementation
.