Índice

Search

  1. Prólogo
  2. Introducción a las transformaciones
  3. Puertos de transformación
  4. Memorias caché de transformaciones
  5. Transformación del validador de direcciones
  6. Transformación de agregación
  7. Transformación de asociación
  8. Transformación de excepción de registros incorrectos
  9. Transformación de conversión de mayúsculas y minúsculas
  10. Transformación de clasificador
  11. Transformación de comparación
  12. Transformación de consolidación
  13. Transformación de enmascaramiento de datos
  14. Transformación del Procesador de datos
  15. Transformación de decisión
  16. Transformación de excepción de registros duplicados
  17. Transformación de expresión
  18. Transformación de filtro
  19. Transformación de jerárquica a relacional
  20. Transformación de Java
  21. Referencia API de transformación de Java
  22. Expresiones de Java
  23. Transformación de incorporación
  24. Transformación de generador de claves
  25. Transformación de etiquetador
  26. Transformación de búsqueda
  27. Memorias caché de búsqueda
  28. Memoria caché de búsqueda dinámica
  29. Transformación de coincidencia
  30. Transformaciones de coincidencia en el análisis de campos
  31. Transformaciones de coincidencia en el análisis de identidad
  32. Transformación de normalizador
  33. Transformación de fusión
  34. Transformación de analizador
  35. Transformación de Python
  36. Transformación de rango
  37. Transformación de lectura
  38. Transformación de relacional a jerárquica
  39. Transformación de consumidor de servicio web REST
  40. Transformación de enrutador
  41. Transformación de generador de secuencia
  42. Transformación de ordenación
  43. Transformación de SQL
  44. Transformación de estandarizador
  45. Transformación de unión
  46. Transformación de estrategia de actualización
  47. Transformación de consumidor de servicio web
  48. Análisis de mensajes SOAP del servicio web
  49. Generación de mensajes SOAP del servicio web
  50. Transformación de media ponderada
  51. Transformación de ventana
  52. Transformación de escritura
  53. Delimitadores de transformación

Guía de transformaciones de Developer

Guía de transformaciones de Developer

Optimización de primera selección con la transformación de Java

Optimización de primera selección con la transformación de Java

Puede habilitar una transformación de Java activa o pasiva para la optimización de primera selección si la transformación Java no tiene ningún efecto secundario. El optimizador pasa la lógica de filtro a través de la transformación de Java y modifica la condición de filtro según sea necesario.
Para ver los fragmentos de código para la optimización de primera selección, seleccione PredicatePushOptimization en el navegador de la ficha
Interfaces del optimizador
.

allowPredicatePush

Booleano. Habilita la primera selección. Cambie la función para devolver un resultado TRUE y el mensaje para poder habilitar la primera selección. El valor predeterminado es FALSE y la función devuelve un mensaje que no es compatible con la optimización.
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 si la transformación de Java puede devolver o no un error de campo de salida, tal como un error de dividir por cero. Cambie la función devolver un resultado FALSE si la transformación de Java no genera errores del campo de salida. Cuando la transformación de Java puede generar errores de campos, el servicio de integración de datos no puede utilizar la optimización de primera selección.
public boolean canGenerateOutputFieldEvalError() { // If this Java transformation can never generate an output field evaluation error, // return false. return true; }

getInputExpr

Devuelve una expresión de Informatica que describe qué valores de entrada de los campos de entrada tienen un campo de salida. El optimizador necesita saber qué campos de entrada tienen un campo de salida para insertar la lógica de filtro a la transformación.
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 ejemplo, una asignación contiene una expresión de filtro,
"out0 > 8
". Out0 es el valor del puerto de salida de out0 en la transformación de Java. Puede definir el valor de out0 como el valor del puerto de entrada in0 + 5. El optimizador puede insertar la siguiente expresión
"(in0 + 5) > 8"
más allá de la transformación de Java con la optimización de primera selección. Puede devolver NULL si un campo de salida no tiene una expresión de campo de entrada. El optimizador no inserta expresiones de filtro después de los campos de salida sin expresiones de entrada.
Puede incluir el siguiente código:
if (field.getName().equals("out0")) return new InfaExpression("in0 + 5", instance); else if (field.getName().equals("out2")) return null;

inputGroupsPushPredicateTo

Devuelve una lista de grupos que pueden recibir la lógica de filtro. La transformación de Java tiene un grupo de entrada. No modifique esta función para la transformación de 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; }