Todos os produtos
Search
Central de documentação

PolarDB:Regras e melhores práticas para alterações de DDL

Última atualização: Aug 28, 2026

Ao executar operações DDL em tabelas source com search view ou procedimento armazenado ETL (sync_by_sql), cada tipo de alteração afeta o link de sincronização de forma distinta. Este tópico descreve o impacto de cada operação DDL e apresenta as melhores práticas para reconstrução quando necessário.

Impacto de DDL nas tabelas source

Para obter informações sobre operações DDL, consulte DDL operation guide for PolarDB for MySQL. A tabela a seguir descreve como operações DDL comuns em tabelas source afetam o link de sincronização.

Tipo de alteração

Operação

Status de sincronização

Descrição

Alterações de coluna

Excluir uma coluna

Normal

Os dados existentes mantêm os valores da coluna excluída. Nos dados incrementais, o valor do campo é null.

Adicionar uma coluna

Normal

A nova coluna não é adicionada automaticamente ao link de sincronização. Para adicioná-la, consulte AutoETL change practices.

Modificar o tipo de uma coluna

Depende do tipo

Tipos compatíveis (por exemplo, INT para TINYINT): os dados incrementais são sincronizados normalmente.

Tipos incompatíveis: o link fica indisponível. Reconstrua o link.

Renomear uma coluna

Interrompido

O link utiliza os nomes das colunas definidos na criação. Após a renomeação, o link não identifica a coluna renomeada na tabela source. Reconstrua o link.

Outras (reordenar colunas, modificar valores padrão, modificar comentários, estender tamanho de VARCHAR, modificar conjuntos de caracteres, modificar propriedades de incremento automático, modificar restrições NULL, etc.)

Normal

Essas operações não afetam a sincronização.

Alterações de índice

Adicionar, excluir ou modificar um índice secundário

Normal

Alterações em índices secundários não afetam a sincronização.

Excluir ou modificar o índice de chave primária

Interrompido

O link depende da chave primária da tabela source para sincronizar dados. Após alterar a chave primária, reconstrua o link.

Alterações de tabela

TRUNCATE TABLE

Interrompido

O link não detecta operações TRUNCATE. Para limpar os dados da tabela e sincronizar a alteração com o PolarSearch, use DELETE FROM.

RENAME TABLE

Interrompido

O link não reconhece o novo nome da tabela. A sincronização de dados incrementais é interrompida.

Outras (OPTIMIZE TABLE, modificar ROW_FORMAT, modificar KEY_BLOCK_SIZE, atualizar estatísticas, modificar conjunto de caracteres da tabela, modificar comentários da tabela, etc.)

Normal

Essas operações não afetam a sincronização.

Alterações em tabelas particionadas

Converter para tabela particionada, adicionar partição, mesclar partições, reparticionar, analisar partição, verificar partição, otimizar partição, reconstruir partição, converter para tabela não particionada, usar índices locais, etc.

Normal

Essas operações não afetam a sincronização.

DROP PARTITION, DROP TABLESPACE, TRUNCATE PARTITION

Interrompido

O link não detecta essas operações. Para excluir dados e sincronizar a alteração com o PolarSearch, use DELETE FROM.

EXCHANGE PARTITION, REPAIR PARTITION, IMPORT TABLESPACE

Interrompido

O link não detecta substituição direta de dados ou reparo em partições específicas. Outras partições permanecem inalteradas. Recomendamos reconstruir o link após essas operações.

Práticas para alterações no AutoETL

Ao alterar a estrutura de sincronização de uma search view ou de um procedimento armazenado ETL (por exemplo, adicionar campos de sincronização), determine primeiro se a alteração pode ser feita no local:

  • Se houver suporte para alterações no local, atualize diretamente a definição SQL da search view ou do procedimento armazenado ETL. A sincronização será retomada a partir do offset original, sem ressincronização completa.

  • Caso não haja suporte para alterações no local, reconstrua usando a abordagem "novo índice + novo link". Depois que a nova search view ou o novo procedimento armazenado ETL concluir a sincronização e a verificação dos dados, direcione o tráfego de consultas da aplicação para o novo índice.

Suporte a alterações no local

A tabela a seguir lista alterações comuns em search views ou procedimentos armazenados ETL e indica se há suporte para alterações no local.

Tipo de alteração

Cenário aplicável

Suporte a alteração no local

Descrição

Modificar parâmetros de execução

Sincronização de tabela única / Agregação de múltiplas tabelas

Sim

O ajuste de parâmetros para recursos de sincronização e concorrência não altera a semântica de computação. Há suporte para alterações no local.

Modificar condições de filtro WHERE

Sincronização de tabela única / Agregação de múltiplas tabelas

Sim

A modificação das condições de filtro não atualiza os dados existentes já sincronizados nos nós do PolarSearch. Para limpar os dados existentes, reconstrua o link.

Adicionar colunas de sincronização

Sincronização de tabela única

Sim

A nova coluna aplica-se apenas aos dados incrementais. Os dados históricos não são retroalimentados. Para retroalimentar todos os dados, reconstrua o link.

Remover colunas de sincronização

Sincronização de tabela única

Sim

As colunas removidas nos nós do PolarSearch deixam de ser atualizadas.

Modificar a chave primária dos índices do nó PolarSearch

Sincronização de tabela única / Agregação de múltiplas tabelas

Não. Reconstrução necessária.

A chave primária também funciona como ID do documento no PolarSearch. A alteração é incompatível.

Adicionar ou remover tabelas source de JOIN ou modificar o tipo de JOIN

Agregação de múltiplas tabelas

Não. Reconstrução necessária.

A estrutura de sincronização muda. É necessário recalcular tudo.

Adicionar ou remover GROUP BY ou funções de agregação

Agregação de múltiplas tabelas

Não. Reconstrução necessária.

A estrutura de agregação muda. Os resultados históricos de agregação não podem ser reutilizados.

Adicionar ou remover ramificações UNION / UNION ALL

Agregação de múltiplas tabelas

Não. Reconstrução necessária.

A estrutura de sincronização muda. É necessário recalcular tudo.

Converter entre sincronização de tabela única e agregação de múltiplas tabelas

Sincronização de tabela única / Agregação de múltiplas tabelas

Não. Reconstrução necessária.

A lógica de sincronização é totalmente alterada.

Alterar o tipo de dados da chave primária / chave de JOIN / colunas de agrupamento

Sincronização de tabela única / Agregação de múltiplas tabelas

Não. Reconstrução necessária.

Após a alteração do tipo de uma coluna chave, o estado de sincronização original não pode ser reutilizado.

Alterações no local

Modifique a lógica SQL no link existente e inicie-o utilizando o estado atual. Para mais informações, consulte Search views - Modify a search view e ETL stored procedures (sync_by_sql) - Modify a synchronization link.

  • Sintaxe da search view:

    ALTER SEARCH VIEW view_name UPDATE
      [WITH (option_list)]
      [TO (column_list, PRIMARY KEY (pk_column_list))]
      AS new_select_statement;
  • Sintaxe do procedimento armazenado ETL:

    SET esl_link_options = "<new_option_list>";
    -- If new_sync_sql is empty, the existing sync SQL is retained
    CALL dbms_etl.update_sync_link('<sync_id>', '<new_sync_sql>'); 

Alterações com "Novo índice + novo link"

A abordagem "novo índice + novo link" é o método de alteração mais versátil. O link reexamina os dados e os grava no nó do PolarSearch. Depois que a nova search view ou o novo procedimento armazenado ETL concluir a sincronização e a verificação dos dados, direcione o tráfego de consultas da aplicação para o novo índice.

Exemplo:

Adicione um campo à tabela shop.user e reconstrua a search view. Suponha que a search view original sincronize a tabela shop.user (com as colunas id, name, phone, gmt_create) para o índice user_v1. Adicione a coluna membership_level sem interromper as consultas online.

  1. Crie um novo índice: Crie um índice chamado user_v2 no nó do PolarSearch e inclua o novo campo membership_level em seu mapeamento.

    PUT user_v2
    {
      "mappings": {
        "properties": {
          "id":               { "type": "keyword" },
          "name":             { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
          "phone":            { "type": "keyword" },
          "gmt_create":       { "type": "date" },
          "membership_level": { "type": "integer" }
        }
      }
    }
  2. Modifique a tabela source: Adicione a nova coluna à tabela user no PolarDB for MySQL source.

    ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT 'Membership level';
  3. Crie uma nova search view: Crie uma search view para sincronizar dados da tabela shop.user para o índice user_v2.

    CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user;
  4. Verifique e faça a transição: Execute SHOW SEARCH VIEW STATUS para verificar o status da nova search view. Quando a latência de sincronização cair para aproximadamente 0 a 1 segundo, valide os dados no novo índice. Após a validação, direcione o tráfego de consultas da aplicação para o novo índice user_v2.

  5. Limpe os recursos antigos: Após a nova search view operar de forma estável, exclua a search view antiga e o índice user_v1.

    DROP SEARCH VIEW user_v1;