Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Поддержка распространения изменений схемы

ClickPipes для MySQL может обнаруживать изменения схемы в исходных таблицах и в некоторых случаях автоматически применять эти изменения к целевым таблицам. Ниже описано, как обрабатывается каждая DDL-операция:

Тип изменения схемы Поведение
Добавление нового столбца (ALTER TABLE ADD COLUMN ...) Применяется автоматически. Новые столбцы будут заполняться для всех строк, реплицированных после изменения схемы
Добавление нового столбца со значением по умолчанию (ALTER TABLE ADD COLUMN ... DEFAULT ...) Применяется автоматически. Поддерживаемые значения по умолчанию также добавляются в столбец ClickHouse, поэтому они применяются как к строкам, уже находящимся в ClickHouse, так и к строкам, реплицированным после изменения схемы.
Удаление существующего столбца (ALTER TABLE DROP COLUMN ...) Обнаруживается, но не применяется. Для всех строк, реплицированных после изменения схемы, в удалённых столбцах будет значение NULL

Значения по умолчанию для добавленных столбцов

Для добавленного столбца ClickPipes передаёт значение по умолчанию только в том случае, если может безопасно преобразовать его в формат ClickHouse. Если значение по умолчанию передано, ClickHouse использует его при чтении частей данных, созданных до добавления нового столбца. В результате строки, уже имеющиеся в ClickHouse, получают исходное значение по умолчанию без полного обновления таблицы.

ClickPipes передаёт целочисленные, десятичные и литералы с плавающей точкой; булевы значения; простые строковые значения и значения дат; а также значения enum или set, если сервер MySQL предоставляет полные метаданные строк binlog. Строковые литералы преобразуются с использованием совместимого с ClickHouse заключения в кавычки.

ClickPipes намеренно не передаёт значения по умолчанию, которые не являются переносимыми литералами, включая NULL, битовые литералы, вызовы функций, такие как CURRENT_TIMESTAMP, NOW() или UUID(), а также строковые значения, содержащие обратную косую черту или управляющие символы. Столбец всё равно добавляется, но ClickHouse использует стандартное значение по умолчанию для его типа в частях, созданных до добавления столбца. Если эти существующие строки должны содержать исходное значение по умолчанию, необходимо полное обновление таблицы.

ClickPipes передаёт значения по умолчанию только в рамках ALTER TABLE ADD COLUMN. Последующие операции, изменяющие или удаляющие значение по умолчанию для столбца, не передаются в ClickHouse.

Ограничения MySQL 5.x

Версии MySQL ниже 8.0.1 не включают полные метаданные столбцов в binlog (binlog_row_metadata=FULL), поэтому ClickPipes отслеживает столбцы по их порядковым позициям. Это означает следующее:

  • Добавление столбца в конец (ALTER TABLE ADD COLUMN ...) поддерживается.
  • Любая DDL-операция, меняющая позиции столбцов, приведёт к ошибке в пайпе, поскольку порядковые позиции больше нельзя надёжно сопоставить. Сюда относятся:
    • ALTER TABLE DROP COLUMN ...
    • ALTER TABLE ADD COLUMN ... AFTER ... / FIRST
    • ALTER TABLE MODIFY COLUMN ... AFTER ... / FIRST
    • ALTER TABLE CHANGE COLUMN ... AFTER ... / FIRST

Если вы столкнулись с этой ошибкой, потребуется повторно синхронизировать пайп.

Navigation