Решение для автоматического увеличения полей Clickhouse

Реализовано с помощью rowNumberInAllBlocks().

Ошибка автоматического приращения поля rowNumberInAllBlocks()

В таблицах, использующих механизм таблиц ReplacingMergeTree, rowNumberInAllBlocks() используется для увеличения идентификатора во время вставки. При распределении идентификатор будет увеличиваться в каждом кластере. Если слияние основано на идентификаторе, объем данных будет уменьшен вдвое.

Схема следующая:

Если вы вставите данные в новую таблицу и используете rowNumberInAllBlocks() для увеличения нового столбца atuo_id, вы обнаружите, что одно и то же значение atuo_id представляет собой повторение количества серверов кластера. Например, если в кластере три сервера кластере, то будет три приращения значения atuo_id, равного 1.

как показано на картинке:

Когда количество кластеров невелико, проблему можно решить следующими способами:

Способ 1. Измените обработчик таблицы, например MergeTree, но идентификатор останется таким же, как указано выше. Поскольку идентификатор не может быть обновлен, добавьте поле id_auto, но, в свою очередь, установите увеличение поля id_auto в локальной таблице с помощью rowNumberInAllBlocks(). , следует отметить одну вещь: делать это на сервере последовательно, и каждый раз, когда вы запускаете его, вам нужно смотреть на максимальное значение id_auto после последнего запуска и автоматически увеличивать его на это значение.

Способ 2. Вместо изменения обработчика таблиц используйте обработчик таблиц ReplacingMergeTree. Решение состоит в том, чтобы использовать локальные таблицы и вставить локальные таблицы, в которые должны быть вставлены таблицы. После каждой вставки определите максимальное значение идентификатора вставленной таблицы. и добавьте максимальное значение в таблице в rowNumberInAllBlocks().

рекомендация

отblog.csdn.net/qq_41110377/article/details/128634788