«Отдельно» - обычная операция для ClickHouse?

Я хочу использовать ClickHouse для маркетинга. В большинстве случаев они хотят знать не просто, КАК многие люди используют ту или иную функцию, но и точные электронные письма, на которые следует рассылать спам. Является ли это хорошим выбором для использования ClickHouse для этой цели (выберите DISTINCT email from table where ...)? В чем разница в производительности между командами select COUNT и select DISTINCT?


person Eugene To    schedule 29.10.2018    source источник


Ответы (1)


Это хороший выбор, чтобы использовать ClickHouse для этой цели?

Да, в ClickHouse есть достойные реализации HashTable и Aggregator. Он широко использует шаблонный код для диспетчеризации статических типов и применяет множество уловок с памятью. И хранит данные в компактном виде.

Я предполагаю, что вы хотите сравнить select count и select count(distinct), поскольку select distinct другой зверь. ClickHouse преобразует count(distinct) в агрегатор uniqExact, который примерно в 8 раз медленнее, чем count(*), но все же намного быстрее традиционных баз данных, таких как Postgres. Существуют также приблизительные агрегаторы uniq, uniqCombined и uniqHLL12 для более быстрой оценки, что примерно в 1,5 раза медленнее, чем count(*). См. https://clickhouse.yandex/docs/en/query_language/agg_functions/reference/, если вам нужна дополнительная информация.

Если ваша цель - select distinct, ClickHouse все равно может с этим справиться, который использует структуру данных Set для унификации потоков данных (Set также используется для построения своей in (...) конструкции SQL). Без измерения процесса вывода данных он всего в 1,3 раза медленнее обычного count(*).

person Amos    schedule 30.10.2018