Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Suporte à propagação de alterações de esquema

O ClickPipes para MySQL pode detectar alterações de esquema nas tabelas de origem e, em alguns casos, propagá-las automaticamente para as tabelas de destino. A forma como cada operação DDL é tratada está documentada abaixo:

Tipo de alteração de esquema Comportamento
Adição de uma nova coluna (ALTER TABLE ADD COLUMN ...) Propagada automaticamente. As novas colunas serão preenchidas em todas as linhas replicadas após a alteração de esquema
Adição de uma nova coluna com valor padrão (ALTER TABLE ADD COLUMN ... DEFAULT ...) Propagada automaticamente. Valores padrão compatíveis também são adicionados à coluna do ClickHouse, portanto, aplicam-se às linhas já existentes no ClickHouse e às linhas replicadas após a alteração de esquema.
Remoção de uma coluna existente (ALTER TABLE DROP COLUMN ...) Detectada, mas não propagada. As colunas removidas serão preenchidas com NULL em todas as linhas replicadas após a alteração de esquema

Valores padrão para colunas adicionadas

Para uma coluna adicionada, o ClickPipes propaga um valor padrão apenas quando consegue converter o valor com segurança para o ClickHouse. Quando um valor padrão é propagado, o ClickHouse o usa ao ler partes de dados anteriores à nova coluna. Como resultado, as linhas já presentes no ClickHouse recebem o valor padrão da origem sem uma atualização completa da tabela.

O ClickPipes propaga valores literais inteiros, decimais e de ponto flutuante; booleanos; valores simples de string e data; e valores enum ou set quando o servidor MySQL fornece metadados completos de linha do binlog. Ele reescreve literais de string usando delimitação compatível com o ClickHouse.

O ClickPipes omite intencionalmente valores padrão que não são literais portáveis, incluindo NULL, literais de bit, chamadas de função como CURRENT_TIMESTAMP, NOW() ou UUID(), e valores de string que contêm barras invertidas ou caracteres de controle. A coluna ainda é adicionada, mas o ClickHouse usa o valor padrão normal do tipo para partes anteriores à coluna. Uma atualização completa da tabela é necessária caso essas linhas existentes precisem conter o valor padrão da origem.

O ClickPipes propaga valores padrão somente como parte de ALTER TABLE ADD COLUMN. Operações posteriores que alteram ou removem um valor padrão de coluna não são propagadas para o ClickHouse.

Limitações do MySQL 5.x

Versões do MySQL anteriores à 8.0.1 não incluem metadados completos das colunas no binlog (binlog_row_metadata=FULL), então o ClickPipes rastreia as colunas pela posição ordinal. Isso significa:

  • Adicionar uma coluna no final (ALTER TABLE ADD COLUMN ...) é suportado.
  • Qualquer DDL que altere as posições das colunas fará com que o pipe gere um erro, porque as posições ordinais deixam de poder ser mapeadas com confiabilidade. Isso inclui:
    • ALTER TABLE DROP COLUMN ...
    • ALTER TABLE ADD COLUMN ... AFTER ... / FIRST
    • ALTER TABLE MODIFY COLUMN ... AFTER ... / FIRST
    • ALTER TABLE CHANGE COLUMN ... AFTER ... / FIRST

Se esse erro ocorrer, será necessário ressincronizar o pipe.

Navigation