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 .../FIRSTALTER TABLE MODIFY COLUMN ... AFTER .../FIRSTALTER TABLE CHANGE COLUMN ... AFTER .../FIRST
Если вы столкнулись с этой ошибкой, потребуется повторно синхронизировать пайп.