Especifique uma condição SQL ao configurar o objeto da tarefa para sincronizar ou migrar apenas os dados que atendem à condição. Este recurso aplica-se a cenários de sincronização periódica de dados, migração e divisão de tabelas.
Pré-requisitos
Você iniciou a configuração de uma tarefa e chegou à etapa Configure Objects and Advanced Settings. Para iniciar a configuração de uma tarefa, siga Configure a data synchronization task (new console).
Limitações
-
Não há suporte para instruções de filtro complexas. Por exemplo,
COLUMN1 IN (SELECT id FROM table1).OLUMN1 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, a tarefa de filtro pode não atingir o resultado esperado.
o columns whose names differ only in case, the filter task may fail to achieve the expected result.
-
Quando o tipo do banco de dados de origem é Tair/Redis, há suporte somente para filtro de chaves baseado em prefixo.
, only prefix-based key filtering is supported.
-
Quando o tipo do banco de dados de origem é MongoDB, somente tarefas de sincronização ou migração completa aceitam filtragem condicional. Não há suporte para sincronização ou migração incremental.
synchronization or migration tasks support conditional filtering. Incremental synchronization or migration is not supported.
-
Quando o tipo do banco de dados de origem é diferente de Tair/Redis e MongoDB, use aspas simples (') caso a condição de filtro exija aspas.
833fe828ef">, if the filter condition requires quotation marks, use single quotation marks (').
-
Não adicione ponto e vírgula (;) ao final de uma condição de filtro. Caso contrário, a tarefa pode falhar.
end of a filter condition. Otherwise, the task may fail.
-
Se uma operação UPDATE ocorrer no banco de dados de origem e atender a condições específicas (o valor anterior à alteração atende à condição de filtro, mas o valor posterior não), o DTS converte a instrução UPDATE em uma instrução DELETE por padrão e a executa no banco de dados de destino.
ImportanteEm uma instância do DTS cujo banco de dados de origem é SQL Server, se o campo de filtro não for uma coluna de índice clusterizado, a lógica de filtro não terá efeito.
-
O mecanismo de filtro do DTS é de pré-filtragem. Se o valor do campo de filtro configurado for alterado, a filtragem ocorre com base no valor anterior à alteração.
Exemplo: suponha que você configurou a condição de filtro
enabled = 1. O DTS sincroniza apenas dados que atendem a essa condição. Se o campo de dadosenabled = 1for modificado paraenabled = 0, o sistema considera essa operação como primeiro excluir o dadoenabled = 1e depois gravar o dadoenabled = 0. Como a operação anterior atende à condição de filtro, o dado é excluído; porém, o dado subsequente não é sincronizado, pois não atende à condição de filtro. Se precisar sincronizar dados deenabled = 0eenabled = 1, remova a condição de filtro e faça a ressincronização.
Procedimento
O método de configuração das condições de filtro depende do tipo do banco de dados de origem. Ele se divide em três categorias: Tair/Redis, MongoDB e outros tipos de banco de dados.
Configure condições de filtro para objetos individuais
-
Na etapa Configure Objects, mova os objetos da tarefa para a área Selected Objects.
NotaQuando o tipo do banco de dados de origem é MongoDB, a granularidade dos objetos da tarefa deve ser no nível da coleção. Se for Tair/Redis, a granularidade deve ser no nível do Redis DB. Para os demais tipos, a granularidade deve ser no nível da tabela.
Clique com o botão direito no objeto de destino.
-
Na caixa de diálogo exibida, insira a condição de filtro.
Quando o tipo do banco de dados de origem é Tair/Redis: na caixa de diálogo Edit Schema exibida, insira Prefixes of Keys to Be Synchronized (lista de permissões) ou Prefixes of Keys to Be Filtered Out (lista de bloqueios).
Quando o tipo do banco de dados de origem é MongoDB: na caixa de diálogo Edit Table exibida, insira Filter Conditions.
Para os demais tipos de banco de dados de origem: na caixa de diálogo Edit Table exibida, insira Filter Conditions.
NotaPara obter informações sobre a sintaxe das condições de filtro, consulte Sample statements.
Após concluir as configurações, clique em OK.
Siga as instruções para concluir a configuração subsequente da tarefa.
Configure condições de filtro em lote
Na etapa Configure Objects, mova os objetos da tarefa para a área Selected Objects.
No canto superior direito da área Selected Objects, clique em Batch Edit.
-
Na caixa Select Objects, selecione os objetos a serem editados (para definir condições de filtro por prefixo).
NotaMantenha o valor padrão em Select Type.
-
Na área Select Editing Type, clique na aba Filter Conditions.
NotaSe o tipo do banco de dados de origem for Tair/Redis, clique na aba Prefixes of Keys to Be Synchronized/Filtered Out.
-
Selecione Select Edit Mode.
Add: mantém as condições de filtro existentes da tarefa atual e adiciona novas condições de filtro.
Overwrite: remove as condições de filtro existentes da tarefa atual e aplica as novas condições de filtro.
-
Configure as condições de filtro.
Quando o tipo do banco de dados de origem é Tair/Redis: conforme o cenário real, selecione Prefixes of Keys to Be Synchronized ou Prefixes of Keys to Be Filtered Out e insira o prefixo correspondente.
Quando o tipo do banco de dados de origem é MongoDB: na caixa de texto, insira a condição de filtro.
Para os demais tipos de banco de dados de origem: na caixa de texto, insira a condição de filtro.
NotaPara obter informações sobre a sintaxe das condições de filtro, consulte Sample statements.
Após concluir as configurações, clique em OK.
Siga as instruções para concluir a configuração subsequente da tarefa.
Exemplos de instruções
O tipo do banco de dados de origem é Tair/Redis
|
Tipo de filtro |
Exemplo de instrução |
Descrição |
|
Sincronizar um único prefixo |
Insira em Prefixes of Keys to Be Synchronized: |
Sincroniza para o destino apenas os dados cujas chaves começam com |
|
Filtrar um único prefixo |
Insira em Prefixes of Keys to Be Filtered Out: |
Descarta os dados cujas chaves começam com |
|
Sincronizar múltiplos prefixos |
Insira em Prefixes of Keys to Be Synchronized: |
Sincroniza para o destino apenas os dados cujas chaves começam com |
|
Combinar sincronização e filtragem |
Insira em Prefixes of Keys to Be Synchronized: Insira em Prefixes of Keys to Be Filtered Out: |
Sincroniza para o destino apenas os dados cujas chaves começam com |
O tipo do banco de dados de origem é Prefixes of Keys to Be Synchronized
|
Tipo de filtro |
Exemplo de instrução |
Descrição |
|
Outros |
|
Filtra pelo ID do usuário, em que |
O banco de dados de origem é de outros tipos
Prefixes of Keys to Be Filtered Out aceita os seguintes operadores:
=,!=,<,>ein.Em caso de dúvidas ao inserir as condições de filtro, consulte primeiro FAQ.
Exemplos de instruções
Tipo de filtro | Exemplo de instrução | Descrição |
Numérico |
| Sincroniza ou migra apenas os dados cujo campo |
String |
| Sincroniza ou migra apenas os dados cujo campo |
Tempo |
| Sincroniza ou migra apenas os dados criados após 2020. Importante
|
Tipos suportados
|
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 |
Operações subsequentes
-
Visualize as instruções de filtro
A tarefa atual ainda não foi configurada: retorne à etapa Filter Conditions. Na área Filter Conditions, expanda os objetos a sincronizar ou migrar e clique com o botão direito no objeto de destino para visualizar as Configure Objects and Advanced Settings.
A tarefa atual está configurada e em execução: use o recurso Create Similar Task ou Modify Sync Objects para acessar a etapa Selected Objects. Na área Filter Conditions, expanda os objetos a sincronizar ou migrar e clique com o botão direito no objeto de destino para visualizar as Configure Objects and Advanced Settings (após a visualização, cancele a tarefa; não é necessário prosseguir). Para mais informações, consulte Create a similar job e Modify synchronization objects.
-
Modifique as instruções de filtro
A tarefa atual ainda não foi configurada: retorne à etapa Selected Objects. Na área Filter Conditions, expanda os objetos a sincronizar ou migrar e clique com o botão direito no objeto de destino para modificar as Configure Objects and Advanced Settings.
-
A tarefa atual está configurada e em execução:
Tarefa de migração: tarefas de migração não permitem modificar as condições de filtro. É necessário reconfigurar a tarefa.
Tarefa de sincronização: use o recurso Modify Sync Objects para acessar a etapa Selected Objects. Na área Filter Conditions, expanda os objetos a sincronizar e clique com o botão direito no objeto de destino para modificar as Configure Objects and Advanced Settings. Em seguida, siga as instruções para concluir a configuração subsequente da tarefa. Para mais informações, consulte Modify synchronization objects.
Erros comuns
Se a condição de filtro inserida estiver incorreta, a tarefa pode retornar os erros a seguir. Corrija os erros com base na mensagem de erro específica e em Follow-up operations.
A expressão regular ((.*)?) na mensagem de erro representa uma variável.
|
Código de erro |
Mensagem de erro |
Descrição |
|
DTS-RETRY-ERR-0070 |
In process of processing data (.)? failed (.)? Syntax error in SQL statement |
O formato do campo de filtro configurado para o objeto de sincronização está incorreto. |
|
DTS-RETRY-ERR-0145 |
Unknown column (.*)? in |
O campo definido na condição de filtro da tarefa atual não existe no banco de dados de origem. |
|
DTS-RETRY-ERR-0147 |
You have an error in your SQL syntax |
O campo definido na condição de filtro da tarefa atual não existe no banco de dados de origem. |
|
DTS-RETRY-ERR-0188 |
null value in column (.*)? violates not-null constraint |
Uma coluna com restrição NOT NULL no destino foi filtrada, ou a origem não possui o valor de coluna correspondente. |
|
DTS-RETRY-ERR-0276 |
if (.*)? is specified it must not be empty |
O valor mapeado para a coluna |
Perguntas frequentes
-
Por que a condição de filtro que inseri não tem efeito?
A instrução da condição de filtro está incorreta, ou a tarefa atual é uma tarefa incremental com banco de dados de origem MongoDB (que não aceita condições de filtro).
-
Qual é o escopo de aplicação após modificar uma condição de filtro?
A tarefa atual ainda não foi configurada: quando o banco de dados de origem é MongoDB, as condições de filtro têm efeito apenas na fase completa da tarefa. Nos demais tipos de banco de dados de origem, as condições de filtro têm efeito tanto na fase completa quanto na fase incremental.
A tarefa atual está configurada e em execução: quando o banco de dados de origem é MongoDB, as condições de filtro não têm efeito (não suportado). Nos demais tipos de banco de dados de origem, as condições de filtro têm efeito apenas para dados incrementais.
-
O DTS permite filtrar os dados que atendem a certas condições e sincronizar ou migrar os dados restantes para o destino?
Quando o tipo do banco de dados de origem é Selected Objects: sim. Insira em Filter Conditions para filtrar as chaves que atendem às condições.
Nos demais tipos de banco de dados de origem: não. Defina a condição de filtro oposta para atender aos seus requisitos. Por exemplo, se precisar filtrar os dados cujo campo
ageseja 25, insiraage > 25 or age < 25em Tair/Redis.
-
Como inserir uma condição de filtro quando há várias chaves a filtrar?
Use vírgulas (,) como separadores.
-
É possível inserir Prefixes of Keys to Be Filtered Out e Filter Conditions ao mesmo tempo?
Sim. Tanto as regras de sincronização quanto as de filtro aplicadas às chaves têm efeito.
-
As condições de filtro aceitam chamadas de API?
Não.
APIs relacionadas
|
API |
Descrição |
|
Configure uma tarefa de migração ou sincronização do DTS e defina o parâmetro |