Движок таблицы CoalescingMergeTree
Этот движок таблицы доступен начиная с версии 25.6 как в OSS, так и в Cloud.
Этот движок наследуется от MergeTree. Ключевое отличие заключается в том, как сливаются части данных: для таблиц CoalescingMergeTree ClickHouse заменяет все строки с одинаковым первичным ключом (или, точнее, с одинаковым ключом сортировки) одной строкой, содержащей последние значения, отличные от NULL, для каждого столбца.
Это позволяет выполнять upsert-операции на уровне отдельных столбцов, то есть вы можете обновлять только отдельные столбцы, а не целые строки.
CoalescingMergeTree предназначен для использования с типами Nullable в неклю́чевых столбцах. Если столбцы не являются Nullable, поведение такое же, как у ReplacingMergeTree.
Создание таблицы
Описание параметров запроса см. в разделе описание запроса.
Параметры движка CoalescingMergeTree
Столбцы
columns — кортеж имен столбцов, значения в которых будут объединены. Необязательный параметр.
Столбцы должны иметь числовой тип и не должны входить в ключ партиционирования или сортировки.
Если columns не указан, ClickHouse объединяет значения во всех столбцах, которые не входят в ключ сортировки.
Части запроса
При создании таблицы CoalescingMergeTree требуются те же части запроса, что и при создании таблицы MergeTree.
Устаревший метод создания таблицы
Не используйте этот метод в новых проектах и, по возможности, переведите старые проекты на метод, описанный выше.
Все параметры, за исключением columns, имеют то же значение, что и в MergeTree.
columns— кортеж имен столбцов, значения которых будут суммироваться. Необязательный параметр. Описание см. в тексте выше.
Пример использования
Рассмотрим следующую таблицу:
Добавьте в неё данные:
Результат будет выглядеть так:
Рекомендуемый запрос для получения корректного итогового результата:
Использование модификатора FINAL указывает ClickHouse применять логику слияния на этапе выполнения запроса, гарантируя получение корректного, объединённого «последнего» значения для каждого столбца. Это самый безопасный и точный метод при выполнении запросов к таблице CoalescingMergeTree.
Подход с использованием GROUP BY может возвращать некорректные результаты, если части данных в таблице ещё не были полностью слиты.