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
.