Size: a a a

ClickHouse не тормозит

2021 February 26

V

Vadim in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
да 100% баг в драйвере
похоже на то.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Vadim
похоже на то.
я просто иногда там дописываю кусочки, там все на отвали сделано
источник

AK

Andrew Kochen in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
зачем? В курсе что можно во вью подсунуть параметр из сессии?
Нет, не в курсе.
Но, скорее, хочется подсунуть ограничение из запроса
Например, в запросе есть WHERE service = 'SERVICE_1', а хочется по вьюхе подставить AND version GLOBAL IN (select max(version) from ...  where service = 'SERVICE_1')
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
Paul ❌ Loyd
Тогда можно что-то вроде OK = (user_id, timestamp)
Масштабировать на кластер по user_id % X или консистентное хеширование
Ещё можно data skipping index bloom_filter завести на id кампании, если надо искать на большие промежутки, но с ограничением по кампаниям
источник

S

Slach in ClickHouse не тормозит
enclaved
А есть какой-нибудь конкретный профиль использования этих пропускающих индексов? У меня задача: ускорить обычные агрегирующие запросы к таблице с сырыми данными (лог событий), когда WHERE в запросе не имеет полей из ПК таблицы
ну IMHO
тут очень сильно зависит от того как  данные в ваших столбцах по которым вы пытаетесь data skip index
размыты по разным system.parts

data skip означает
что при сканировании парт сначала проверяется что искомые значения ОТСУТСТВУЮТ в конкретном парт
если есть вероятность что они есть. то идет обычное сканирование парта...

то есть data skip index помогут если условия фильтрации по запросам данные локализованы именно в рамках 1-нескольких партов
а если у вас user=1 на половине таблицы, то не помогут
источник

e

enclaved in ClickHouse не тормозит
Paul ❌ Loyd
Тогда можно что-то вроде OK = (user_id, timestamp)
Масштабировать на кластер по user_id % X или консистентное хеширование
Вообще без id кампаний в OK? Бывают сравнительно часто запросы данных по конкретным кампаниям, то есть WHERE id юзера AND id кампании
источник

e

enclaved in ClickHouse не тормозит
Думаю, это второй по частоте кейс
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
enclaved
Вообще без id кампаний в OK? Бывают сравнительно часто запросы данных по конкретным кампаниям, то есть WHERE id юзера AND id кампании
Тут пробовать надо. Либо с bloom_filter индексом дополнительно, что такие запросы может ускорить, либо уже полноценная отдельная MV с сортировкой по кампании.

Промежуточные варианты с toStartOfHour, как @den_crane выше предлагал это промежуточные по скорости варианты для обоих запросов.
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
Основная идея так данные расположить, чтобы при чтении все нужные шли друг за другом кластеризованно
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
bloom_filter сам по себе тормоз, если надо быстро, 1 сек или меньше то bloom_filter не подходит
источник

e

enclaved in ClickHouse не тормозит
Есть и экзотические запросы: WHERE с разными комбинациями атрибутов, которых пара десятков. Вот их я сейчас имею в индексах с bloom_filter
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
bloom_filter сам по себе тормоз, если надо быстро, 1 сек или меньше то bloom_filter не подходит
У меня наоборот положительный опыт с bloom_filter, особенно после грубой фильтрации по времени. Но зависит от скластеризованности, конечно
источник

e

enclaved in ClickHouse не тормозит
Идею с ОК понял, спасибо.
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
enclaved
Есть и экзотические запросы: WHERE с разными комбинациями атрибутов, которых пара десятков. Вот их я сейчас имею в индексах с bloom_filter
Тут главное это фильтрация по времени, это большую часть времени сократит. А дальше уже играться bloom/set/toStartOf*. Интересно бы даже сравнить все эти варианты и найти оптимальную точку по парето
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Andrew Kochen
Нет, не в курсе.
Но, скорее, хочется подсунуть ограничение из запроса
Например, в запросе есть WHERE service = 'SERVICE_1', а хочется по вьюхе подставить AND version GLOBAL IN (select max(version) from ...  where service = 'SERVICE_1')
и каким образом у вас 2000 тыс вью получается?
источник

AK

Andrew Kochen in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
и каким образом у вас 2000 тыс вью получается?
Сервисов 2000
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
Andrew Kochen
Сервисов 2000
А точно надо через вьюхи решать? Можно через права решить, например
источник

PL

Paul ❌ Loyd in ClickHouse не тормозит
Ведь как я понял, нужно фильтрацию добавить
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Andrew Kochen
Сервисов 2000
так вот можно подпихнуть

select .. from view settings myParam='SERVICE_1'
источник

AK

Andrew Kochen in ClickHouse не тормозит
Paul ❌ Loyd
А точно надо через вьюхи решать? Можно через права решить, например
тут дело не в ограничении прав, а в "экзотическом" условии на фильтрацию)
`AND version GLOBAL IN (select max(version) from ...  where service = 'SERVICE_1')`
источник