Как стать автором
Обновить

Как работать со словарями данных и оптимизировать запросы в ClickHouse

Время на прочтение11 мин
Количество просмотров5.7K
Всего голосов 9: ↑7 и ↓2+5
Комментарии3

Комментарии 3

Пробуем запрос....

снова получаем ошибку из-за ограничений памяти.

Пробуем запрос....

снова получаем ошибку из-за ограничений памяти.

Пробуем запрос....

снова получаем ошибку из-за ограничений памяти.

Как правильно обратиться к словарю, если нужно его использовать при фильтрации распределенной партицированной таблицы?

Например, есть таблица фактов с полями "id,a,b,value", которая партицирована по полям a,b. В словаре есть поля "id,a,b,name", где id - ключ.

Нужно извлечь значения из таблицы фактов при известном name.

В вашем случае нужно сделать две фильтрации. Сначала отобрать нужную партицию, после чего отфильтровать по id. Чтобы четко выбрать партицию, сделаем предфильтрацию. Если правильно вас поняли — партицией у вас является кортеж из полей a и b, поэтому будет использоваться виртуальный столбец _partition_value в секции prewhere.

PREWHERE _partition_value IN (select (a, b)
from dic
where name = :name_value)

Далее отфильтруем по id.

WHERE id IN (select id from dic where name = :name_value)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий