Durante a configuração da tarefa, defina condições de filtro para sincronizar ou migrar apenas as linhas correspondentes aos seus critérios. Esse recurso é útil em cenários de sharding e na sincronização ou migração parcial de dados.
Pré-requisitos
Antes de começar, verifique se:
A tarefa está na fase Configure Objects. Para obter instruções sobre como acessar essa fase, consulte Visão geral da solução de sincronização e Visão geral da solução de migração.
Limitações
O sistema não oferece suporte a filtros de subconsulta complexos, como
COLUMN1 IN (SELECT id FROM table1).Se a tabela ou coleção de origem tiver duas colunas cujos nomes diferem apenas em maiúsculas e minúsculas, o filtro pode não produzir os resultados esperados.
Fontes Tair/Redis: filtre apenas por prefixo de chave.
Fontes MongoDB: há suporte para filtragem condicional apenas durante a sincronização ou migração completa, mas não durante a sincronização ou migração incremental.
Demais tipos de banco de dados de origem: se a condição de filtro exigir aspas, use aspas simples (
').Não termine uma condição de filtro com ponto e vírgula (
;), pois isso pode causar falha na tarefa.
Para fontes SQL Server, o filtro só entra em vigor quando o campo filtrado faz parte de um índice clusterizado. Caso contrário, a lógica de filtro não será aplicada.
Como funciona
O DTS aplica condições de filtro usando filtragem de pré-imagem: a avaliação do filtro considera o valor do campo antes da alteração, e não depois.
Quando uma operação UPDATE altera o valor de um campo filtrado de um estado que satisfaz a condição para outro que não a satisfaz, o DTS converte o UPDATE em um DELETE no banco de dados de destino.
Exemplo: Suponha que você configure a condição de filtro enabled = 1. Se um registro mudar de enabled = 1 para enabled = 0, o DTS processará a mudança da seguinte forma:
Excluir o registro onde
enabled = 1— como a pré-imagem satisfaz a condição, a exclusão é replicada para o destino.Inserir um novo registro onde
enabled = 0— como esse valor não satisfaz a condição, o registro não é sincronizado.
Para sincronizar tanto os registros com enabled = 0 quanto com enabled = 1, remova a condição de filtro e reinicie a sincronização.
Definir condições de filtro individualmente
-
Na fase Configure Objects, mova o objeto de destino para a área Selected Objects.
Selecione objetos na granularidade apropriada ao tipo do banco de dados de origem: granularidade de coleção para MongoDB , granularidade de Redis DB para Tair/Redis e granularidade de tabela para os demais tipos de banco de dados.
Clique com o botão direito do mouse no objeto de destino.
-
Na caixa de diálogo exibida, insira a condição de filtro. Para exemplos de sintaxe, consulte Instruções de exemplo.
Tair/Redis: Na caixa de diálogo Edit Schema, insira os Prefixes of Keys to Be Synchronized (lista de permissões) ou Prefixes of Keys to Be Filtered Out (lista de bloqueios).
MongoDB e demais tipos de banco de dados: Na caixa de diálogo Edit Table, insira as Filter Conditions.
Clique em OK.
Conclua a configuração restante da tarefa conforme solicitado.
Definir condições de filtro em lote
Na fase Configure Objects, mova os objetos de destino para a área Selected Objects.
No canto superior direito da área Selected Objects, clique em Batch Edit.
-
Na caixa Select Objects, selecione os objetos para os quais deseja definir condições de filtro.
Mantenha o valor padrão para Select Type .
-
Na área Select Editing Type, clique na aba Filter Conditions.
Para fontes Tair/Redis , clique na aba Prefixes of Keys to Be Synchronized/Filtered Out .
-
Selecione um modo de edição em Select Edit Mode:
Add: Mantém as condições de filtro existentes e adiciona novas.
Overwrite: Limpa as condições de filtro existentes e aplica novas.
-
Insira a condição de filtro. Para exemplos de sintaxe, consulte Instruções de exemplo.
Tair/Redis: Selecione Prefixes of Keys to Be Synchronized ou Prefixes of Keys to Be Filtered Out e insira os prefixos correspondentes.
MongoDB e demais tipos de banco de dados: Insira a condição de filtro na caixa de texto.
Clique em OK.
Conclua a configuração restante da tarefa conforme solicitado.
Instruções de exemplo
Fontes Tair/Redis
|
Cenário |
Onde inserir |
Exemplo |
Descrição |
|
Sincronizar um único prefixo |
Prefixes of Keys to Be Synchronized |
|
Sincroniza apenas chaves iniciadas com |
|
Excluir um único prefixo |
Prefixes of Keys to Be Filtered Out |
|
Exclui chaves iniciadas com |
|
Sincronizar vários prefixos |
Prefixes of Keys to Be Synchronized |
|
Sincroniza chaves iniciadas com |
|
Combinação de sincronização e exclusão |
Prefixes of Keys to Be Synchronized: |
— |
Sincroniza chaves iniciadas com |
Fontes MongoDB
As condições de filtro do MongoDB usam uma sintaxe diferente das cláusulas WHERE do SQL. Para mais informações, consulte Mapeamento de instruções SQL para MongoDB.
|
Cenário |
Exemplo |
Descrição |
|
Filtrar por intervalo de ID |
{"_id":{$gt:"user100844658590795**",$lte:"user101674868045948**"}} |
Sincroniza registros onde |
Outros tipos de banco de dados
O campo Filter Conditions aceita os seguintes operadores: =, !=, <, > e in.
Ao combinar várias condições, and une condições que devem ser todas verdadeiras; já or une condições em que pelo menos uma deve ser verdadeira. É possível misturar ambos os operadores em uma única expressão, conforme os exemplos abaixo.
Em caso de dúvidas sobre como escrever condições de filtro, verifique primeiro o FAQ .
|
Cenário |
Exemplo |
Descrição |
|
Filtrar por intervalo numérico |
|
Sincroniza linhas onde |
|
Filtrar por valores de string |
|
Sincroniza linhas onde |
|
Filtrar por data |
|
Sincroniza linhas criadas após 1º de janeiro de 2020 |
Para filtros baseados em tempo:
Não use formatos abreviados como
create_time>'2020'.O DTS avalia condições de tempo no fuso horário GMT+8. Se seus dados de origem incluírem informações de fuso horário, converta o valor para GMT+8 antes de inseri-lo em Filter Conditions.
Tipos de campo suportados
Somente campos cujos tipos de dados constam na tabela a seguir podem ser usados em condições de filtro. Se o tipo de um campo não estiver listado para o seu banco de dados, a condição de filtro não se aplicará a ele.
|
Banco de dados |
Tipos de dados suportados |
|
PostgreSQL |
CHAR, BIGINT, SMALLINT, INTEGER, FLOAT4, FLOAT8, VARCHAR, DATE, TIMESTAMP, NUMERIC |
|
Oracle |
VARCHAR2, NVARCHAR2, NUMBER, DATE, ROWID, CHAR, BINARY_FLOAT, BINARY_DOUBLE, CLOB, NCLOB, TIMESTAMP, TIMESTAMP WITH TIME ZONE, UROWID |
|
MySQL |
DECIMAL, INTEGER, BIGINT, FLOAT4, DOUBLE, DATE, TIME, DATETIME, YEAR, VARCHAR |
|
SQL Server |
NCHAR, DATE, TIME, DATETIME2, TINYINT, SMALLINT, INT, SMALLDATETIME, REAL, DECIMAL, DATETIME, FLOAT, BIT, NUMERIC, BIGINT, VARCHAR, CHAR, TIMESTAMP, NVARCHAR, MONEY, SMALLMONEY, UNIQUEIDENTIFIER |
|
DB2 LUW |
SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, FLOAT, DOUBLE, DECFLOAT, CHAR, CHARACTER, VARCHAR, GRAPHIC, NCHAR, VARGRAPHIC, NVARCHAR, DATE, TIME, TIMESTAMP, BLOB, CLOB, DBCLOB, LONG VARG, LONG VARCHAR, LONG VARGRAPHIC, BINARY, VARBINARY, XML |
|
DB2 AS400 |
BIGINT, INTEGER, SMALLINT, DECIMAL, NUMERIC, FLOAT, DECFLOAT, CHAR, VARCHAR, NCHAR, BINARY, DATE, TIME, TIMESTAMP, XML |
Próximos passos
Visualize condições de filtro
Tarefa ainda não iniciada: Acesse a fase Configure Objects and Advanced Settings. Na área Selected Objects, expanda o objeto de sincronização ou migração, clique com o botão direito do mouse no objeto de destino e visualize as Filter Conditions.
Tarefa já em execução: Use o recurso Create Similar Task ou Modificar objetos de sincronização para acessar a fase Configure Objects and Advanced Settings. Expanda o objeto na área Selected Objects, clique com o botão direito do mouse no destino e visualize as Filter Conditions. Cancele a tarefa após a visualização, pois nenhuma ação adicional é necessária. Para mais informações, consulte Criar tarefa semelhante.
Modifique condições de filtro
Tarefa ainda não iniciada: Acesse a fase Configure Objects and Advanced Settings. Na área Selected Objects, expanda o objeto, clique com o botão direito do mouse no destino e edite as Filter Conditions.
-
Tarefa já em execução:
Tarefa de migração: Não há suporte para modificação de condições de filtro. Reconfigure a tarefa.
Tarefa de sincronização: Use o recurso Modificar objetos de sincronização para acessar a fase Configure Objects and Advanced Settings. Expanda o objeto de sincronização na área Selected Objects, clique com o botão direito do mouse no destino, modifique as Filter Conditions e conclua a configuração restante conforme solicitado.
Solução de problemas
Se uma condição de filtro for inválida, a tarefa poderá falhar com um dos seguintes erros.
A expressão regular (.*)? nas mensagens de erro representa uma variável.
|
Código de erro |
Mensagem de erro |
Causa |
|
DTS-RETRY-ERR-0070 |
In process of processing data (.)? failed (.)? Syntax error in SQL statement |
O formato do campo de filtro para o objeto de sincronização é inválido. |
|
DTS-RETRY-ERR-0145 |
Unknown column (.*)? in |
O campo especificado na condição de filtro não existe no banco de dados de origem. |
|
DTS-RETRY-ERR-0147 |
You have an error in your SQL syntax |
O campo especificado na condição de filtro não existe no banco de dados de origem. |
|
DTS-RETRY-ERR-0188 |
null value in column (.*)? violates not-null constraint |
Uma coluna NOT NULL no destino foi filtrada ou o valor da coluna de origem correspondente está ausente. |
|
DTS-RETRY-ERR-0276 |
if (.*)? is specified it must not be empty |
O valor mapeado para a coluna |
FAQ
Por que minha condição de filtro não entrou em vigor?
As causas mais comuns são expressão de filtro inválida e uso de filtro em tarefa incremental do MongoDB, que não aceita condições de filtro. Verifique se sua expressão usa apenas operadores e tipos de campo suportados e confirme se sua tarefa não é exclusivamente incremental do MongoDB.
Quais dados uma condição de filtro modificada afeta?
Depende do status da tarefa:
Tarefa ainda não iniciada: Para fontes MongoDB, a alteração entra em vigor apenas durante a fase de sincronização completa. Para todos os outros tipos de origem, ela vale tanto para as fases completa quanto incremental.
Tarefa já em execução: Para fontes MongoDB, as alterações não surtem efeito, pois não há suporte para modificação de condições de filtro. Para todos os outros tipos de origem, a alteração afeta apenas dados incrementais.
Posso filtrar dados correspondentes e sincronizar ou migrar todo o resto?
Fontes Tair/Redis: Sim. Insira os prefixos de chave que deseja excluir em Prefixes of Keys to Be Filtered Out.
Todos os outros tipos de origem: Não — o DTS não oferece suporte a filtros baseados em exclusão para esses bancos de dados. Em vez disso, escreva a condição inversa. Por exemplo, para excluir linhas onde
age = 25, insiraage > 25 or age < 25.
Como filtro por vários prefixos de chave?
Separe os prefixos com vírgulas (,).
Posso usar Prefixes of Keys to Be Synchronized e Prefixes of Keys to Be Filtered Out simultaneamente?
Sim. Ambas as regras se aplicam ao mesmo tempo. O DTS sincroniza chaves correspondentes aos prefixos de sincronização e, em seguida, exclui quaisquer dessas que também correspondam aos prefixos filtrados.
Posso chamar uma API em uma condição de filtro?
Não.
Referência de API
|
Operação de API |
Descrição |
|
Configura uma tarefa de migração ou sincronização do DTS. Defina o parâmetro |