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 é |
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, 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 |
| Interrompido | O link não detecta operações |
| Interrompido | O link não reconhece o novo nome da tabela. A sincronização de dados incrementais é interrompida. | |
Outras ( | 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. |
| Interrompido | O link não detecta essas operações. Para excluir dados e sincronizar a alteração com o PolarSearch, use | |
| 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 |
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 |
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 |
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 |
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 |
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.
-
Crie um novo índice: Crie um índice chamado
user_v2no nó do PolarSearch e inclua o novo campomembership_levelem 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" } } } } -
Modifique a tabela source: Adicione a nova coluna à tabela
userno PolarDB for MySQL source.ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT 'Membership level'; -
Crie uma nova search view: Crie uma search view para sincronizar dados da tabela
shop.userpara o índiceuser_v2.CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user; Verifique e faça a transição: Execute
SHOW SEARCH VIEW STATUSpara 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 índiceuser_v2.-
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;