Выбор ответа Senior ClickHouse и колоночные СУБД обновлено

JOIN в ClickHouse

Вопрос

Запрос SELECT ... FROM small_dict JOIN huge_events USING (id) упал по памяти. Что поправить в первую очередь?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Поменять стороны: хеш-таблица строится по правой, справа должна быть маленькая; или словари. Хеш-джойн загружает правую сторону в память.

Варианты ответа

  1. Увеличить index_granularity, чтобы при джойне читалось меньше гранул большой таблицы
  2. Добавить FINAL к обеим таблицам, чтобы убрать дубли до построения хеш-таблицы
  3. Перейти на ReplacingMergeTree, чтобы большая таблица занимала меньше памяти при построении джойна
  4. Поменять стороны: хеш-таблица строится по правой, справа должна быть маленькая; или словариправильный ответ

Разбор

Хеш-джойн загружает правую сторону в память. Огромная таблица справа не влезает. Классическое правило: большая слева, маленькая справа, а справочники через словари. Есть и другие алгоритмы джойна (например, с записью на диск), но это вторая линия. Гранулярность, FINAL и движок к проблеме не относятся.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.