Sumário

Search

  1. Prefácio
  2. Introdução às Transformações
  3. Portas de Transformação
  4. Caches de Transformação
  5. Transformação de Validador de Endereço
  6. Transformação de Agregador
  7. Transformação de Associação
  8. Transformação de Exceção de Registro Inválido
  9. Transformação de Conversor de Maiúsculas/Minúsculas
  10. Transformação de Classificador
  11. Transformação de Comparação
  12. Transformação de Consolidação
  13. Transformação de Mascaramento de Dados
  14. Transformação do Processador de Dados
  15. Transformação de Decisão
  16. Transformação de Exceção de Registro Duplicado
  17. Transformação de Expressão
  18. Transformação de Filtro
  19. Transformação Hierárquica para Relacional
  20. Transformação Java
  21. Referência da API da transformação Java
  22. Expressões Java
  23. Transformação de Associador
  24. Transformação de Gerador de Chaves
  25. Transformação de Rotulador
  26. Transformação de Pesquisa
  27. Caches de Pesquisa
  28. Cache de Pesquisa Dinâmica
  29. Transformação de Correspondência
  30. Transformações de Correspondência na Análise de Campos
  31. Transformações de Correspondência na Análise de Identidade
  32. Transformação Normalizador
  33. Transformação de Mesclagem
  34. Transformação de Analisador
  35. Transformação Python
  36. Transformação de Classificação
  37. Transformação de Leitura
  38. Transformação de Relacional para Hierárquica
  39. Transformação de Consumidor de Serviço da Web REST
  40. Transformação de Roteador
  41. Transformação de Gerador de Sequência
  42. Transformação de Ordenador
  43. Transformação SQL
  44. Transformação de Padronizador
  45. Transformação de União
  46. Transformação de Estratégia de Atualização
  47. Transformação de Consumidor de Serviço da Web
  48. Analisando Mensagens SOAP de Serviços da Web
  49. Gerando Mensagens SOAP de Serviços da Web
  50. Transformação de Média Ponderada
  51. Transformação de Janela
  52. Transformação de Gravação
  53. Delimitadores de Transformação

Guia de Transformação do Developer

Guia de Transformação do Developer

Otimização de Seleção Antecipada com a Transformação Java

Otimização de Seleção Antecipada com a Transformação Java

Você pode habilitar uma transformação Java ativa ou passiva para otimização com seleção antecipada quando essa transformação não tem efeitos colaterais. O otimizador transmite a lógica de filtro através da transformação Java e modifica a condição de filtro conforme necessário.
Para exibir os trechos de código para otimização com seleção antecipada, escolha PredicatePushOptimization no navegador da guia
Interfaces do Otimizador
.

allowPredicatePush

Booleano. Permite a seleção antecipada. Altere a função para retornar um resultado "true" e a mensagem para habilitar a seleção antecipada. O padrão é "false", e a função retorna uma mensagem informando que não há suporte para a otimização.
public ResultAndMessage allowPredicatePush(boolean ignoreOrderOfOp) { // To Enable PredicatePushOptimization, this function should return true //return new ResultAndMessage(true, ""); return new ResultAndMessage(false, "Predicate Push Optimization Is Not Supported"); }

canGenerateOutputFieldEvalError

Booleano. Indica se a transformação Java pode retornar um erro de campo de saída, como um erro de divisão por zero. Altere a função para retornar "false" se a transformação Java não gerar erros de campos de saída. Quando a transformação Java pode gerar erros de campo, o Data Integration Service não pode usar a otimização com seleção antecipada.
public boolean canGenerateOutputFieldEvalError() { // If this Java transformation can never generate an output field evaluation error, // return false. return true; }

getInputExpr

Retorna uma expressão da Informatica que descreve quais valores de entrada de campos de entrada formam um campo de saída. O otimizador precisa saber quais campos de entrada formam um campo de saída para enviar a lógica de filtro pela transformação.
public InfaExpression getInputExpr(TransformationField field, TransformationDataInterface group) { // This should return an Informatica expression for output fields in terms of input fields // We will only push predicate that use fields for which input expressions are defined. // For example, if you have two input fields in0 and in1 and three output fields out0, out1, out2 // out0 is the pass-through of in1, out2 is sum of in1 and in2, and out3 is unknown, the code should be: //if (field.getName().equals("out0")) // return new InfaExpression("in0", instance); //else if (field.getName().equals("out1")) // return new InfaExpression("in0 + in1", instance); //else if (field.getName().equals("out2")) // return null; return null; }
Por exemplo, um mapeamento contém uma expressão de filtro,
"out0 > 8
". Out0 é o valor da porta de saída out0 na transformação Java. Você pode definir o valor de out0 como o valor da porta de entrada in0 + 5. O otimizador pode enviar a seguinte expressão
"(in0 + 5) > 8"
após a transformação Java com otimização de seleção antecipada. Você poderá retornar NULL se um campo de saída não tiver uma expressão de campo. O otimizador não envia expressões de filtro após campos de saída sem uma expressão de entrada.
Você pode incluir o seguinte código:
if (field.getName().equals("out0")) return new InfaExpression("in0 + 5", instance); else if (field.getName().equals("out2")) return null;

inputGroupsPushPredicateTo

Retorna uma lista de grupos que podem receber a lógica de filtro. A transformação Java tem um grupo de entrada. Não modifique essa função para a transformação Java.
public List<TransformationDataInterface> inputGroupsPushPredicateTo( List<TransformationField> fields) { // This functions returns a list of input data interfaces to push predicates to. // Since JavaTx only has one input data interface, you should not have to modify this function AbstractTransformation tx = instance.getTransformation(); List<DataInterface> dis = tx.getDataInterfaces(); List<TransformationDataInterface> inputDIs = new ArrayList<TransformationDataInterface>(); for (DataInterface di : dis){ TransformationDataInterface tdi = (TransformationDataInterface) di; if (tdi.isInput()) inputDIs.add(tdi); } if(inputDIs.size() == 1) return inputDIs; else return null; }