Propagación de columnas en tiempo de ejecución (etapa Java Integration en DataStage)

IBM® DataStage® le permite definir parte del esquema y especificar que si el trabajo encuentra columnas adicionales que no están definidas en los metadatos cuando se ejecuta realmente, adoptará estas columnas adicionales y las propagará a través del resto del trabajo. Esto se conoce como propagación de columnas en tiempo de ejecución.

Puede habilitar la propagación de columnas en tiempo de ejecución para un proyecto y establecer enlaces individuales en la pestaña Columnas de la página Salida. Para habilitar la propagación de columnas en tiempo de ejecución, seleccione el recuadro de selección Propagación de columnas en tiempo de ejecución.

Adición de columnas adicionales al enlace de salida

Cuando la propagación de columnas en tiempo de ejecución se habilita en un enlace de salida, el código de usuario puede añadir columnas adicionales a este enlace de salida. Las columnas adicionales se pueden especificar mediante el método Processor.getAdditionalOutputColumns(), que se llama para cada enlace de salida cuya propagación de columna en tiempo de ejecución está habilitada.

A continuación, se muestra un ejemplo de cómo añadir las columnas denominadas "charCol" y "intCol" a un enlace de salida dado.
public List<ColumnMetadata> getAdditionalOutputColumns
Link outputLink, List<Link> inputLinks, 
Properties stageProperties)
{
List<ColumnMetadata> addtionalColumns = new 
ArrayList<ColumnMetadata>();
ColumnMetadata charCol = new ColumnMetadataImpl
("charCol",ColumnMetadata.SQL_TYPE_CHAR);
addtionalColumns.add(charCol);
ColumnMetadata intCol = new ColumnMetadataImpl
("intCol",ColumnMetadata.SQL_TYPE_INTEGER);
addtionalColumns.add(intCol);
return addtionalColumns;
}
Si desea añadir columnas que están en el enlace de entrada 0, pero no en el enlace de salida, puede utilizar el siguiente método de ayuda denominado subtractColumnList() de la interfaz de InputLink:

public List<ColumnMetadata> getAdditionalOutputColumns(Link outputLink, 
List<Link> inputLinks, Properties stageProperties)
{
return inputLinks.get(0).subtractColumnList(outputLink);^M
}

De forma alternativa, puede utilizar JavaBean para especificar definiciones de columna en los enlaces de salida en tiempo de ejecución. Si el código de usuario utiliza JavaBean en los enlaces de salida cuya propagación de columna de tiempo de ejecución está habilitada, y tanto la clase JavaBean como la propiedad Correlación de columnas están vacías, la etapa Java™ Integration crea automáticamente columnas a partir de las propiedades de bean en una clase JavaBean determinada y las añade a un enlace de salida.

La tabla siguiente resume el tipo de SQL creado por la etapa Java Integration. Puede sobrescribir el tipo SQL de las columnas añadiendo manualmente la definición de columna correspondiente en el enlace de salida.
Tipo Java Tipo de SQL
byte[] Binario
boolean/java.lang.Boolean Bit
short/java.lang.Short TinyInt
int/java.lang.Integer SmallInt
double/java.lang.Double Double
float/java.lang.Float Flotante
long/java.lang.Long Entero
java.lang.String VarChar
java.math.BigInteger BigInt
java.math.BigDecimal Decimal
java.sql.Date Fecha
java.sql.Time Hora
com.ibm.is.cc.javastage.api.TimeMicroseconds.class Hora
java.sql.Timestamp Indicación de fecha y hora
Si la etapa tiene un único enlace de entrada y uno o más enlaces de salida, la etapa Java Integration añade automáticamente todas las columnas del enlace de entrada que no están presentes en el enlace de salida cuyo RCP está habilitado.

Transferencia de datos de columna de la entrada a la salida

La API de la etapa Java Integration proporciona la funcionalidad para consultar metadatos de columna dinámicamente en tiempo de ejecución y acceder a los datos. Debe crear código para leer los datos de las columnas propagadas en el enlace de entrada y escribirlos en el enlace de salida para el que se ha habilitado la RCP.

La etapa Java Integration también proporciona la funcionalidad para transferir automáticamente los datos de columna de un enlace de entrada a un enlace de salida si la etapa tiene un único enlace de entrada y uno o más enlaces de salida. En este caso, no se necesita su código de usuario para transferir los datos de las columnas propagadas en el enlace de entrada. Para obtener más información, consulte la clase com.ibm.is.cc.javastage.api.ColumnTransferBehavior en la información de Javadoc para la API de la etapa Java Integration.