Table des matières

Search

  1. Préface
  2. Présentation du réglage des performances
  3. Optimisation de cible
  4. Optimisation de source
  5. Optimisation de transformation
  6. Optimisation du mappage
  7. Méthodes d'optimisation
  8. Optimisation du temps d'exécution
  9. Optimisation du service de données SQL
  10. Optimisation du service Web
  11. Optimisation des connexions

Guide de réglage des performances

Guide de réglage des performances

Optimisation de sélection précoce avec la transformation Java

Optimisation de sélection précoce avec la transformation Java

Vous pouvez activer une transformation Java active ou passive pour l'optimisation de sélection précoce si la transformation Java n'a pas d'effets secondaires. L'optimiseur transmet la logique de filtre via la transformation Java et modifie la condition de filtre comme requis.
Pour afficher les snippets de code pour l'optimisation de sélection précoce, choisissez PredicatePushOptimization dans le navigateur de l'onglet
Interfaces optimiseur
.

allowPredicatePush

Booléen. Active la sélection précoce. Modifiez la fonction pour qu'elle renvoie un résultat True et un message pour activer la sélection précoce. La valeur par défaut est False et la fonction renvoie un message comme quoi l'optimisation n'est pas prise en charge.
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

Booléen. Indique si la transformation Java peut renvoyer ou non une erreur de champ de sortie, telle qu'une erreur de division par zéro. Modifiez la fonction pour qu'elle renvoie False si la transformation Java ne génère pas d'erreurs de champ de sortie. Quand la transformation Java peut générer des erreurs de champ, le service d'intégration de données ne peut utiliser l'optimisation de sélection précoce.
public boolean canGenerateOutputFieldEvalError() { // If this Java transformation can never generate an output field evaluation error, // return false. return true; }

getInputExpr

Renvoie une expression Informatica qui décrit quelles sont les valeurs d'entrée des champs d'entrée qui comprennent un champ de sortie. L'optimiseur doit savoir quels sont les champs d'entrée qui comprennent un champ de sortie pour pousser la logique de filtre via la transformation.
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; }
Par exemple : un mappage contient l'expression de filtre
« out0 > 8
 ». Out0 est la valeur du port de sortie out0 dans la transformation Java. Vous pouvez définir la valeur de out0 en tant que valeur du port d'entrée in0 + 5. L'optimiseur peut pousser l'expression suivante
« (in0 + 5) > 8 »
après la transformation Java avec l'optimisation de sélection précoce. Vous pouvez renvoyer NULL si un champ de sortie n'a pas l'expression du champ d'entrée. L'optimiseur ne pousse pas les expressions de filtre après les champs de sortie sans expression d'entrée.
Vous pouvez inclure le code suivant :
if (field.getName().equals("out0")) return new InfaExpression("in0 + 5", instance); else if (field.getName().equals("out2")) return null;

inputGroupsPushPredicateTo

Renvoie une liste de groupes pouvant recevoir la logique de filtre. La transformation Java a un groupe d'entrée. Ne modifiez cette fonction de la transformation 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; }