Академический Документы
Профессиональный Документы
Культура Документы
Versión 8 Release 5
SC11-7827-03
IBM InfoSphere DataStage
Versión 8 Release 5
SC11-7827-03
Nota
Antes de utilizar esta información y el producto al que da soporte, lea la información del apartado “Avisos y marcas
registradas” en la página 359.
Contenido v
Sentencia Nap . . . . . . . . . . . . . 252 MM . . . . . . . . . . . . . . . . 298
Función Neg . . . . . . . . . . . . . 253 MO. . . . . . . . . . . . . . . . . 299
Función Not . . . . . . . . . . . . . . 253 MP . . . . . . . . . . . . . . . . . 299
Sentencia Null . . . . . . . . . . . . . 253 MT . . . . . . . . . . . . . . . . . 300
Función Num . . . . . . . . . . . . . 254 MUOC . . . . . . . . . . . . . . . 301
Función Oconv . . . . . . . . . . . . . 254 MX . . . . . . . . . . . . . . . . . 301
Ejemplos . . . . . . . . . . . . . . 255 MY . . . . . . . . . . . . . . . . . 302
Sentencias On...GoSub . . . . . . . . . . 260 NL . . . . . . . . . . . . . . . . . 303
Sentencia On...GoTo . . . . . . . . . . . 261 NLS . . . . . . . . . . . . . . . . 303
Sentencia OpenSeq . . . . . . . . . . . 262 NR . . . . . . . . . . . . . . . . . 303
Operadores de coincidencia de patrón . . . . . 263 P . . . . . . . . . . . . . . . . . 304
Función Pwr . . . . . . . . . . . . . 264 R . . . . . . . . . . . . . . . . . 306
Sentencia Randomize . . . . . . . . . . . 264 S . . . . . . . . . . . . . . . . . 306
ReadSeq . . . . . . . . . . . . . . . 265 TI . . . . . . . . . . . . . . . . . 307
Función REAL . . . . . . . . . . . . . 266
Sentencia Return . . . . . . . . . . . . 266 Capítulo 8. Transformaciones y
Sentencia Return (valor) . . . . . . . . . . 267 rutinas incorporadas . . . . . . . . 309
Función Right . . . . . . . . . . . . . 267
Transformaciones incorporadas . . . . . . . 309
Función Rnd . . . . . . . . . . . . . 268
Transformaciones de serie . . . . . . . . 309
Función Seq . . . . . . . . . . . . . . 268
Transformaciones de fecha . . . . . . . . 310
SetLocale . . . . . . . . . . . . . . . 268
Transformaciones de tipo de datos . . . . . 319
Sentencia Sleep . . . . . . . . . . . . . 269
Transformaciones de gestión de claves . . . . 322
Función Soundex . . . . . . . . . . . . 270
Transformaciones de medidas: área . . . . . 322
Función Space . . . . . . . . . . . . . 270
Transformaciones de medidas: distancia . . . 323
Función Sqrt. . . . . . . . . . . . . . 271
Transformaciones de medidas: temperatura . . 324
Función SQuote . . . . . . . . . . . . 271
Transformaciones de medidas: tiempo . . . . 324
Función Status . . . . . . . . . . . . . 271
Transformaciones de medidas: volumen . . . 325
Función Str . . . . . . . . . . . . . . 272
Transformaciones de medidas: peso . . . . . 327
Sentencia Subroutine . . . . . . . . . . . 273
Transformaciones numéricas . . . . . . . 327
Función Time . . . . . . . . . . . . . 273
Transformaciones del procesador de filas . . . 328
Función TimeDate . . . . . . . . . . . . 274
Transformaciones del programa de utilidad . . 329
Funciones trigonométricas . . . . . . . . . 274
Rutinas incorporadas . . . . . . . . . . . 330
Función Trim . . . . . . . . . . . . . 276
Subrutinas anteriores y posteriores incorporadas 330
Función TrimB . . . . . . . . . . . . . 277
Funciones de transformación de ejemplo . . . 331
Función TrimF . . . . . . . . . . . . . 277
Función UniChar . . . . . . . . . . . . 277
Función UniSeq . . . . . . . . . . . . 277 Capítulo 9. Almacenamiento en la
Función UpCase . . . . . . . . . . . . 278 memoria caché de disco de la etapa
Función WEOFSeq . . . . . . . . . . . 278 Hashed File . . . . . . . . . . . . 333
Función WriteSeq . . . . . . . . . . . . 279 Funcionalidad . . . . . . . . . . . . . 333
Función WriteSeqF . . . . . . . . . . . 280 Terminología . . . . . . . . . . . . . 334
Función Xtd . . . . . . . . . . . . . . 281 Secuencias de datos múltiples . . . . . . . 336
Códigos de conversión . . . . . . . . . . 281 Directrices para elegir un tipo de memoria caché 336
D . . . . . . . . . . . . . . . . . 282 Preparación de la memoria caché privada de
G . . . . . . . . . . . . . . . . . 285 enlaces . . . . . . . . . . . . . . . 336
L . . . . . . . . . . . . . . . . . 286 Preparación para el almacenamiento en la memoria
MB . . . . . . . . . . . . . . . . . 287 caché pública de enlaces y el almacenamiento en la
MCA . . . . . . . . . . . . . . . . 288 memoria caché del sistema en las plataformas
MC/A. . . . . . . . . . . . . . . . 288 UNIX . . . . . . . . . . . . . . . . 336
MCD . . . . . . . . . . . . . . . . 288 Requisitos especiales de AIX para determinar el
MCL . . . . . . . . . . . . . . . . 289 tamaño de la memoria caché de disco . . . . 337
MCM . . . . . . . . . . . . . . . . 289 Preparación para el almacenamiento en la memoria
MC/M . . . . . . . . . . . . . . . 290 caché pública de enlaces y el almacenamiento en la
MCN . . . . . . . . . . . . . . . . 290 memoria caché del sistema en las plataformas
MC/N . . . . . . . . . . . . . . . 290 Windows . . . . . . . . . . . . . . . 338
MCP . . . . . . . . . . . . . . . . 291 Utilización de la memoria caché privada de enlaces 339
MCT . . . . . . . . . . . . . . . . 291 Utilización de la memoria caché pública de enlaces 339
MCU . . . . . . . . . . . . . . . . 292 Utilización de la memoria caché del sistema . . . 340
MCX . . . . . . . . . . . . . . . . 292 Creación de un archivo hash para el
MD. . . . . . . . . . . . . . . . . 293 almacenamiento en memoria caché del sistema . 340
ML & MR . . . . . . . . . . . . . . 296 Mandatos del motor de servidor . . . . . . 340
Contenido vii
viii Guía del desarrollador de Server Job
Capítulo 1. Trabajos de servidor de IBM InfoSphere DataStage
Los trabajos de InfoSphere DataStage constan de etapas individuales. Cada etapa describe una base de
datos o proceso en concreto. Por ejemplo, una etapa puede extraer datos de un origen de datos, mientras
que otra puede transformarlos. Las etapas se añaden a un trabajo y se enlazan entre ellas utilizando
InfoSphere DataStage y el Diseñador de QualityStage.
La paleta de herramientas del servidor organiza las etapas en los grupos siguientes:
v Base de datos. Estas etapas leen o graban los datos contenidos en una base de datos.
v Archivo. Estas etapas leen o graban los datos contenidos en un archivo o un conjunto de archivos.
v Proceso. Estas etapas ejecutan algún proceso en los datos que se pasan entre ellas.
La siguiente tabla lista los tipos de etapa disponibles y proporciona una guía rápida acerca de sus
funciones:
Puede encontrar información general sobre cómo construir el trabajo y definir los metadatos necesarios
utilizando el cliente del Diseñador en el manual IBM InfoSphere DataStage and QualityStage Designer Client
Guide. Este manual describe los editores de etapas individuales que puede utilizar para desarrollar
trabajos de servidor. Algunas de estas etapas están incorporadas y otras son suplementarias.
Etapas suplementarias
Hay un gran número de etapas suplementarias especializadas disponibles para InfoSphere DataStage.
Pueden instalarse cuando se instala inicialmente IBM® InfoSphere DataStage o más adelante en cualquier
momento.
Las etapas de conectividad se utilizan para conectarse a bases de datos específicas. Aparecen en la
categoría Base de datos en la paleta de herramientas. Se describen en sus guías de consulta de
conectividad respectivas.
Las demás etapas suplementarias son etapas activas que aparecen en la categoría Proceso en la paleta de
herramientas. Todas se describen en esta guía.
Recursos personalizados
IBM InfoSphere DataStage proporciona un gran número de transformaciones y rutinas incorporadas para
su uso en las etapas Transformer en los trabajos de servidor. Se describen en Capítulo 8,
“Transformaciones y rutinas incorporadas”, en la página 309. Si tiene requisitos específicos de rutinas y
transformaciones personalizadas, InfoSphere DataStage dispone de un potente lenguaje de programación
de procedimientos denominado BASIC que permite definir sus propios componentes. Puede encontrar
material de referencia de BASIC en Capítulo 7, “Programación BASIC”, en la página 147. Una vez
desarrollados estos componentes, pueden reutilizarse en otros trabajos de InfoSphere DataStage.
InfoSphere DataStage tiene un depurador que permite eliminar los problemas con los trabajos de servidor
que ha diseñado. El depurador se describe en Capítulo 5, “Depuración y compilación de un trabajo”, en
la página 127.
Si está satisfecho con el diseño del trabajo, puede validarlo y ejecutarlo utilizando el Director de
InfoSphere DataStage y QualityStage. También puede ejecutar trabajos desde otro programa o desde la
línea de mandatos utilizando los recursos que se proporcionan en el InfoSphere DataStage Development
Kit, que se describe en InfoSphere DataStage Development Kit (interfaces de control de trabajo).
Se recomienda leer estos temas antes de diseñar nuevos trabajos pero, si lo desea, también puede revisitar
diseños de trabajos anteriores basándose en lo que lea aquí.
Las sugerencias de proceso paralelo están especialmente indicadas para los sistemas UNIX® o Windows®
de multiprocesador simétrico (SMP) de hasta 64 procesadores. Para los sistemas UNIX MPP y en clúster
(y los sistemas Windows o UNIX SMP) hay disponibles trabajos paralelos. Para obtener detalles, consulte
IBM InfoSphere DataStage and QualityStage Parallel Job Developer's Guide.
¿Cómo define el motor de servidor un proceso? Aquí es donde es importante la distinción entre etapas
activas y pasivas. Las etapas activas como, por ejemplo, Transformer y Aggregator, ejecutan tareas de
proceso, mientras que las etapas pasivas como, por ejemplo, Sequential File y Hashed File, leen o graban
orígenes de datos y proporcionar servicios a las etapas activas. En su forma más simple, las etapas activas
se convierten en procesos. No obstante, la situación se complica cuando conecta etapas activas entre ellas
y etapas pasivas entre ellas.
¿Qué ocurre cuando tiene un trabajo que enlaza dos etapas pasivas? Obviamente, se produce algún
proceso. De modo no visible, InfoSphere DataStage inserta una etapa Transformer reducida entre las
etapas pasivas que pasa datos directamente de una etapa a otra, y se convierte en un proceso cuando se
ejecuta el trabajo.
¿Qué ocurre cuando tiene un trabajo que enlaza dos o más etapas activas? De forma predeterminada,
todas se ejecutarán en un solo proceso. Las etapas pasivas marcan los límites del proceso y todas las
etapas activas adyacentes entre ellas se ejecutan en un solo proceso.
El recurso IPC también puede utilizarse para producir varios procesos en los que las etapas pasivas están
conectadas directamente. Esto significa que una operación que lee en un origen de datos y graba en otro
puede dividirse en un proceso de lectura y un proceso de grabación para aprovechar los sistemas de
múltiples procesadores.
Figura 6. Imposición implícita de varios procesos mediante el almacenamiento intermedio de filas entre procesos
Figura 9. Utilización de la etapa IPC para imponer varios procesos, con las etapas Transformer invisibles insertadas
en el tiempo de compilación
Particionamiento y recopilación
Con la introducción del soporte de multiprocesador mejorado en el Release 6 y posteriores, es posible
mejorar aún más el rendimiento de los trabajos del servidor mediante el particionamiento de datos.
La etapa Link Partitioner permite particionar los datos que está leyendo, de forma que pueden procesarse
en procesadores individuales que se ejecutan en varios procesadores. La etapa Link Collector permite
recopilar y unir datos particionados para grabarlos en un destino de datos individual.
El siguiente diagrama ilustra cómo puede utilizar las etapas Link Partitioner y Link Collector en un
trabajo. Ambas etapas están activas, y debe activar el almacenamiento intermedio de filas entre procesos a
nivel de proyecto o de trabajo para poder implementar los límites de proceso.
Puede obtener estadísticas detalladas sobre el rendimiento del trabajo para identificar aquellas partes de
un trabajo que limitan el rendimiento y realizar cambios para aumentarlo.
La colección de estadísticas de rendimiento puede activarse y desactivarse para cada etapa activa en un
trabajo de IBM InfoSphere DataStage. Para recopilar estadísticas de rendimiento:
1. Abra la ventana Opciones de ejecución del trabajo:
v En el cliente del Diseñador, pulse el botón de la barra de herramientas Ejecutar.
v En el cliente del Director, seleccione el trabajo y pulse el botón de la barra de herramientas Ejecutar
ahora.
2. Pulse el separador Rastreo.
3. Seleccione las etapas que desee supervisar en la lista Nombres de etapa. Utilice mayúscula-pulsar
para seleccionar varias etapas activas.
4. Seleccione el recuadro de selección Estadísticas de rendimiento.
5. Pulse Ejecutar.
Si el rastreo de rendimiento está activado, se genera inmediatamente una entrada especial después del
mensaje de terminación de la etapa en el registro de trabajo. La entrada de registro es parecida a la
siguiente:
Para ver las estadísticas de forma tabular, pulse con el botón derecho del ratón sobre la entrada de
registro y seleccione Detalle. Puede copiar las estadísticas en la ventana Detalle del suceso y pegarlas en
una hoja de cálculo para que pueda continuar el análisis.
El siguiente diagrama muestra el trabajo desde el que se han recopilado las estadísticas. La etapa
resaltada es la que tiene activado Estadísticas de rendimiento:
La tabla siguiente permite interpretar las estadísticas, que se han pegado en una hoja de cálculo, como se
muestra a continuación:
Tabla 1. Estadísticas de rendimiento
Enlace en el diseño de trabajo Acción Fila en la hoja de cálculo
DSLink5 Leer archivo secuencial 2
DSLink6 Derivación de transformador 5
Grabación entre procesos (de una 3
etapa Transformer a una etapa
Transformer)
DSLink8 Grabar archivo secuencial 3
DSLink7 Derivación de transformador 6
Grabar archivo secuencial 7
El mensaje de registro de terminación de etapa notifica el tiempo transcurrido y la CPU real utilizada por
la etapa, mientras que la vista Supervisor en una etapa completada muestra el porcentaje promedio de
CPU utilizada por la etapa.
Debe tener cuidado cuando interprete estas cifras. Por ejemplo, cuando se utilizan enlaces de etapa activa
en curso a etapa activa, la columna de porcentaje no sumará el 100%. Asimismo, tenga en cuenta que, en
estas circunstancias, si recopila estadísticas para la primera etapa activa, el coste total de la etapa activa
en sentido descendente se incluye en el enlace de activa a activa (como se muestra en el diagrama de
ejemplo). Esta distorsión permanece incluso cuando ejecuta las etapas activas en distintos procesos (con el
almacenamiento intermedio de filas entre procesos habilitado), a menos que se ejecute realmente en un
sistema de multiprocesador.
Si la cifra de Mínimo y la cifra de Promedio están muy próximas, esto indica que el proceso tiene una
limitación de CPU. De lo contrario, los trabajos con un mal rendimiento pueden tener una limitación de
E/S.
Puede activar el almacenamiento intermedio de filas en curso de todo el proyecto utilizando el cliente del
Administrador. O bien, puede activarlo para trabajos individuales utilizando el separador Rendimiento
en el recuadro de diálogo Propiedades del trabajo.
Nota: No puede utilizar el almacenamiento intermedio de filas en curso si el trabajo utiliza bloques
COMMON en funciones de transformación para pasar datos entre etapas. Se recomienda rediseñar el
trabajo para que utilice el almacenamiento intermedio de filas en lugar de los bloques COMMON.
Puede activar el almacenamiento intermedio de filas entre procesos de todo el proyecto utilizando el
cliente del Administrador. O bien, puede activarlo para trabajos individuales utilizando el separador
Rendimiento en el recuadro de diálogo Propiedades del trabajo.
Nota: No puede utilizar el almacenamiento intermedio de filas entre procesos si el trabajo utiliza bloques
COMMON en funciones de transformación para pasar datos entre etapas. Se recomienda rediseñar el
trabajo para que utilice el almacenamiento intermedio de filas en lugar de los bloques COMMON.
Si tiene un etapa activa que utiliza casi el 100% de la CPU, puede mejorar el rendimiento ejecutando
varias copias paralelas de un proceso de etapa. Para ello, duplique las etapas con un uso intensivo de la
CPU (la forma más rápida de hacerlo es utilizar un contenedor compartido) e inserte una etapa Link
Partitioner y Link Collector antes y después de las etapas duplicadas. Las siguientes capturas de pantalla
muestran un ejemplo de cómo puede hacerlo.
Si un trabajo todavía parece que tiene una limitación de E/S después de realizar uno o varios de los
pasos anteriores, puede utilizar las estadísticas de rendimiento para determinar qué etapas individuales
tienen una limitación de E/S:
1. Ejecute el trabajo con un conjunto de datos considerable y con el rastreo de rendimiento habilitado
para cada una de las etapas activas.
2. Analice los resultados y compárelos para cada etapa. En concreto, busque las etapas activas que
utilicen menos CPU que otras.
Una vez identificada la etapa, las acciones a realizar dependerán de los tipos de etapa pasiva implicados
en el proceso. Un archivo hash mal diseñado puede tener un efecto concreto en el rendimiento (para
obtener ayuda con el diseño del archivo hash, consulte “Diseño de archivo hash”). Para todos los tipos de
etapa, se recomienda:
v redistribuir los archivos en las unidades de disco
v cambiar la memoria o el hardware de disco
v reconfigurar las bases de datos
v reconfigurar el sistema operativo
Los archivos hash funcionan distribuyendo los datos entre varios grupos de un archivo. Esto acelera el
acceso a los datos, ya que puede ir a un grupo específico antes de buscar secuencialmente en los datos
que contiene una determinada fila de datos. El número de grupos que tiene, el tamaño de los grupos y el
algoritmo utilizado para determinar la distribución se deciden según la naturaleza de los datos que está
almacenando en el archivo.
Se ejecuta hash en las filas de datos (es decir, se asignan a los grupos) en un campo de clave. El
algoritmo hash convierte de forma eficaz y repetible una serie en un número del rango del 1 al n, donde
n es el módulo de archivo. Esto proporciona el grupo donde se grabarán las filas. El campo de clave
El otro objetivo es distribuir los datos lo más uniformemente posible entre varios grupos. En términos de
rendimiento, es especialmente importante que los grupos no estén superpoblados y no que se tengan que
ampliar a grupos de desbordamiento, ya que esto dificulta el acceso a los datos. Asimismo, es importante
tener en cuenta el tamaño de los registros (las filas) cuando se diseña el archivo, ya que es preferible que
se ajusten equitativamente a los grupos y no generen desbordamientos.
Existe una relación de compensación entre el tamaño del grupo y el número de grupos. En la mayoría de
operaciones, un buen diseño tiene muchos grupos de pequeño tamaño (por ejemplo, cuatro registros por
grupo). La búsqueda secuencial de la fila de datos necesaria no será nunca tan larga. No obstante, puede
haber casos en los que el diseño funcionará mejor con un número pequeño de grupos grandes.
De forma predeterminada, InfoSphere DataStage creará un archivo dinámico con los valores
predeterminados descritos anteriormente. No obstante, puede utilizar las opciones de Crear archivo en la
página Entradas de la etapa Hashed File para especificar el tipo de archivo y sus valores.
Esto ofrece la opción de varios tipos de archivos hash (estáticos) y un tipo de archivo dinámico. Los
distintos tipos de archivos estáticos reflejan los distintos algoritmos hash que utilizan. Elija un tipo según
su tipo de clave, tal como se muestra a continuación:
Tipo Adecuado para las claves que se forman de la siguiente manera:
2 Numérica, significativa en los últimos 8 caracteres
3 Mayormente numérica con delimitadores, significativa en los últimos 8 caracteres
4 Alfabética, significativa en los últimos 5 caracteres
5 Cualquier clave ASCII, significativa en los últimos 4 caracteres
6 Numérica, significativa en los primeros 8 caracteres
7 Mayormente numérica con delimitadores, significativa en los primeros 8 caracteres
8 Alfabética, significativa en los primeros 5 caracteres
9 Cualquier clave ASCII, significativa en los primeros 4 caracteres
10 Numérica, significativa en los últimos 20 caracteres
11 Mayormente numérica con delimitadores, significativa en los últimos 20 caracteres
12 Alfabética, significativa en los últimos 16 caracteres
Mejoras operativas
Puede realizar varios pasos en el diseño del trabajo para acelerar las operaciones que leen y graban
archivos hash.
v Precarga. Puede acelerar las operaciones de lectura de los enlaces de referencia si precarga un archivo
hash en la memoria. Puede especificarlo en la página Salidas de la etapa Hashed File.
v Memoria caché de grabación. Puede especificar una memoria caché para las operaciones de grabación
de forma que los datos se graben en ella y se desechen en el disco. Esto garantiza que los archivos
hash se graben en el disco en el orden del grupo, en lugar del orden en el que se graban las filas
individuales (que por su naturaleza necesitarán un acceso de disco aleatorio más lento). Si el
almacenamiento en la memoria caché del servidor está habilitado, puede especificar el tipo de
almacenamiento en la memoria caché de grabación cuando cree el archivo has, y el archivo siempre
utilizará el tipo especificado de memoria caché de grabación. De lo contrario, puede activar la memoria
caché de grabación a nivel de etapa en la página Salidas de la etapa Hashed File.
v Preasignación. Si utiliza archivos dinámicos, puede acelerar la carga del archivo realizando algunos
cálculos preliminares y especificar el módulo mínimo según corresponda. Esto mejora
significativamente la operación al recortar o eliminar las operaciones de división. Puede calcular el
módulo mínimo de la siguiente manera:
módulo mínimo = tamaño de datos estimado/(tamaño de grupo *
2048)
Una vez calculado el módulo mínimo, puede especificarlo para crear un archivo (utilizando la
característica Crear archivo del recuadro de diálogo Etapa Hashed File; consulte “Definición de datos
de entrada de Hashed File” en la página 41) o cambiar el tamaño de un archivo existente (utilizando el
mandato RESIZE que se describe en “Archivos hash de IBM InfoSphere DataStage” en la página 16).
v Cálculo del módulo de un archivo estático. Puede calcular el módulo necesario para un archivo
estático utilizando un método parecido al que se ha descrito anteriormente para calcular un módulo de
preasignación para los archivos dinámicos:
módulo = tamaño de datos estimado/(separación * 512)
Una vez calculado el módulo, puede especificarlo para crear un archivo (utilizando la característica
Crear archivo del recuadro de diálogo Etapa Hashed File; consulte “Definición de datos de entrada de
Hashed File” en la página 41) o cambiar el tamaño de un archivo existente (utilizando el mandato
RESIZE que se describe en “Archivos hash de IBM InfoSphere DataStage” en la página 16).
En modalidad de soporte multilingüístico, InfoSphere DataStage correlaciona entre los dos juegos de
caracteres, si es necesario.
El mecanismo para manejar el soporte multilingüístico varía para los trabajos paralelos y los trabajos de
servidor. Cada uno utiliza un juego de caracteres interno distinto, de manera que utilizan un conjunto
distinto de correlaciones para la conversión de datos. Tenga en cuenta que son algunos tipos de series (es
decir, caracteres) que necesitan correlación; los tipos de datos puramente numéricos no la requieren
nunca.
El juego de caracteres interno del soporte multilingüístico forma el estándar Unicode. El consorcio de
Unicode especifica varias formas de representar puntos de código, conocidas como Formatos de
transformación de Unicode (UTF). Los trabajos de servidor utilizan UTF-8, y los trabajos paralelos,
UTF-16.
Dado que los dos tipos de trabajo utilizan distintos juegos de caracteres internos, se facilita un juego
distinto de correlaciones para la conversión a y de cada uno de ellos (aunque para los trabajos paralelos
se facilitan equivalentes de las correlaciones de trabajos de servidor que se utilizan comúnmente).
Para obtener más información sobre Unicode, consulte la página Web a nivel mundial del Consorcio de
Unicode en http://www.unicode.org.
Correlación
Cuando debe transformar o transferir datos, el soporte multilingüístico correlaciona los datos en o de el
juego de caracteres externo que desee utilizar. El soporte multilingüístico incluye tablas de correlación
Entornos locales
Un entorno local de soporte multilingüístico de InfoSphere DataStage es un conjunto de convenciones
nacionales. Un entorno local se ve como una entidad separada de un juego de caracteres. Debe tener en
cuenta el idioma, el juego de caracteres, y las convenciones para el formateo de los datos que no o varios
grupos de personas utilizan. Defina el juego de caracteres por separado, aunque para que las
convenciones nacionales funcionen correctamente, debe utilizar también los juegos de caracteres
adecuados. Por ejemplo, tanto Venezuela como Ecuador utilizan el español como idioma, pero tienen
convenciones de formateo de datos distintas.
Los entornos locales no respetan los límites nacionales. Un país puede utilizar varios entornos locales, por
ejemplo, Canadá utiliza dos y Bélgica utiliza tres. Varios países pueden utilizar un entorno local, por
ejemplo, una empresa multinacional podría definir un entorno local a nivel mundial para utilizarlo en
todas sus oficinas. Consulte IBM InfoSphere DataStage and QualityStage Globalization Guide para obtener
una lista de todos los entornos locales facilitados con InfoSphere DataStage y los territorios e idiomas
relacionados.
Los trabajos de servidor le permiten elegir entornos locales de manera individual para diferentes aspectos
de las convenciones nacionales:
v Formato para horas y fechas
v Formato para visualizar números
v Visualización de valores monetarios
v Si un carácter es alfabético, numérico, si no puede imprimirse, etc.
v Orden en que deben ordenarse los caracteres (clasificación)
Puede combinar entornos locales si es necesario, por ejemplo podría especificar horas y fechas en un
entorno local y convenciones monetarias en otro.
Los trabajos paralelos le permiten elegir entornos locales de manera individual para:
v Orden en que deben ordenarse los caracteres (clasificación)
Este manual utiliza el término territorio en lugar de país para describir una zona que utiliza un entorno
local.
Hora y fecha
La mayor parte de los territorios tienen un estilo preferido para presentar las horas y las fechas. En
cuanto a las horas, suele ser una elección entre un reloj de 12 horas o un reloj de 24 horas. En cuanto a
las fechas, existen más variaciones. Aquí aparecen algunos ejemplos de formatos utilizados por los
distintos entornos locales para expresar las 9.30 de la noche del día 1 de abril de 1990:
Numérico
Por ejemplo, los números siguientes pueden significar mil, dependiendo del entorno local en que los
utilice:
Monetaria
Esta convención define la forma en que se muestran los valores monetarios, incluyendo:
v Carácter utilizado como separador decimal. Este puede ser distinto que el separador decimal utilizado
en los formatos numéricos.
v Carácter utilizado como separador de millares. Este puede ser distinto que el separador de miles
utilizado en los formatos numéricos.
v El símbolo de la moneda local del territorio, por ejemplo, $, £ o ¥.
v La serie utilizada como símbolo de moneda internacional, por ejemplo, USD (dólares estadounidenses)
NOK (Kroner noruego), JPY (Yen japonés).
v El número de las posiciones decimales que se utilizan en los valores monetarios locales.
v El número de las posiciones decimales que se utilizan en los valores monetarios internacionales.
v El signo que se utiliza para indicar los valores monetarios positivos.
A continuación se facilitan ejemplos de los formatos monetarios que utilizan los distintos entornos locales:
Tipo de carácter
Esta convención define si un carácter es alfabético, numérico, si no puede imprimirse, etc. Esta
convención define también las normas de mayúsculas y minúsculas, por ejemplo, algunas letras llevan
acento en minúsculas pero no en mayúsculas.
Ordenación
Esta convención define el orden en que se clasifican los caracteres, es decir, el orden. Puede haber muchas
variaciones en el orden de clasificación dentro de un único juego de caracteres. Por ejemplo, el carácter Ä
sigue al carácter A en Alemania, pero sigue al carácter Z en Suecia.
Puede ver qué correlaciones y entornos locales hay cargados actualmente y cuáles están disponibles en el
Administrador de InfoSphere DataStage:
1. Abra el cliente del Administrador.
2. Pulse el separador Proyectos para pasar a la página Proyectos.
3. Seleccione un proyecto y pulse el botón NLS... para abrir el diálogo Valores de soporte
multilingüístico del proyecto para el proyecto. De forma predeterminada, se muestran todas las
correlaciones cargadas actualmente para los trabajos de servidor. Elija la opción Mostrar todas las
correlaciones para ver una lista de las correlaciones disponibles para la carga.
4. Para ver los entornos locales cargados, pulse el separador Entornos locales del servidor. Pulse la
flecha abajo al lado de la categoría de entorno local para ver la lista desplegable de los entornos
locales cargados. Seleccione la opción Mostrar todos los entornos locales para que las listas
desplegables muestren todas las correlaciones disponibles para la carga.
InfoSphere DataStage permite especificar la correlación que debe utilizar en los distintos puntos de un
diseño de trabajo:
v Puede especificar la correlación predeterminada de un proyecto. Se utilizará en todas las etapas de
todos los trabajos de un proyecto, a menos que se altere temporalmente en el diseño del trabajo.
v Puede especificar la correlación predeterminada de un trabajo. Se utilizará en todas las etapas de un
trabajos (sustituyendo el valor predeterminado del proyecto), a menos que se altere temporalmente en
el diseño del trabajo.
Todos los tipos anteriores denotan columnas de serie, que deben correlacionarse con el juego de
caracteres Unicode interno de InfoSphere DataStage.
Los trabajos de servidor le permiten elegir entornos locales de manera individual para diferentes aspectos
de las convenciones nacionales:
v Formato para horas y fechas
v Formato para visualizar números
Puede combinar entornos locales si es necesario, por ejemplo podría especificar horas y fechas en un
entorno local y convenciones monetarias en otro. En "Entornos locales", se proporcionan descripciones de
cada tipo de convenio.
En los trabajos del servidor, puede establecer un entorno local predeterminado para un proyecto o para
un trabajo individual.
Por ejemplo, utilice registros con varias estructuras para diferentes tipos de información, tales como un
registro "E" para la información estática del empleado y un registro "S" para la información sobre la
nómina mensual del empleado o para grupos repetitivos de información (doce meses de ingresos).
También puede combinar estas agrupaciones de registros y, cuando se trate de datos que se repitan,
puede presentar simultáneamente grupos OCCURS anidados.
Los grupos repetitivos y las estructuras de registros internas tales como campos GROUP y OCCURS son
fáciles de cargar, gestionar y utilizar. Puede ignorar las columnas de datos GROUP que se visualizan
como datos en bruto y no pueden utilizarse de forma lógica en la mayoría de aplicaciones. Los metadatos
pueden presentarse simultáneamente en un conjunto de columnas normalizado durante el tiempo de
carga de forma que no existan matrices durante el tiempo de ejecución.
Puede seleccionar un subconjunto de columnas desde una extensa CFD (COBOL File Description,
Descripción de archivo COBOL). Este proceso de filtrado redunda en que se logra un incremento del
rendimiento puesto que la etapa ya no analiza ni procesa cientos de columnas, cuando en realidad, sólo
necesita unas pocas.
Los archivos sin formato complejo también pueden incluir tipos de datos de herencia.
Enlaces de salida
La etapa Complex Flat File soporta varias salidas. Un enlace de salida especifica los datos que está
extrayendo es decir, una secuencia de filas que se deben leer.
Si utiliza la etapa Complex Flat File para procesar un extenso número de columnas, por ejemplo, más de
300, utilice sólo un enlace de salida en su trabajo. Así mejorará sustancialmente el rendimiento de la
interfaz gráfica de usuario al cargar, guardar o estructurar estas columnas. El hecho de tener más de un
enlace de salida implica una secuencia de guardado o de carga cada vez que se cambian separadores.
La etapa Complex Flat File no dispone de la función de búsqueda de referencias ni soporta los enlaces de
entrada. Para obtener más información acerca de los trabajos creados con la versión 1 de esta etapa,
consulte la siguiente sección.
Funcionalidad
Funcionalidad soportada
Funcionalidad no soportada
Terminología
La lista siguiente describe los términos utilizados en este documento:
Defina las propiedades de este enlace y las definiciones de columna de los datos en la página Salida, en
el recuadro de diálogo Etapa CFF.
Separador General
Este separador se visualiza de forma predeterminada. Opcionalmente, puede entrar texto para describir la
finalidad del enlace de salida en el campo Descripción. Entre la información correspondiente en los
siguientes campos:
v Vía de acceso. El nombre de la vía de acceso de entrada de la fuente de datos a partir del que se
pueden recuperar los datos. También puede pulsar el botón ... situado a la derecha del campo para
examinar los directorios del sistema que hospeda la capa de motor para el origen de datos.
v Formato de los datos. El formato de un archivo de entrada: EBCDIC, ASCII o NLS. Si el soporte
multilingüístico está habilitado, el formato de los datos se fija en Soporte multilingüístico y no se podrá
editar. (Las correlaciones de soporte multilingüístico soportan datos EBCDIC.)
v Estilo del registro. El tratamiento de fin de la línea de los registros de acuerdo con la tabla siguiente:
Nota: Si el Estilo del registro se establece en CR/LF, el CR/LF no debe finalizar el último registro del
conjunto de datos. Si uno o varios CR/LF se encuentran al final de un conjunto de datos, se generarán
registros vacíos para cada CR/LF.
v Verificar valor de signo en datos DECIMAL COMP-3. Si se selecciona esta opción, la etapa
comprueba si existe un valor de signo válido en los datos definidos como COMP-3. Si el valor no es un
hexadecimal "C," "F," o "D,", la etapa graba un mensaje de error en el registro de IBM InfoSphere
DataStage.
Utilice el separador Columnas de origen para entrar los datos de columna que constituyen el archivo sin
formato manualmente o puede utilizar Cargar.
Nota: No utilice el separador Columnas de origen para omitir columnas del archivo de destino. Las
Columnas de origen deben describir de forma precisa y completa el archivo de origen o, de lo contrario,
el archivo no se analizará correctamente. En su lugar, utilice el separador Seleccionar columnas para
omitir columnas.
Botón Cargar
Cargar presenta simultáneamente las matrices generando nombres de columnas con números que
incrementan monotónicamente si se responde con Sí a la consulta siguiente:
¿Desea presentar simultáneamente OCCURS en las columnas que se están cargando?
Si entra los datos manualmente, también deberá presentar simultáneamente todas las matrices
manualmente.
Las columnas siguientes tienen un significado especial para la etapa Complex Flat File:
v Número de nivel. Representa el número de nivel de la columna dentro de una descripción de archivo
de COBOL.
v Tipo nativo. Representa el tipo de datos de COBOL.
Las otras columnas de la cuadrícula son las columnas estándar para el separador Columnas. Puede editar
estos campos pulsando el botón derecho del ratón en una fila de la cuadrícula y seleccionado Editar fila...
. Se abrirá el recuadro de diálogo Editar columna.
El recuadro de diálogo Editar metadatos de columna tiene un área general que contiene campos comunes
a todos los tipos de fuente de datos, además de dos páginas que contienen campos específicos para los
metadatos utilizados en trabajos de servidor e información específica de fuentes de datos de COBOL.
Propiedades de metadatos
Utilice el IBM InfoSphere DataStage and QualityStage Designer para importar los metadatos de archivo
sin formato complejo (CFD) en el InfoSphere DataStage. La lista siguiente define las propiedades que se
capturan para metadatos de archivo sin formato complejo.
Campo Descripción
Nombre de la columna
Nombre de la columna.
Capítulo 4. Etapas de trabajo de servidor 33
Clave Especifica si la columna es una clave.
Tipo nativo
Tipo de datos nativo de la columna.
Utilice uno de los valores siguientes: FLOAT, DECIMAL, BINARY, DISPLAY_NUMERIC,
CHARACTER, o GROUP.
Para obtener detalles acerca de la utilización del tipo nativo GROUP para manejar fechas,
consulte “Separador Columnas de destino” en la página 37.
Longitud
Valor numérico de la precisión.
Escala Número de posiciones decimales.
Con posibilidades de nulos
Especifica si la columna puede contener valores nulos. Si se establece en Sí, estará sujeta a una
restricción NOT NULL. (Sí/No)
Formato de fecha
Formato de una columna de fecha.
Descripción
Descripción de una columna. Consulte los ejemplos de los valores del campo Descripción al final
de esta sección.
Número de nivel
Número de nivel COBOL relativo de la columna.
OCCURS
Número de ocurrencias de la columna especificada en la cláusula OCCURS de COBOL. (Consulte
los ejemplos de OCCURS paralela, a la que no se da soporte, al final de esta sección.)
Uso Especifica una cláusula de uso de COBOL. Utilice una de las siguientes:
COMP COMP-1 COMP-2 COMP-3 DISPLAY
Indicador de signo
Especifica el signo. Fíjelo en S si la serie de caracteres de la imagen contiene el símbolo S. De lo
contrario, fíjelo en U.
Opción de signo
Si especifica una cláusula de signo y la serie de caracteres de la imagen contiene un símbolo S,
este atributo se establece en uno de los valores siguientes:
L - LEADING T - TRAILING LS - LEADING SEPARATE TS - TRAILING SEPARATE
Indicador de sinc.
Especifica si es una cláusula sincronizada de COBOL.
Campo redefinido
Nombre de la columna que se está redefiniendo.
Depending on
Nombre de la columna de dependencia.
Longitud de almacenamiento
Longitud de almacenamiento real en bytes de la columna.
Picture
Muestra una cláusula Picture generada en base a los valores en Nativo Tipo, Longitud y Escala.
Utilice los botones de la parte inferior del recuadro de diálogo Editar metadatos de columna para
continuar añadiendo o editando columnas o guardar los cambios y cerrar el recuadro de diálogo.
v Anterior y Siguiente. Visualizar los metadatos de la fila anterior o de la siguiente.
v Cerrar. Cerrar el recuadro de diálogo Editar metadatos de columna. Si hay cambios pendientes para la
fila actual, se le preguntará si desea guardarlos antes de cerrar la ventana.
v Aplicar. Guardar los cambios en la fila actual.
v Restablecer. Eliminar todos los cambios efectuados en la fila desde la última vez que se aplicaron los
cambios.
Sólo aparece visible un subconjunto de estas propiedades en el separador Columnas de origen. Para ver
todas las propiedades de una determinada fila, pulse con el botón derecho del ratón en una fila de la
cuadrícula y seleccione Editar fila....
Si entra o modifica metadatos utilizando el editor de etapas y desea guardar una copia en el repositorio
de InfoSphere DataStage para utilizarlas en otra etapa, pulse el botón Guardar....
Para cargar una definición de tabla existente en una etapa, utilice el botón Cargar....
La etapa Complex Flat File no soporta OCCURS paralelas, es decir: dos o más cláusulas OCCURS en la
misma definición de datos. Es necesario procesar estas cláusulas OCCURS paralelas para separar enlaces
de salida.
Este ejemplo emplea una cláusula PHONES OCCURS y una cláusula ADDRESS OCCURS:
01 CLIENT.
03 SURNAME PIC X(25).
03 FORENAME PIC X(25).
03 ADDRESS OCCURS 4.
05 ADDLINE PIC X (10).
03 POSTCODE PIC X (10).
03 PHONES OCCURS 2.
05 TELNO PIC X(10).
El ejemplo siguiente utiliza una cláusula PHONES OCCURS y una cláusula ADDLINE OCCURS:
01 CLIENT.
03 SURNAME PIC X(25).
03 FORENAME PIC X(25).
03 ADDRESS.
05 ADDLINE PIC X (10) OCCURS 5.
03 POSTCODE PIC X (10).
03 PHONES OCCURS 2.
05 TELNO PIC X(10).
La interfaz gráfica de usuario personalizada CFF reconoce las OCCURS paralelas y muestra el error
siguiente:
Demasiadas OCCURS
Los valores siguientes para el campo Descripción tienen un significado especial durante el tiempo de
ejecución:
v UNSIGNED_DECIMAL. Sólo utilícelo con campos DECIMAL. Puede utilizar este valor con campos de
decimales empaquetados para desencadenar algoritmos especiales de desempaquetamiento.
v ANYSIGN_DECIMAL. Sólo utilícelo con campos DECIMAL. Puede utilizar este valor con campos de
decimales empaquetados para desencadenar algoritmos especiales de desempaquetamiento.
v NONE. Utilícelo con tipos nativos non-GROUP. NONE provoca que los datos fluyan por la etapa sin
modificarla, es decir, no se realizan conversiones en los datos y se produce una salida de datos en
bruto. NONE se ignorará si utiliza un formato de fecha.
v OCCURS_COUNTER. Se comporta como una pseudocolumna del tipo nativo DECIMAL que no
espera recibir datos en la secuencia de entrada.
Primero debe insertar un campo nuevo con el tipo DECIMAL en la cuadrícula Columnas dentro de la
cláusula OCCURS. También debe incluir la serie OCCURS_COUNTER en el campo Descripción. Durante
el tiempo de ejecución, la etapa crea sus propios datos incrementando automáticamente el contador para
cada ocurrencia que se procesa. Actualmente no está soportado por el OCCURS anidado.
Si selecciona una columna en un GROUP que tiene una OCCURS y no se selecciona la columna GROUP,
podrían visualizarse resultados incorrectos. Debe incluir la columna GROUP con OCCURS en su
selección si elige cualquier columna en el GROUP.
Nota: Sólo podrían seleccionarse determinados tipos de columnas GROUP. Consulte las secciones
siguientes para obtener detalles.
Nota: No utilice el separador Columnas de origen con el objetivo de seleccionar columnas para el
archivo de destino. Sólo utilice el separador Seleccionar columnas para este propósito. La descripción en
el separador Columnas de origen debe coincidir de forma completa y precisa con el archivo de origen
(consulte “Separador Columnas de origen” en la página 33).
El separador Seleccionar columnas funciona de forma parecida a la etapa de origen de sistema principal
Complex File, tal y como se describe a continuación:
v Columnas disponibles lista las columnas de origen visualizadas en formato jerárquico. Utiliza campos
para columnas non-GROUP y carpetas para columnas GROUP. Cuando selecciona o borra cada
columna, aparece una marca de selección en la columna de la lista.
Sólo puede seleccionar columnas GROUP si todas las columnas en GROUP tienen el tipo de datos
CHARACTER. Si cualquier columna en GROUP tiene un tipo de datos distintos, no podrá seleccionar
la columna GROUP y se visualizará como tal.
v Columnas seleccionadas contiene la lista de columnas que está creando utilizando las teclas de flecha.
v Utilice estas teclas de flecha para mover las columnas de acá para allá entre la lista Columnas
disponibles y la lista Columnas seleccionadas. Utilice la flecha simple ( > ) para mover columnas
resaltadas y la flecha doble ( >> ) para mover todos los elementos.
Ejemplo redefinido
La etapa Complex Flat File soporta la redefinición de cualquier parte del archivo de origen. Lo hace al
restableciendo la posición de inicio de un campo cuyos metadatos redefinen otro campo.
Pulse el separador Origen Columnas en la página Salida para entrar o cargar definiciones de columna
para sus datos. En este caso, defina el campo Tipo nativo para Application-Date (aplicación-fecha) como
CARÁCTER. Seleccione un formato adecuado en el campo Formato de fecha de la ventana Editar
metadatos de columna, en este caso, CCYYMMDD.
Para generar una fecha de IBM InfoSphere DataStage en la columna del enlace de salida, los datos de
entrada y el campo Formato de fecha deben utilizar el mismo formato. Por ejemplo, los datos de entrada
con formato "25/12/2000" deben utilizar el formato DD/MM/CCYY en el campo Formato de fecha. De
lo contrario, se genera una fecha con un valor nulo y aparece un aviso sobre una conversión de fecha
incorrecta en el registro de InfoSphere DataStage.
Etapas Folder
Las etapas Folder se utilizan para leer o grabar datos como archivos en un directorio ubicado en el
servidor de IBM InfoSphere DataStage.
Nota: El comportamiento de la etapa Folder cuando lee carpetas que contienen otras carpetas no está
definido.
En un entorno de soporte multilingüístico, el usuario que ejecuta el trabajo debe tener permiso de
grabación en la carpeta para que la información de correlación de soporte multilingüístico pueda
configurarse correctamente.
Cuando edita una etapa Folder, aparece el recuadro de diálogo Etapa Folder. Este recuadro de diálogo
tiene tres páginas:
v Etapa. El separador General muestra el nombre de la etapa que está editando, el tipo de etapa y una
descripción. El separador Propiedades contiene las propiedades que definen la operación de la etapa.
v Entradas. El separador Columnas muestra las definiciones de columna para los datos que llegan al
enlace de entrada. El directorio en el que la etapa graba los archivos se define en la propiedad Nombre
de vía de acceso de la carpeta en el separador Propiedades de la etapa.
v Salidas. El separador Columnas muestra las definiciones de columna para los datos que salen en el
enlace de salida. El separador Propiedades controla la operación del enlace. El directorio en el que la
etapa lee los archivos se define en la propiedad Nombre de vía de acceso de la carpeta en el separador
Propiedades de la etapa.
El separador Propiedades de la página Entradas define propiedades para el enlace de entrada. Las
propiedades son las siguientes:
v Conservar CRLF. Cuando Conservar CRLF se establece en Sí, las marcas de campo no se convierten
en nuevas líneas al grabarse. Se establece en Sí de forma predeterminada.
El separador Columnas define los datos que llegan al enlace que se van a grabar en archivo en el
directorio. La primera columna del separador Columnas debe definirse como una clave, y proporciona el
nombre del archivo. Las restantes columnas se graban en el archivo denominado, separando cada
columna con una línea nueva. Los datos que se van a grabar en un directorio se proporcionan
normalmente en una sola columna. Por ejemplo, la cuadrícula de columnas será parecida a la siguiente:
Con
Nombre de la posibilidades de
columna Clave Tipo de SQL Longitud Escala nulos
Nombre de U VarChar 255 No
archivo
Registro LongVarChar 999999 No
El separador Columnas define un máximo de dos columnas. La primera columna se debe marcar como la
clave y recibe el nombre de archivo. La segunda columna, si existe, recibe el contenido del archivo. Puede
cargar estas definiciones de columna de la definición de tabla predeterminada proporcionada para la
Consulte IBM InfoSphere DataStage and QualityStage Connectivity Guide for IBM UniVerse and UniData para
obtener más información sobre cómo utilizar las etapas Hashed File para acceder a los archivos de
UniVerse.
Cada etapa Hashed File puede tener una cantidad distinta de entradas o salidas. Cuando edita una etapa
Hashed File, aparece el recuadro de diálogo Etapa Hashed File. Este recuadro de diálogo puede tener
hasta tres páginas (en función de si existen entradas o salidas de la etapa):
v Etapa. Muestra el nombre de la etapa que se está editando. Esta pestaña tiene un separador General,
donde puede escribir texto para describir la finalidad de la etapa en el campo Descripción y especificar
dónde están los archivos de datos pulsando uno de los siguientes botones de opción:
– Utilizar nombre de cuenta. Si selecciona esta opción, debe elegir el nombre de la cuenta en la lista
Nombre de cuenta. Esta lista contiene todas las cuentas definidas en la carpeta Definiciones de
tablas → Con hash en el repositorio. Si la cuenta que desea no está en la lista, es conveniente definir
una definición de tabla. O buen, puede especificar un nombre de cuenta o utilizar un parámetro de
trabajo. Para obtener más información sobre cómo crear una definición de tabla, o cómo definir y
utilizar parámetros de trabajo, consulte el manual IBM InfoSphere DataStage and QualityStage Designer
Client Guide.
– Utilizar vía de acceso de directorio. Si selecciona esta opción, debe especificar una vía de acceso de
directorio que contenga la cuenta de UV. El directorio debe ser una cuenta de UniVerse y se utiliza
para las cuentas de UniVerse que no aparecen en el archivo UV.ACCOUNT. Si DSEngine aloja
localmente el archivo hash, debe especificar el directorio del proyecto de IBM InfoSphere DataStage
como la vía de acceso del directorio, por ejemplo, C:\IBM\InformationServer\Server\Projects\
Dstage. El directorio se especifica en el campo Vía de acceso de directorio. Puede especificar la vía
de acceso directamente, pulsar Examinar... para buscar un directorio adecuado en el sistema o
utilizar un parámetro de trabajo.
– Valor nulo de SQL. Determina qué carácter representa el valor nulo de SQL en el archivo hash
correspondiente a esta etapa. Si el sistema utiliza el símbolo del Euro, seleccione la opción Especial
(permitir Euro) en la lista. Seleccione Detección automática para que InfoSphere DataStage
determine que representa el nulo SQL.
– Compatibilidad de etapas de UniVerse. Marque este recuadro de selección para asegurarse de que
las conversiones de trabajos funcionarán correctamente. Con esta opción seleccionada, la fecha o la
hora se representarán en formato ISO (según el tipo ampliado) y se escalarán los números de
acuerdo con los metadatos. (El programa de utilidad de conversión de trabajos es una herramienta
autónoma especial; no está disponible en el cliente del Diseñador.)
v Entradas. Esta página sólo se muestra si dispone de un enlace de entrada de esta página. Especifica el
archivo de datos que se debe utilizar y las definiciones de columnas asociadas para cada enlace de
entrada de datos. Esta página también especifica cómo se graban datos en el archivo de datos.
Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.
Si una etapa Hashed File hace referencia a un archivo hash que no existe, utilice la característica Trabajo
de validación de Director antes de ejecutar el trabajo y InfoSphere DataStage lo creará automáticamente.
Para validar un trabajo, elija Trabajo → Validar en el cliente del Director. Aparecerá el diálogo Opciones
de ejecución del trabajo. Pulse Validar. Para obtener más información sobre cómo validar un trabajo y
establecer las opciones de trabajo, consulte IBM InfoSphere DataStage and QualityStage Director Client Guide.
Nota: Debe utilizar los recuadros de selección Clave para identificar las columnas de claves. De lo
contrario, se toma la primera definición de columna como campo de clave del archivo hash. Las
Pulse Ver datos... para abrir el Navegador de datos. Esto le permite examinar los datos asociados al
enlace de entrada. Para obtener una descripción del Navegador de datos, consulte el manual IBM
InfoSphere DataStage and QualityStage Designer Client Guide.
Si tiene previsto leer y grabar en un archivo hash al mismo tiempo, debe configurar una selección en el
separador Selección, o debe seleccionar el recuadro de selección Lectura por registros en el separador
General. Esto garantiza que el archivo se lea en registros en lugar de en grupos y que funcionen los
bloqueos de registros. No obstante, tenga en cuenta que esta modalidad de operación es mucho más lenta
y sólo debe utilizarse si hay una clara necesidad de leer y grabar el mismo archivo al mismo tiempo.
Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.
Nota: La copia de seguridad se puede utilizar para restablecer el archivo si un trabajo se detiene o
termina anormalmente en el tiempo de ejecución. Consulte IBM InfoSphere DataStage and QualityStage
Designer Client Guide para obtener más información.
v Formato. Contiene parámetros que determinan el formato de los datos del archivo. Puede haber hasta
cuatro recuadros de selección:
Pulse Ver datos... para abrir el Navegador de datos. Esto le permite examinar los datos asociados al
enlace de entrada. Para obtener una descripción del Navegador de datos, consulte el manual IBM
InfoSphere DataStage and QualityStage Designer Client Guide.
Pulse Ver datos... para abrir el Navegador de datos. Esto le permitirá ver los datos asociados con el
enlace de salida.
Los metadatos del enlace especifican que los datos se organizan en tres columnas que contienen tres
caracteres cada una. En la tabla, <EMPTY> indica un nulo SQL, una serie vacía o una serie vacía
correlacionada, dependiendo de los valores.
Conjunto de datos de entrada 1
Fila 1: ABC|123|<LF>YZ<LF>
Fila 2: PQR...
Tabla 3. Conjunto de datos de entrada 1
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> N Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave Y salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Y Fila 1 descartada
Sustituir ABC|123|<EMPTY> Aviso Y Fila fantasma
Retener y avisar "ABC|123|" " " " " Ninguno Y Fila fantasma
Retener "ABC|123|" " " " " Aviso Y Fila fantasma
Ninguno Fila fantasma
<LF> S Error ABC|123|<LF>YZ Ninguno P Datos correctos
UNIX Descartar y avisar ABC|123|<LF>YZ Ninguno P Datos correctos
Sustituir y avisar ABC|123|<LF>YZ Ninguno P Datos correctos
Sustituir ABC|123|<LF>YZ Ninguno P Datos correctos
Retener y avisar ABC|123|<LF>YZ Ninguno P Datos correctos
Retener ABC|123|<LF>YZ Ninguno P Datos correctos
Etapas Aggregator
Las etapas Aggregator clasifican las filas de datos de un solo enlace de entrada en grupos y calculan
totales u otras funciones de totales para cada grupo. La etapa produce los totales sumados de cada grupo
mediante un enlace de salida.
Cuando edita una etapa Aggregator, aparece el recuadro de diálogo Etapa Aggregator. Este recuadro de
diálogo tiene tres páginas:
v Etapa. Muestra el nombre de la etapa que se está editando. Esta página tiene un separador General
que contiene una descripción opcional de la etapa y los nombres de las rutinas anterior y posterior.
Para obtener más información sobre estas rutinas, consulte “Subrutinas anteriores y posteriores a la
etapa”.
v Entradas. Especifica las definiciones de columna para el enlace de entrada de datos.
v Salidas. Especifica las definiciones de columna para el enlace de salida de datos.
Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.
Seleccione una rutina en la lista. Esta lista contiene todas las rutinas definidas como una Subrutina
anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado para el
argumento de entrada de la rutina en el campo Valor de entrada.
Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa Aggregator.
Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.
Nota: La etapa Aggregator no conserva el orden de las filas de entrada, incluso cuando los datos de
entrada ya están ordenados.
Los datos de entrada ordenados pueden producirse como salida de una etapa ODBC o UniVerse
(utilizando una cláusula ORDER BY en la sentencia SQL) o una etapa Sequential File.
Para utilizar datos de entrada ordenados, puede utilizar las propiedades de columna adicionales en el
separador Columnas de la página Entradas.
Escriba un número en la columna Ordenar para especificar la posición que ocupa la columna en la clave
de ordenación. Por ejemplo, si los datos de entrada se han ordenado por fecha y posteriormente por
código de producto, la posición de la clave de ordenación para la columna de fecha será 1 y la posición
de la clave de ordenación para la columna de código de producto será 2. Un valor de 1 siempre indica la
clave más significativa. Si no especifica ningún valor en este campo, la columna se añadirá el final de la
secuencia de claves de ordenación. Cuando pulsa Aceptar, todas las columnas se ordenan en secuencia de
la columna más significativa hacia arriba.
Elija el orden en que se ordenan los datos en la columna Orden de clasificación. El valor predeterminado
es ninguno:
v Ascendente. Seleccione esta opción si los datos de entrada de la columna especificada se ordenan en
orden ascendente. Si selecciona esta opción, el servidor de IBM InfoSphere DataStage comprobará el
orden en tiempo de ejecución.
v Descendente. Seleccione esta opción si los datos de entrada de la columna especificada se ordenan en
orden descendente. Si selecciona esta opción, el servidor de InfoSphere DataStage comprobará el orden
en tiempo de ejecución.
v Ignorar. No comprueba el orden. Seleccione esta opción si el orden de clasificación utilizado por los
datos de entrada no es simplemente ascendente o descendente sino que se utiliza un orden de
clasificación más complejo. Al seleccionar esta opción, debe hacerlo con prudencia. En tiempo de
Agregación de datos
Los orígenes de datos de los que se extraen los datos pueden contener cientos de miles de filas de datos.
Por ejemplo, los datos en una base de datos de ventas pueden contener información sobre cada
transacción o venta. Puede pasar todos estos datos a su depósito de datos. No obstante, esto significa que
deberá realizar búsquedas en grandes volúmenes de datos en el depósito de datos antes de obtener los
resultados que desee.
Si sólo desea información de resumen, por ejemplo, el total del producto A vendido desde el 01/01/96,
puede agregar los datos y pasar sólo la suma total al depósito de datos. Esto reduce la cantidad de datos
que se almacenan en el depósito de datos, acelera el tiempo necesario para encontrar los datos que desea
y garantiza que el depósito de datos almacene los datos con el formato que necesita.
La etapa Aggregator permite agrupar por o resumir las columnas que desee en cualquiera de los enlaces
de salida.
Nota: Cada salida de columna de una etapa Aggregator debe estar resumida, o se debe haber agrupado
por ella.
Al resumir los datos, puede realizar cálculos básicos en los valores de una determinada columna. Las
acciones que puede realizar dependen del tipo de datos SQL de la columna seleccionada.
Puede realizar las acciones siguientes para los tipos de datos SQL numéricos:
v Mínimo. Devuelve el valor más bajo de la columna.
v Máximo. Devuelve el valor más alto de la columna.
v Recuento. Cuenta el número de valores de la columna.
v Suma. Suma los valores totales de la columna.
v Promedio. Proporciona el promedio de los valores de la columna.
v Primer. Devuelve el primer valor de la columna.
v Último. Devuelve el último valor de la columna.
v Desviación estándar. Devuelve la desviación estándar de los valores en la columna.
Al calcular la desviación estándar, IBM InfoSphere DataStage utiliza la fórmula:
desviación_estándar = sqrt [
(sum(Xi2) - N avg(Xi)2) / N ]
Algunos otros paquetes como, por ejemplo, Microsoft Excel, utilizan la fórmula:
desviación_estándar =
sqrt [ (sum(Xi2) - N avg(Xi)2) / (N-1)]
Puede realizar las acciones siguientes para los demás tipos de datos SQL:
v Mínimo. Devuelve el valor más bajo de la columna.
v Máximo. Devuelve el valor más alto de la columna.
v Recuento. Cuenta el número de valores de la columna.
v Primer. Devuelve el primer valor de la columna.
v Último. Devuelve el último valor de la columna.
Por ejemplo, si desea saber el número total del producto A vendido, debe sumar los valores de la
columna QtySold.
Para agrupar por o resumir una columna, debe editar la columna Derivación en el recuadro de diálogo
Columna de salida. Para ello, efectúe una doble pulsación en la celda para abrir el recuadro de diálogo
Derivación.
Si desea agrupar por la columna, seleccione el recuadro de selección Agrupar por esta columna. La
función agregada se establece automáticamente en (agrupada) y no puede seleccionar una función
agregada en la lista.
Etapa Command
La etapa Command es una etapa activa que puede ejecutar distintos mandatos externos, incluidos los
mandatos de motor de servidor, los programas y los trabajos desde cualquier punto del flujo de datos de
IBM InfoSphere DataStage. Puede ejecutar un mandato cualquiera, incluidos sus argumentos, que puede
escribir en el shell del sistema operativo como, por ejemplo, Windows o UNIX. A modo de ejemplo cabe
citar scripts Perl, archivos por lotes DOS, scripts UNIX y otros programas ejecutables de línea de
mandatos que pueda llamar si no son interactivos.
Hay disponible una interfaz gráfica de usuario (GUI) para la etapa Command.
Puede utilizar la etapa Command en cualquier lugar de la vía de acceso de trabajo para invocar un
mandato externo. Las rutinas anteriores y posteriores que ya están disponibles actúan de forma parecida,
excepto que puede colocar la etapa Command en cualquier lugar de una secuencia de trabajos e invocarla
varias veces en paralelo.
Si la etapa se coloca en medio de una secuencia y no se selecciona No reenviar datos de fila, los datos se
mueven al enlace de salida. Si la etapa está al final de una vía de acceso, ejecuta el mandato y pasa los
datos entrantes sin alterar. La llega de la fila sólo causa la ejecución del mandato.
La GUI maneja la creación de columnas en el enlace de salida al examinar los valores de Salida a enlace,
No reenviar datos de fila y No esperar al mandato.
Funcionalidad
Funcionalidad soportada
Terminología
La lista siguiente describe los términos de la etapa Command utilizados en este documento:
Término
Descripción
Rutinas anteriores y posteriores
Las rutinas externas que puede definir para que se invoquen antes de que se inicie un trabajo y
después de que se salga de un trabajo. Grabe estas rutinas en BASIC de IBM InfoSphere
DataStage.
Algunas etapas dan soporte a las rutinas anteriores y posteriores a la etapa. Estas se invocan
antes o después de invocar una etapa.
ExecTCL
Una rutina incorporada que ejecuta mandatos del motor de servidor desde un trabajo de
InfoSphere DataStage.
ExecDOS
Una rutina incorporada que ejecuta mandatos de DOS desde un trabajo de InfoSphere DataStage.
Separador General:
Separador Columnas:
Este separador contiene las definiciones de columna para los datos grabados en el origen de datos. El
separador Columnas se comporta de la misma forma que el separador Columnas de la etapa ODBC.
El paso a través de columnas debe tener los mismos tipos datos y tamaños que las correspondientes
columnas de entrada. No obstante, puede editar los campos Nombre, Elemento de datos, Derivación y
Descripción para las columnas.
Separador General:
Separador Columnas:
Este separador contiene las definiciones de columna para los datos a los que se da salida en el enlace
seleccionado. La interfaz gráfica de usuario gestiona automáticamente las definiciones de columna de
salida.
Si no selecciona No esperar al mandato y se selecciona la opción de salida Salida a enlace, los elementos
de datos COMMAND.RTNCODE y COMMAND.OUTPUT para las definiciones de columna contendrán
el código de retorno y la salida del mandato respectivamente. Por el contrario, el campo Derivación
carece de sentido para esta etapa.
Utilización de mandatos
Puede ejecutar cualquier mandato, incluyendo sus argumentos, que pueda escribir en el shell del sistema
operativo, por ejemplo, scripts Perl, archivos de proceso por lotes DOS, scripts de UNIX y otros
programas accionados por líneas de mandatos que no son interactivas y no precisan ninguna entrada.
Puede establecer el tipo de mandato en TCL en el separador General de la página Etapa para ejecutar
mandatos TCL y ejecutar programas BASIC.
Mandato dsjob
Puede utilizar el mandato dsjob para llamar a otros trabajos de IBM InfoSphere DataStage desde la etapa
Command. InfoSphere DataStage proporciona el programa dsjob que permite ejecutar trabajos compilados
desde un mandato en lugar de desde InfoSphere DataStage. El programa dsjob tiene la sintaxis simple
siguiente:
Para ver información sobre la sintaxis completa, consulte InfoSphere DataStage Programmer's Guide.
Nota: Si selecciona Omitir en el recuadro de diálogo Conectar con proyecto mientras inicia InfoSphere
DataStage, deberá utilizar las opciones de usuario y contraseña cuando utilice el mandato dsjob.
Nota: Puesto que la etapa envía el código de retorno para el mandato como la primera columna de un
enlace de salida, la interfaz gráfica de usuario lo proporciona automáticamente. Si utiliza el editor de
cuadrículas estándar, deberá añadir manualmente las columnas obligatorias a las definiciones de
columna para el enlace de salida.
Etapas InterProcess
Una etapa InterProcess (IPC) es una etapa pasiva que proporciona un canal de comunicación entre los
procesos de IBM InfoSphere DataStage que se ejecutan simultáneamente en el mismo trabajo. Permite
diseñar trabajos que se ejecutan en sistemas SMP con grandes ventajas para el rendimiento. Para conocer
las ventajas del uso de las etapas IPC, necesita obtener más información sobre cómo se ejecutan realmente
los trabajos de InfoSphere DataStage como procesos. Para ello, consulte “Trabajos y procesos de IBM
InfoSphere DataStage” en la página 5.
El enlace de salida que conecta la etapa IPC con la etapa que lee los datos puede abrirse una vez abierto
el enlace de entrada conectado a la etapa que graba los datos.
Puede utilizar las etapas InterProcess para unir etapas pasivas. Por ejemplo, puede utilizarlas para
acelerar la transferencia de datos entre dos orígenes de datos:
En este ejemplo, el trabajo se ejecutará como dos procesos: uno que maneja la comunicación desde la
etapa Sequential File a la etapa IPC y otro que maneja la comunicación de la etapa IPC a la etapa ODBC.
Una vez la etapa Sequential File ha abierto su enlace de salida, la etapa IPC puede empezar a pasar datos
a la etapa ODBC. Si el trabajo se ejecuta en un sistema de multiprocesador, los dos procesos pueden
ejecutarse simultáneamente para que la transferencia sea mucho más rápida.
También puede utilizar la etapa IPC para especificar explícitamente que las etapas activas conectadas se
ejecuten como procesos aparte. Esto ofrece muchas ventajas de rendimiento para los sistemas de
multiprocesador. También puede especificar este comportamiento implícitamente activando el
almacenamiento intermedio de filas entre procesos, ya sea para todo el proyecto mediante el cliente del
De forma adicional, la etapa de conector FTP proporciona la opción de ejecutar mandatos Before/After en
la máquina remota. Así, se automatizan los siguientes procesos de flujo de datos:
v Antes de que empiece la transferencia de archivos. Puede utilizar el mandato Before (antes) para
preparar un archivo que se debe transferir o para preparar la máquina remota que va a recibirlo.
v Después de que finalice la transferencia de archivos. Puede utilizar el mandato After (después) para
suprimir archivos temporales o para iniciar una actividad subsiguiente que utilice el archivo
transferido.
Cada etapa FTP Plug-in es una etapa pasiva que puede tener cualquier número de enlaces de entrada y
de salida:
v Los enlaces de entrada especifican los datos que está grabando, que es una secuencia de filas que se
debe cargar en un único archivo remoto.
v Los enlaces de salida especifican los datos que está extrayendo, que es una secuencia de filas que se
debe leer desde un único archivo remoto.
Funcionalidad
La etapa FTP Plug-in contiene las funcionalidades y ventajas siguientes:
v Comparte propiedades comunes de nombre de host remoto, nombre de usuario, contraseña y vía de
acceso del directorio hacia o desde los archivos que se transfieren para cada instancia de etapa.
v Se corresponde generalmente con una sesión de transferencia de archivos independiente para cada
enlace, por lo que pueden transferirse varios archivos de forma simultánea.
v Actúa como cliente FTP y utiliza un protocolo de transferencia de archivos genérico con el que iniciar
sesiones y transferir archivos hacia o desde cualquier servidor de transferencia de archivos. Mantiene
una sesión FTP el tiempo suficiente para permitir la transferencia de grandes cantidades de datos.
v Da soporte al protocolo de datos STREAM. Si se cierra una conexión de transferencia STREAM, el
trabajo termina anormalmente con un mensaje de error.
v Maneja las anomalías en los trabajos según corresponda cuando se transfieren archivos incompletos.
Nota: Puede especificar el número de filas que el trabajo debe procesar en la página Límites en el
cliente del Director de IBM InfoSphere DataStage. A partir del release 1.3, si limita las filas, pueden
registrarse errores muy graves en el archivo de registro al final del trabajo debido a un cierre
prematuro de la conexión de datos. No obstante, la transferencia de datos estará completa para el
número de filas seleccionado.
v Da soporte a un número especificado por el usuario de reintentos de conexión e intervalos de
reintento.
v Proporciona mandatos opcionales anteriores y posteriores para que se ejecuten en la máquina remota
antes y después de transferir un archivo satisfactoriamente (requiere un servidor telnet para poder
utilizar todas las prestaciones en Windows).
v Proporciona un nivel de rastreo opcional para diagnosticar problemas de rendimiento.
v Permite leer o grabar datos ASCII o binarios.
Nota: La modalidad binaria no está soportada en el lienzo del servidor paralelo. Consulte la propiedad
de entrada Tipo de representación de datos y la propiedad de salida Tipo de representación de datos.
v Utiliza las propiedades de etapa y enlace, y el tipo de columna para determinar el formato de las series
de caracteres antes de la transferencia.
v Permite controlar qué proceso inicia la solicitud de conexión para la transferencia de datos.
v Proporciona un uso opcional de definiciones de metadatos para leer un archivo remoto.
Terminología
En la lista siguiente se describen los términos de FTP Plug-in utilizados en este documento:
Término
Descripción
mandato after
El mandato que se ejecuta en la máquina remota utilizando una sesión de telnet si la
transferencia ha finalizado.
mandato before
El mandato que se ejecuta en la máquina remota utilizando una sesión de telnet antes de iniciar
la transferencia.
FTP Protocolo de transferencia de archivos. Una prestación de transferencia interactiva de archivos
que se utiliza a menudo en las redes TCP/IP.
retrotraer
Cancela todos los cambios de E/S de archivo realizados durante una transacción.
telnet El nombre de una sesión de protocolo que actúa como una emulación de terminal remoto
estándar con las comunicaciones con el host a través de una red.
transacción
Una secuencia de operaciones de E/S de archivo que se trata como una operación lógica en
relación con la recuperación y la visibilidad para otros usuarios.
Instalación de la etapa
Para especificar retrotracciones de transacciones, compromisos o el proceso anterior/posterior en el
servidor Windows, debe proporcionar primero un servidor telnet distinto del servidor telnet de UniVerse.
Propiedades
Las tablas de las siguientes secciones incluyen las siguientes cabeceras de columna:
v Solicitud es el texto que el diseñador de trabajo puede ver en la interfaz de usuario del editor de
etapas.
v Tipo es el tipo de datos de la propiedad.
v Valor predeterminado es el texto que se utiliza si el diseñador del trabajo no suministra ningún valor.
v Descripción describe las propiedades.
0 Ningún rastreo 1
Propiedades de la etapa del
informe
Reintentos Largo 3 Opcional. El número de
reintentos si falla la
conexión.
Intervalo de reintentos Largo 15 Opcional. Número de
segundos que se debe
esperar entre reintentos si
la conexión falla.
Número de solicitudes de Serie 2 Necesaria si se utilizan
Telnet servicios de telnet. Número
total de solicitudes
previstas que se reciben
durante el proceso de inicio
de sesión en el servidor de
telnet.
Para la representación
binaria, los datos se
transfieren en bits
continuos como datos
IMAGE. Debe establecer las
"Columnas de anchura fija"
en Sí.
Nota: La modalidad
binaria no se soporta
cuando la etapa se ejecuta
en el lienzo paralelo. Para
transferir datos en
modalidad binaria, utilice
los tipos de datos binarios
o varbinarios con el "Tipo
de representación de datos"
fijado en ASCII.
Finalización de línea Lista [CR] [LF] Especifica la secuencia de
terminación de fila (fin de
(Terminación de estilo la línea) en el archivo
DOS) remoto.
Si "Tipo de representación
de datos" se establece en
ASCII, los valores válidos
son "sin terminación" (no
termination) y [CR] [LF].
Columnas de anchura fija Serie No Necesario. Indica si los
datos del archivo remoto
pueden estar con columnas
de anchura fija.
Si se establece en Activa, el
servidor FTP inicia las
conexiones.
Si se establece en Pasiva,
las conexiones se inician
desde el sistema principal
donde se ha instalado la
capa de motor. Permite
almacenar archivos en
sistemas principales que se
encuentran fuera del
cortafuegos basado en un
router.
Sistemas OpenVMS
digitales. Establézcalo en
Activos para los enlaces de
entrada de forma que el
servidor FTP inicie la
conexión para la
transferencia de datos. De
lo contrario, no se
aceptarán los datos.
Puede especificar cualquier mandato de UNIX para las siguientes propiedades de enlace: Telnet después
de mandato, Mandato de copia de seguridad de Telnet, Mandato de inicio de transacción, Mandato de
confirmación de transacción o Mandato de retrotracción de transacción. Por ejemplo, el siguiente mandato
de UNIX copia un archivo a otro archivo en un directorio diferente:
cp /nombre_vía_acceso/nombre_archivo1 /nombre_vía_acceso2/nombre_archivo2
Para la representación
binaria, los datos se
transfieren en bits
continuos como datos
IMAGE. Debe establecer las
"Columnas de anchura fija"
en Sí.
Nota: La modalidad
binaria no se soporta
cuando la etapa se ejecuta
en el lienzo paralelo. Para
transferir datos en
modalidad binaria, utilice
los tipos de datos binarios
o varbinarios con el "Tipo
de representación de datos"
fijado en ASCII.
Comprobar datos con Lista No Establezca Sí para utilizar
metadatos definiciones de metadatos a
fin de leer datos del archivo
remoto en lugar de utilizar
un terminador de línea
para identificar el final de
una fila. Se leerán los datos
hasta que se agoten los
metadatos.
Si se establece en No, el
final de la fila viene
determinado por la
secuencia de fin de la línea
[CR] [LF]
Si las "Columnas de
anchura fija" se establecen
en No, utilice el valor [CR]
[LF]. Si las "Columnas de
anchura fija" se establecen
en Sí y el "Tipo de
representación de datos" se
establece en ASCII, los
valores válidos son sin
terminación ni [CR] [LF]
(terminador de estilo DOS).
Si se establece en "Ninguna
terminación", "Comprobar
datos con metadatos" debe
estar fijado en Sí.
Columnas de anchura fija Serie No Necesario. Indica si los
datos del archivo remoto
pueden estar con columnas
de anchura fija.
Espacios entre columnas Largo 0 El número de espacios
entre las columnas de
anchura fija en el archivo
remoto. Es necesario si
"Columnas con anchura
fija" está establecido en Sí.
Delimitador de columna Char , (coma) Es necesario si "Columnas
con anchura fija" está
establecido en No. El
delimitador que separa los
campos de datos en el
archivo remoto. Puede
entrar un único carácter sin
comillas o el valor ASCII
del carácter que desea
utilizar.
Carácter de comilla Char " (comillas dobles) Opcional y válido
solamente si "Columnas
con anchura fija" está
establecido en No. El
carácter único se utiliza
para incluir un valor de
datos que contiene un
carácter delimitador como
datos. También puede
entrar el valor ASCII para
el carácter que desee
utilizar. Puede suprimir
"Carácter de comillas" si no
entra ningún valor.
Si se establece en Activa, el
servidor FTP inicia las
conexiones.
Si se establece en Pasiva,
las conexiones se inician
desde el sistema principal
donde se ha instalado la
capa de motor. Permite
almacenar archivos en
sistemas principales que se
encuentran fuera del
cortafuegos basado en un
router.
Si no especifica un valor o
dicho valor es 0, la etapa
configura automáticamente
un número de puerto
disponible para el usuario.
Si especifica un valor, éste
debe estar entre el 1025 y el
4999.
Representación de datos ASCII para los enlaces de entrada. Si establece Tipo de representación de
datos en ASCII:
v El servicio FTP se configura para el tipo de representación ASCII. El destinatario (host remoto)
convierte los datos del formato ASCII a su propio formato interno.
v Los datos de columna (por fila) se colocan en una fila formateada. El formato depende del valor de
Columnas de anchura fija. Si se establece en Sí, los datos se colocan en un almacenamiento intermedio
de caracteres. Los metadatos de columna determinan el tamaño asignado por columna. Si los datos de
columna son mayores que la anchura de columna, los datos se truncan a la anchura de columna de los
metadatos y se muestra un mensaje de aviso. Si se establece en No, los datos se colocan en un
almacenamiento intermedio de caracteres, separador por el delimitador de la columna configurada.
v Se añaden los caracteres de terminación [CR] [LF] a cada fila de datos. Los datos se envían a la
máquina remota para almacenarse como un archivo de texto.
Representación de datos binaria para los enlaces de salida. Si establece Tipo de representación de
datos en Binaria:
v Columnas de anchura fija debe establecerse en Sí.
v El servicio FTP se configura para el tipo de representación IMAGE. Los datos se envían desde la
máquina remota como bits contiguos sin conversión de caracteres.
v La secuencia de datos recibida de la máquina remota se analiza en filas de datos determinando la
longitud total de la fila. La longitud de la fila se calcula mediante la acumulación de la anchura de
cada columna y los valores asociados con Espacios entre columnas y Finalización de línea.
v La fila de datos se continúa analizando en datos de columna utilizando las mismas propiedades y
metadatos.
Nota: La modalidad binaria no está soportada en el lienzo del servidor paralelo. Consulte la propiedad
de entrada Tipo de representación de datos y la propiedad de salida Tipo de representación de datos.
Representación de datos binaria para los enlaces de entrada. Si establece Tipo de representación de
datos en Binaria:
v Columnas de anchura fija debe establecerse en Sí.
v El servicio FTP se configura para el tipo de representación IMAGE. Los datos se envían como bits
contiguos sin conversión de caracteres.
v Los datos de columna por fila se colocan en un almacenamiento intermedio de caracteres. Los
metadatos de columna determinan el tamaño asignado por columna. Si los datos de columna son
mayores que la anchura de columna, los datos se truncan a la anchura de columna de los metadatos y
se muestra un mensaje de aviso.
Nota: La modalidad binaria no está soportada en el lienzo del servidor paralelo. Consulte la propiedad
de entrada Tipo de representación de datos y la propiedad de salida Tipo de representación de datos.
La etapa Link Collector es una etapa activa que utiliza hasta 64 entradas y permite recopilar datos de los
enlaces y direccionarlos a un enlace de salida individual. La etapa espera que el enlace de salida utilice
los mismos metadatos que los enlaces de entrada.
La etapa Link Collector puede utilizarse con una etapa Link Partitioner para aprovechar un sistema
multiprocesador y procesar los datos en paralelo. La etapa Link Partitioner particiona los datos y los
procesa en paralelo y, a continuación, la etapa Link Collector vuelve a recopilarlos conjuntamente antes
de grabarlos en un único destino. Para conocer las ventajas, consulte “Trabajos y procesos de IBM
InfoSphere DataStage” en la página 5 para ver cómo se ejecutan los trabajos de IBM InfoSphere DataStage
como procesos.
El siguiente diagrama ilustra cómo puede utilizarse la etapa Link Collector en un trabajo de la siguiente
manera:
Para que este trabajo pueda compilarse y ejecutarse según lo previsto en un sistema multiprocesador,
debe tener activado el almacenamiento intermedio entre procesos, ya sea a nivel de proyectos utilizando
el cliente del Administrador o a nivel de trabajos en el recuadro de diálogo Propiedades del trabajo.
Los archivos temporales generados por esta etapa se colocan en el directorio especificado por la variable
de entorno TEMP. Utilice el cliente del Administrador para establecer la variable TEMP en cada proyecto.
Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.
Seleccione una rutina en la lista. Esta lista contiene todas las rutinas definidas como una Subrutina
anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado para el
argumento de entrada de la rutina en el campo Valor de entrada.
Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa Link
Collector.
Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.
La etapa Link Partitioner es una etapa activa que utiliza una entrada y permite distribuir las filas
particionadas entre un máximo de 64 enlaces de salida. La etapa espera que los enlaces de salida utilicen
los mismos metadatos que el enlace de entrada.
El siguiente diagrama ilustra cómo puede utilizarse la etapa Link Partitioner en un trabajo de la siguiente
manera.
Para que este trabajo pueda compilarse y ejecutarse según lo previsto en un sistema multiprocesador,
debe tener activado el almacenamiento intermedio entre procesos, ya sea a nivel de proyectos utilizando
el cliente del Administrador o a nivel de trabajos en el recuadro de diálogo Propiedades del trabajo.
Los archivos temporales generados por esta etapa se colocan en el directorio especificado por la variable
de entorno TEMP. Utilice el cliente del Administrador para establecer la variable TEMP en cada proyecto.
Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.
Seleccione una rutina en la lista. Esta lista contiene todas las rutinas definidas como una Subrutina
anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado para el
argumento de entrada de la rutina en el campo Valor de entrada.
Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa Link
Partitioner.
Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.
Etapas Merge
La etapa Merge permite combinar dos archivos secuenciales en uno o varios enlaces de salida. Merge,
una etapa pasiva, no tiene enlaces de entrada, pero tiene al menos un enlace de salida. Utilice la interfaz
gráfica de usuario (GUI) para definir la operación de unión que se utiliza para fusionar dos archivos. Los
dos archivos de entrada que se fusionarán deben ser archivos de texto secuenciales.
Funcionalidad
La etapa Merge da soporte a la siguiente funcionalidad:
v Combinación de dos archivos de texto secuenciales.
v Elección entre varios tipos de uniones diferentes.
v Soporte para soporte multilingüístico sólo en la modalidad automática.
Nota: También puede incluir un parámetro de trabajo en la vía de acceso del directorio.
Para acceder a Espacio máximo en VM para la Hash Table, pulse con el botón derecho del ratón sobre el
icono Fusionar en el lienzo y seleccione Estilo de cuadrícula. Aparece el editor de estilo de cuadrícula.
Vaya al separador Propiedades de la página Salida. Desplácese en la lista de propiedades hasta que
llegue a Espacio máximo en VM para la Hash Table.
El separador General
Si selecciona la página Salida, se abrirá el separador General.
Nota: El botón Columnas... elabora un listado de las columnas en el enlace de salida y sólo se incluye
por motivos de compatibilidad con otras etapas.
v Nivel de rastreo. Especifica un nivel de rastreo para el enlace de salida. El nivel de rastreo especifica el
tipo de información que debe incluirse en el archivo de registro de trabajo. Puede especificar los
siguientes niveles de rastreo:
– 0 - No se graba información en el archivo de registro
– 1 - Las propiedades del enlace de salida se graban en el archivo de registro
Para especificar el formato del segundo archivo de entrada, pulse el separador Formato de segundo
archivo. Los campos y los recuadros de selección son idénticos para el segundo archivo. A continuación,
se describe cada campo y recuadro de selección de las páginas Formato de primer archivo o Formato de
segundo archivo:
Mediante las páginas Columnas de primer archivo y Columnas de segundo archivo puede especificar lo
siguiente:
v Nombres de columnas del primer y del segundo archivo de entrada secuencial
v Características del archivo secuencial, incluyendo tipo de SQL, longitud, escala, capacidad de nulos y
visualización de la columna
v Correlación de juego de caracteres utilizada para la columna
Puede utilizar información de una tabla existente para definir las columnas en el primer o el segundo
archivo de entrada. Las definiciones de tabla especifican los datos utilizados en cada etapa de un trabajo
de InfoSphere DataStage y se almacenan en el repositorio.
Puede entrar información sobre columnas manualmente especificando dicha información en la página
Columnas del primer archivo.
Entre un nombre de columna en Lista de nombres de columna y utilice los botones de Acciones de
columna (Añadir, Insertar Antes, Modificar, Eliminar o Eliminar todo) para especificar dónde colocar
los nombres en la Lista de nombres de columna.
Una vez haya especificado los nombres de las columnas y la correspondiente información necesaria,
puede grabar dicha información en una tabla nueva. Para guardar la información de columna en una
tabla, pulse Guardar.... Se abrirá el recuadro de diálogo Guardar definición de tabla. El recuadro de
diálogo Guardar definición de tabla contiene los campos siguientes:
v Tipo de fuente de datos. El tipo de datos grabado en la tabla. El tipo de fuente de datos puede ser una
fuente de datos ODBC, una tabla de UniVerse, un archivo hash (UniVerse), un archivo de UniData y
un archivo secuencial o una etapa. La definición de tabla se almacena de acuerdo con la fuente de
datos en la ramificación Definiciones de tabla. El valor predeterminado es Guardado.
v Nombre de la fuente de datos. Constituye la segunda parte del identificador de la definición de tabla
y proporciona el nombre creado bajo la ramificación de tipo de fuente de datos. Facilita un medio para
realizar un seguimiento de dónde se ha originado la definición de datos. El valor predeterminado es el
nombre del enlace.
v Nombre de tabla/archivo. El nombre de la tabla o del archivo que contiene los datos. El valor
predeterminado es el nombre del enlace.
El separador Correlación
Debe especificar las claves en el primer y el segundo archivo de entrada secuencial para que se utilicen
en la operación de unión. Para especificar las claves, pulse el separador Correlación en la página Salida.
Se abrirá el separador Correlación.
Seleccione claves del Primer (y el Segundo) Nombre de columna de archivos en la parte izquierda de la
página y arrástrelos a la Primera (y a la Segunda) Clave de columna de archivos a la derecha. Estas
claves se utilizan en la operación de unión para comparar dos archivos.
Puede especificar varias claves para la operación de unión. Si utiliza varias claves, debe tener el mismo
número de claves en las listas de la Primera clave de columna de archivos y en la Segunda clave de
columna de archivos.
Para suprimir una entrada que ha realizado, selecciónela y pulse con el botón derecho del ratón Borrar
entrada del menú de atajo.
Debe especificar el contenido de las columnas que deben incluirse en el enlace de salida. Utilice la página
Correlación para especificar el contenido de las columnas.
En la página Correlación, los Nombres de columna del primer archivo y Nombres de columna del
segundo archivo ya están definidos. Se han definido en la página Propiedades de archivos de entrada.
En la página Correlación, debe especificar qué columnas de los archivos de entrada desea incluir en el
enlace de salida. Para especificar el contenido de una columna en el enlace de salida, seleccione una
columna en el recuadro de lista Nombres de columna del primer archivo o Nombres de columna del
segundo archivo y arrastre la columna a la lista Correlación de la columna de entrada. El Nombre de
columna de salida se genera automáticamente. Las propiedades de las columnas en el enlace de salida se
derivan de los del archivo de entrada. Debe incluir una Clave de columna del primer archivo y una
Clave de columna del segundo archivo en la Lista de columnas.
Si desea especificar de forma explícita los nombres y las propiedades de las columnas en el enlace de
salida, vaya a la página Columnas, tal como se describe en “El separador Columnas” en la página 95.
Puede seleccionar varias columnas a la vez para arrastrarlas de la lista Nombres de columna del primer
(o segundo) archivo a la lista Correlación de la columna de entrada. Para seleccionar varias columnas,
seleccione la primera columna y mantenga pulsada la tecla Control hasta que se hayan resaltado todas
las columnas que desea. O bien, mantenga pulsada la tecla Mayús y pulse para seleccionar varias
columnas.
Puede pulsar el botón derecho del ratón para suprimir un elemento de la lista Correlación de la columna
de entrada. Para suprimir columnas del enlace de salida, pulse el separador Columnas y suprima las
columnas tal como se describe en “El separador Columnas” en la página 95.
Nota: Si cambia los Nombres de columna del primer archivo (o el segundo archivo) a la izquierda de la
página, deberá comprobar la información de correlación (es decir, las claves de correlación y la lista de
columnas) a la derecha de la página. Si los nombres de columna de la derecha de la página no coinciden
con los de la izquierda, arrastre los nombres de columna correctos de la izquierda a la derecha.
Tal como se describe en Separadores Columnas del primer y del segundo archivo, puede utilizar la
información de una tabla existente para especificar las columnas. Consulte dicha sección para ver cómo
puede utilizar el botón Cargar... para transferir información de una tabla.
Nota: Debe establecer todas las columnas en "Con posibilidades de nulos", excepto si establece la fusión
en Unión interna pura, tal como se describe en Tipo de unión.
En la página Columnas, puede suprimir las columnas que ha definido en el enlace de salida. Para
suprimir columnas en el enlace de salida:
1. Seleccione la fila que desea suprimir.
2. Pulse la tecla Suprimir.
Etapas Pivot
Pivot, una etapa activa, correlaciona conjuntos de columnas en una tabla de entrada con una única
columna de una tabla de salida. Este tipo de correlación se denomina girar.
Esta etapa gira datos horizontales, es decir, columnas dentro de una única fila en muchas filas. Repite un
segmento de datos que normalmente está orientado a claves de cada columna girada de forma que cada
fila de salida contiene un valor separado.
La etapa no tiene propiedades de etapa ni de enlace. Simplemente correlaciona filas de entrada con filas
de salida.
Funcionalidad
Funcionalidad soportada
Funcionalidad no soportada
Giro de datos
Un giro horizontal correlaciona las columnas de una fila con varias filas, es decir, repite un segmento de
datos para cada columna girada. Los datos normalmente están orientados a las claves.
Utilice el campo Derivación en la cuadrícula de columna del enlace de salida para especificar los giros.
Un campo vacío indica que hay un nombre de columna de entrada con el mismo nombre que la columna
de salida. Esta columna de entrada está correlacionada con la columna de salida correspondiente.
Derivación individual
Si el campo Derivación de una columna de salida muestra un único nombre de columna, la columna de
entrada que tiene el mismo nombre que el especificado en el campo Derivación se correlaciona con esta
columna de salida. Una columna que tenga una derivación individual se trata como una clave y se
proyecta de la misma manera en cada fila de salida derivada de la fila de entrada individual.
Varias derivaciones
Cuando una columna de salida se deriva de más de una columna de entrada, es decir, cuando aparecen
varios nombres de columna de entrada en el campo Derivación, se genera una tabla de salida con más
filas que la tabla de entrada. Cada columna de entrada especificada en el campo Derivación para las
columnas de salida se correlaciona con la columna de salida. Se crea una nueva fila para cada una de las
columnas de entrada especificada.
Ejemplos
Los ejemplos que se describen en las siguientes secciones muestran un giro en los datos de ventas del
primer trimestre para una determinada empresa. Estos ejemplos ilustran los conceptos de un giro
horizontal.
El separador Columnas de la página Entradas contiene tres columnas de entrada con datos de ventas:
Ventas_ENE, Ventas_FEB y Ventas_MAR. Las columnas están estructuradas de la forma siguiente:
Tabla 10. Columnas de entrada
Nombre de la columna Tipo de SQL Longitud Escala
CUSTID Entero 10
LNAME VarChar 10
Ventas_ENE Decimal 10 2
Ventas_FEB Decimal 10 2
Ventas_MAR Decimal 10 2
Nota: En toda columna, el tipo de datos documentado en Tipo de SQL debe ser el mismo que el tipo de
datos de la tabla de origen.
Los datos de las filas de origen para las columnas de entrada tienen la apariencia siguiente:
Tabla 11. Filas de origen de entrada
CUSTID LNAME Ventas_ENE Ventas_FEB Ventas_MAR
100 Smith $1,234.00 $1,456.00 $1,578.00
101 Yamada $1,245.00 $1,765.00 $1,934.00
El separador Columnas del enlace de salida contiene una columna de Ventas derivada de las tres
columnas de entrada: Ventas_ENE, Ventas_FEB y Ventas_MAR. Las columnas están estructuradas de la
forma siguiente:
Tabla 12. Columnas de salida
Nombre de la
columna Derivación Tipo de SQL Longitud Escala
CUSTID Entero 10
Apellido LNAME VarChar 10
Ventas Ventas_ENE, Ventas_FEB y Decimal 10 2
Ventas_MAR
Nota: En toda columna, el tipo de datos documentado en Tipo de SQL debe ser el mismo que el tipo de
datos de la tabla de destino.
La columna de salida que se deriva de una única columna de entrada es un valor clave. El valor clave se
repite en cada fila que resulta de la correspondiente fila de entrada.
El número máximo de filas de salida que resulta de una única fila de entrada viene determinado por la
columna de salida que se deriva de la mayoría de columnas de entrada. Las tres filas de salida de los
datos de ventas que resultan de cada fila de entrada en este ejemplo son de la manera siguiente:
Si el giro incluye cualquier derivación con menos del número máximo de filas de salida pero más de una
fila, la fila de salida contendrá un valor nulo para cada columna en la que no esté disponible una
derivación.
Por ejemplo, supongamos que se pide al cliente que realice los pagos en su cuenta dos veces al año, en
junio y en diciembre. Es posible que los datos de origen sean como los siguientes:
Tabla 14. Ejemplo de pagos
CUSTID LNAME Ventas_ENE Ventas_FEB Ventas_MAR Pagos_JUN Pagos_DIC
100 Smith $1,234.00 $1,456.00 $1,578.00 $6,298.00 $7,050.00
101 Yamada $1,245.00 $1,765.00 $1,934.00 $7,290.00 $7,975.00
Supongamos que el enlace de salida contiene una derivación adicional para pagos:
Tabla 15. Columnas de salida con detalles de pagos
Nombre de la
columna Derivación Tipo de SQL Longitud Escala
CUSTID Entero 10
Apellido LNAME VarChar 10
Ventas Ventas_ENE, Ventas_FEB y Decimal 10 2
Ventas_MAR
Pagos Pagos JUN, Pagos DIC
Los datos de salida en las filas de destino después del giro podrían ser los siguientes:
Tabla 16. Datos de salida en filas de destino después de giro
CUSTID LNAME Ventas Pagos
100 Smith $1,234.00 $6,298.00
100 Smith $1,456.00 $7,050.00
100 Smith $1,578.00 nulo
101 Yamada $1,245.00 $7,290.00
101 Yamada $1,765.00 $7,975.00
101 Yamada $1,934.00 nulo
Durante una operación normal de la etapa Row Merger, cada fila de entrada con varias columnas da
como resultado una fila de salida de una única columna. La etapa también ofrece recursos de
concatenación, no obstante, estos recursos permiten concatenar el resultado de cada fila de entrada en
una única serie a la que se da salida cuando la etapa detecta una señal de fin de los datos (EOD) o de fin
de la transmisión (EOT) (lo que significa que no se esperan más filas de entrada).
Nota: La etapa Row Merger se parece a la etapa Sequential File de servidor. La diferencia radica en que,
mientras la etapa Sequential File graba en un archivo, la etapa Row Merger realiza la salida en un enlace.
Funcionalidad
Funcionalidad soportada
Página Entrada
La página Entrada contiene varios separadores que describen los datos que están entrando en la etapa
Row Merger.
El separador General contiene un campo de descripción que permite entrar una descripción opcional del
enlace de entrada. El separador Formato y el separador Columnas se describen más abajo.
El separador Formato también tiene un botón Cargar. Si tiene definiciones de tabla que incluyen
información sobre el formato, puede cargar detalles sobre el formato desde estas definiciones de tabla
directamente a la página Formato:
1. Pulse Cargar. Aparecerá el recuadro de diálogo Cargar definiciones de tabla.
2. Realice una búsqueda para encontrar la definición de tabla que contenga el formato que desea cargar.
3. Pulse Aceptar. Se cargarán los detalles sobre el formato.
Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están leyendo desde
las filas de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna.
Separador General
El separador General identifica la columna que contiene los datos fusionados. El separador General
contiene los campos siguientes:
v Nombre de la columna que se debe fusionar. Una lista contiene una lista de las columnas de salida
definidas para esta etapa. Seleccione la columna en la que quiere que se produzca la salida de los datos
fusionados.
v Descripción. Descripción opcional del enlace de salida.
Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están grabando al
enlace de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna. El
campo Derivación no se utiliza.
Como mínimo, debe definir una columna que lleve los datos fusionados. También puede definir
columnas adicionales para que lleven datos como entrada en la etapa.
Durante una operación normal de la etapa Row Splitter, cada serie de entrada procesada da como
resultado una fila de salida de múltiples columnas. En algunos casos, sin embargo, una única serie de
entrada puede representar muchas filas de datos de entrada. En este caso, la etapa puede
desconcatenarlas en filas separadas para la salida.
Nota: La etapa Row Splitter se parece a la etapa Sequential File de servidor. La diferencia radica en que,
mientras la etapa Sequential File lee a partir de un archivo, la etapa Row Splitter lo hace desde un enlace.
Funcionalidad
Funcionalidad soportada
Página Entrada
La página Entrada contiene varios separadores que describen los datos que están entrando en la etapa
Row Splitter.
Separador General
Utilice el separador General para identificar el nombre de la columna que contiene la serie a partir de la
que la etapa extrae las columnas. El separador General contiene los campos siguientes:
v Nombre de la columna que se debe partir. Una lista contiene una lista de las columnas de entrada
definidas para esta etapa. Seleccione la columna que contiene la serie a partir de la que la etapa extrae
las columnas.
v Descripción. Entre una descripción opcional del enlace de entrada.
Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están leyendo desde
el enlace de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna.
Como mínimo, debe definir una columna que lleve la serie de datos que la etapa está partiendo. Si es
necesario, también puede definir columnas adicionales. Todas las columnas que se definan aquí y en el
separador Columnas de la página Salida se pasarán directamente a través de la etapa.
Página Salida
La página Salida contiene varios separadores que describen los datos editados por la etapa Row Splitter.
El separador General contiene un campo de descripción que permite entrar una descripción opcional del
enlace de entrada. El separador Formato y el separador Columnas se describen más abajo.
Separador Formato
Utilice este separador para especificar cómo se formatea la serie de entrada, de forma que la etapa pueda
separar las columnas. El separador contiene los campos siguientes:
v Columnas de anchura fija. Seleccione este recuadro de selección si los datos entrantes están en un
formato de anchura fija. La anchura de cada campo se toma desde el tamaño de visualización de SQL
de las columnas de salida (establecido en la columna Visualización en la Cuadrícula de columnas de la
página Entradas, separador Columnas). De forma predeterminada, esta opción está borrada.
v Supresión de advertencias de truncamiento de filas. Si la fila de entrada contiene más campos de
datos que deban separarse en columnas de los que haya definido en el separador Columnas, por lo
general recibirá avisos sobre filas demasiado largas cuando ejecute el trabajo. Si desea suprimir estos
mensajes (por ejemplo, es posible que sólo esté interesado en las tres primeras columnas y desee
prescindir del resto), seleccione este recuadro de selección.
El separador Formato también tiene un botón Cargar. Si tiene definiciones de tabla que incluyen
información sobre el formato, puede cargar detalles sobre el formato desde estas definiciones de tabla
directamente a la página Formato:
1. Pulse Cargar. Aparecerá el recuadro de diálogo Cargar definiciones de tabla.
2. Realice una búsqueda para encontrar la definición de tabla que contenga el formato que desea cargar.
3. Pulse Aceptar. Se cargarán los detalles sobre el formato.
Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están grabando al
enlace de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna.
Etapas Sort
Ordena una etapa activa, ordena varios datos. Ordena cantidades pequeñas de datos de forma eficiente
en la memoria siempre y cuando disponga de la suficiente memoria. Ordena grandes cantidades de datos
utilizando el almacenamiento de disco temporal, no el espacio de intercambio de memoria virtual.
En InfoSphere DataStage, la etapa Sort recibe una secuencia de filas que utiliza un único enlace de
entrada. Las filas ya están separadas en valores de columna individuales. Los valores para las
propiedades de la etapa y los atributos de columna especifican cómo ordenar estas filas. Las filas
ordenadas resultantes se graban como valores de columnas en un único enlace de salida.
La etapa Sort debe tener un enlace de entrada y un enlace de salida. Las consideraciones sobre las
columnas en las filas para los enlaces de entrada y de salida incluyen lo siguiente:
v Un único enlace de secuencia de entrada proporciona filas de datos que se deben ordenar. El tipo de
columna de la columna de entrada debe poder convertirse en el tipo de columnas de salida.
v Un único enlace de secuencia de salida recibe filas de datos ordenadas. Las filas de salida tienen el
mismo orden de columnas que las columnas de entrada. Los nombres de las columnas de salida
pueden diferir de los nombres de las columnas de entrada.
El tipo de datos de enlace de salida para cada columna determina el tipo de comparación que se debe
realizar:
v Comparación numérica para números
v Fecha y hora
v Serie de caracteres (orden de izquierda a derecha para series e indicaciones de hora y fecha)
Funcionalidad
Funcionalidad soportada
Funcionalidad no soportada
Propiedades configurables
Puede configurar propiedades para mejorar el rendimiento de la etapa Sort.
Esta propiedad se utiliza cuando el número de filas dentro del enlace de entrada excede el valor
suministrado por esta propiedad. El algoritmo de ordenación ordena filas por múltiples de este valor y
almacena estos grupos ordenados de filas en archivos temporales. Estos archivos temporales, a
continuación, se fusionan para la ordenación final.
Ejemplo
Suponga que el enlace de entrada contiene 100.000 filas de datos y que Filas máx. en memoria virtual se
establece en 10.000 filas.
El algoritmo de ordenación lee las 10.000 primeras filas del enlace de entrada, realiza una ordenación
intermedia y, a continuación, almacena los datos ordenados en un archivo temporal. El algoritmo
prosigue agrupando porciones de 10.000 filas desde el enlace de entrada y almacenando los resultados
ordenados en archivos temporales unívocos hasta que se produce una de las siguientes condiciones:
v Todos los datos de entrada se han procesado en archivos temporales. El número total de archivos
temporales es menor que el valor especificado en Máx. de archivos abiertos.
Tras las ordenaciones intermedias, los 10 archivos temporales se fusionan y se ordenan de forma
conjunta y la ordenación final se graba en el enlace de salida.
v El número de archivos temporales es igual al valor especificado en Máx. de archivos abiertos.
Si, por ejemplo, Máx. de archivos abiertos está fijado en 5, las primeras 50.000 filas se procesan como
cinco archivos temporales, cada uno de ellos con 10.000 filas. Estos archivos temporales se fusionan de
forma conjunta para formar un nuevo archivo temporal con 50.000 filas de datos ordenados. El
algoritmo toma las siguientes 10.000 filas del enlace de entrada y prosigue con las ordenaciones
intermedias. Este algoritmo prosigue recursivamente hasta que se procesan todos los datos.
Nota: Si los valores de estos parámetros son demasiado restrictivos, un se produce un alto número de
ordenaciones intermedias con una fusión de archivos constante.
Criterios de ordenación
La etapa Sort acumula filas de entrada en la memoria, limitadas por Filas máx. en memoria virtual.
Clasifica las filas acumuladas, almacenándolas en archivos de disco, si es necesario. (Los conjuntos de
ordenación pequeños se pueden almacenar en la memoria.) Esta etapa fusiona estos archivos
almacenados y graba las filas en el enlace de salida.
Puede entrar los valores listados en la tabla siguiente para especificar el orden de las filas, según la
distinción de mayúsculas y minúsculas en la búsqueda
ASCENDING DESCENDING
El ejemplo siguiente indica que las filas resultantes deben ordenarse en un orden ascendente sensible a la
coincidencia de mayúsculas y minúsculas en la columna REGION del enlace de entrada. Utiliza un
archivo de correlación externo denominado CSM en el directorio C:\USER en la columna CUSTOMER y
un orden descendente en la columna SALE_PRICE (consulte Ordenar especificaciones en “Propiedades
de la etapa” ).
REGION asc, CUSTOMER ASC C:\USER\CSM, SALE_PRICE DSC
Una correlación de orden de clasificación es un archivo delimitado por comas que contiene dos columnas.
La columna izquierda es un código de carácter único (en una codificación única o de varios bytes, según
convenga). Utilice un carácter de escape para entrar caracteres delimitadores y valores de bytes
arbitrarios.
La columna derecha es un valor entero que utiliza caracteres ASCII para los dígitos decimales. La
columna contiene el peso numérico utilizado al comparar los correspondientes caracteres en dos series.
Cuanto más bajo sea el número, más pronto ordenará. Si dos caracteres tienen el mismo peso, entonces se
consideran equivalentes. Cualquier carácter que no esté en la correlación se considera más alto que
cualquier otro carácter dentro de la correlación. Por ejemplo, la siguiente correlación de secuencia
contiene estas columnas delimitadas por comas:
Por ejemplo, puede proporcionar una correlación de orden de clasificación para especificar la secuencia
de correlación del alfabeto francés.
Propiedades de la etapa
La tabla siguiente incluye estas cabeceras de columna:
v Solicitud es el texto que el diseñador de trabajo puede ver en la interfaz de usuario del editor de
etapas.
v Valor predeterminado es el texto que se utiliza si el diseñador del trabajo no suministra ningún valor.
v Descripción describe las propiedades.
Nota: El editor de la etapa Transformer es parecido para los trabajos de servidor, paralelo y de sistema
principal, aunque la funcionalidad varía. En estos temas sólo se describe la funcionalidad del trabajo de
servidor. Para la funcionalidad de trabajo paralelo o de sistema principal, consulte las guías que describen
los trabajos paralelo y de sistema principal.
Cuando edita una etapa Transformer, aparece el Editor de transformador. A continuación, se muestra un
ejemplo de etapa Transformer. En este ejemplo, se han definido metadatos para los enlaces de entrada y
salida:
Área de enlaces
El área superior muestra los enlaces hacia y desde la etapa Transformer, donde se pueden ver las
columnas y las relaciones entre ellas.
El área de enlaces es donde se definen todas las definiciones de columna, expresiones de clave y variables
de etapa.
El área de enlaces está dividida en dos paneles; puede arrastrar la barra divisoria entre ellos para cambiar
el tamaño de los paneles, que depende el uno del otro. También hay una barra de desplazamiento
horizontal que permite desplazar la vista a la izquierda o la derecha.
El panel izquierdo muestra los enlaces de entrada y el panel derecho muestra los enlaces de salida. El
enlace de entrada que se muestra en la parte superior del panel izquierdo siempre es el enlace primario.
Los enlaces siguientes son enlaces de referencia. Para todos los tipos de enlaces, los campos clave se
muestran en negrita. Los campos clave del enlace de referencia que no tienen ninguna expresión definida
aparecen en rojo (o el color definido en Herramientas → Opciones), al igual que las columnas de salida
que no tienen ninguna derivación definida.
Área de metadatos
El área inferior muestra los metadatos de columna de los enlaces de entrada y de salida. De nuevo, esta
área se divide en dos paneles: el izquierdo muestra los metadatos del enlace de entrada y el derecho
muestra los metadatos del enlace de salida.
Los metadatos correspondientes a cada enlace se muestran en una cuadrícula incluida en una página
tabulada. Pulse el separador para traer al frente al enlace necesario. Este enlace también se selecciona en
el área de enlaces.
Menús de atajos
Los menús de atajos del Editor de transformador se muestran pulsando con el botón derecho del ratón
sobre los enlaces en el área de enlaces.
Los menús varían ligeramente, dependiendo de si pulsa un enlace de entrada, un enlace de salida o una
variable de etapa. El menú del enlace de entrada ofrece operaciones en las expresiones de clave, el menú
del enlace de salida ofrece operaciones en las derivaciones y el menú de la variable de etapa ofrece
operaciones en las variables de etapa.
Si pulsa con el botón derecho del ratón sobre el área de metadatos del Editor de transformador, se abren
los menú de atajos de edición de cuadrícula estándar.
En esta sección se explican algunos de los conceptos básicos para utilizar la etapa Transformer.
Enlaces de entrada
El origen de datos principal está unido a la etapa Transformer a través del enlace primario, pero la etapa
también puede tener un número cualquiera de enlaces de entrada de referencia.
Las columnas de entrada de referencia pueden designarse como campos de clave. Puede especificar las
expresiones de clave que se utilizan para evaluar los campos de clave. El uso más común de la expresión
de clave es para especificar un equijoin, que es un enlace entre una columna de enlace primario y una
columna de enlace de referencia. Por ejemplo, si los datos de entrada primarios contienen nombres y
direcciones, y una entrada de referencia contiene nombres y números de teléfono, la columna nombre del
enlace de referencia se marca como un campo de clave y la expresión de clave hace referencia a la
columna nombre del enlace primario. Durante el proceso, el nombre en la entrada primaria se busca en
la entrada de referencia. Si los nombres coinciden, los datos de referencia se consolidan con los datos
primarios. Si los nombres no coinciden, es decir, si no hay ningún registro en la entrada de referencia que
coincida con la expresión proporcionada, todas las columnas especificadas para la entrada de referencia
se establecen en el valor nulo.
Cuando un enlace de referencia se origina en una etapa UniVerse o ODBC, puede buscar múltiples filas
desde la tabla de referencia. Las filas se especifican mediante una clave foránea, por oposición a la clave
primaria que se utiliza para la búsqueda de filas individuales.
Enlaces de salida
Puede tener un número cualquiera de enlaces de salida de la etapa Transformer.
Si lo desea, puede pasar algunos datos directamente a través de la etapa Transformer sin modificarlos,
pero es muy probable que desea transformar los datos de algunas columnas de entrada antes de pasarlos
a la etapa Transformer.
Para especificar una operación de este tipo, escriba una expresión BASIC o seleccione una transformación
para aplicarla a los datos. IBM InfoSphere DataStage tiene varias transformaciones incorporadas, o bien
puede definir sus propias transformaciones personalizadas que se almacenan en el repositorio y pueden
reutilizarse según sea necesario.
El origen de una columna del enlace de salida se define en la celda Derivación de dicha columna con el
editor de transformador. Puede utilizar el editor de expresiones para especificar expresiones o
transformaciones en esta celda. También puede arrastrar simplemente una columna de entrada a la celda
Derivación de la columna de salida, para pasar los datos directamente a través de la etapa Transformer.
Asimismo, para especificar detalles de derivación para columnas de salida individuales, también puede
especificar restricciones que operen en enlaces de salida completos. Una restricción es una expresión
BASIC que especifica criterios que los datos deben cumplir antes de que puedan pasarse al enlace de
salida. También puede especificar un enlace de rechazo, que es un enlace de salida que transporta todos
los datos no generados en otros enlaces, es decir, las columnas que no cumplen los criterios.
Cada enlace de salida se procesa uno a uno. Si la expresión de restricción se evalúa en TRUE para una
fila de entrada, la fila de datos se genera en dicho enlace. Y a la inversa, si una expresión de restricción se
evalúa en FALSE para una fila de entrada, la fila de datos no se genera en dicho enlace.
Las expresiones de restricción en distintos enlaces son independientes. Si tiene más de un enlace de
salida, una fila de entrada puede hacer que se genere una fila de datos a partir de algunos enlaces de
salida, de ninguno o de todos.
Por ejemplo, si considera los datos que provienen de una tienda de pintura, puede incluir información
sobre un número cualquiera de distintos colores. Si desea separar los colores en archivos diferentes,
deberá configurar distintas restricciones. Puede generar la información sobre la pintura verde y azul en
LinkA, la pintura roja y amarilla en LinkB, y la pintura negra en LinkC.
Si los datos de entrada contienen información sobre la pintura blanca, esta no cumple ninguna restricción
y no se genera la fila de datos en los enlaces A, B o C, pero sí se generará en el enlace de rechazo. El
enlace de rechazo se utiliza para direccionar datos a una tabla o un archivo que sirve de "contenedor
comodín" para las filas que no se generan en ningún otro enlace. La tabla o el archivo que contiene estos
rechazos se representa en otra etapa del diseño de trabajo.
Puede arrastrar varias columnas, expresiones de clave o derivaciones. Utilice las teclas estándar del
Explorador cuando seleccione las celdas de la columna de origen y continúe como para una celda
individual.
Puede arrastrar y soltar el conjunto completo de columnas arrastrando el título del enlace.
Para utilizar los recursos de buscar y sustituir, abra el recuadro de diálogo Buscar y sustituir de la
siguiente manera:
v Pulse el botón Buscar y sustituir en la barra de herramientas
v Elija Buscar y sustituir en el menú de atajos
v Pulse Control-F
Pulse F3 para repetir la última búsqueda que ha realizado sin abrir el recuadro de diálogo Buscar y
sustituir.
Recursos de selección
Si trabaja en un trabajo complejo donde hay varios enlaces, de varias columnas cada uno, que entran y
salen en la etapa Transformer, puede utilizar el recurso de selección de columna para seleccionar varias
columnas. Este recurso también está disponible en los separadores Correlación de algunas etapas de
trabajo paralelo.
Cuando copia columnas, se crea una nueva columna con los mismos metadatos que la columna desde la
que se ha copiado.
Para suprimir una columna desde el editor de transformador, seleccione la columna que desee suprimir y
pulse Cortar o elija Suprimir columna en el menú de atajos.
Si una derivación aparece en rojo (o el color definido en Herramientas → Opciones), significa que el
editor de transformador la considera incorrecta. (En algunos casos, simplemente significa que la
derivación no cumple estrictamente las reglas del patrón de uso del motor de servidor, pero funcionará
correctamente).
Si una columna de enlace de salida tiene definida una derivación que contiene las columnas de enlace de
entrada, se dibuja una línea de relación entre la columna de entrada y la columna de salida. Puede haber
varias líneas de relación que entran o salen de las columnas. Utilice el botón de la barra de herramientas
para elegir si desea ver las relaciones de todos los enlaces o sólo las relaciones de los enlaces
seleccionados.
Esta característica permite ahorrar tiempo y establecer automáticamente las columnas en un enlace de
salida para derivarlas de las columnas coincidentes en un enlace de entrada. Con esta característica,
puede rellenar todas las derivaciones de enlace de salida para direccionar los datos de las columnas de
entrada correspondientes, y volver atrás y editar las columnas de enlace de salida individuales en las que
desee una derivación diferente.
Nota: La coincidencia automática no tiene en cuenta la incompatibilidad de tipos de datos entre las
columnas que relacionadas; las derivaciones se establecen independientemente.
El recuadro de diálogo Sustitución de expresiones permite realizar el mismo cambio en las expresiones de
todas las columnas seleccionadas actualmente en un enlace. Por ejemplo, si desea añadir una llamada a la
función trim() alrededor de todas las expresiones de columna de salida de serie de un enlace, puede
hacerlo en dos pasos. En primer lugar, utilice el recuadro de diálogo Seleccionar para seleccionar todas
las columnas de salida de la serie. A continuación, utilice el recuadro de diálogo Sustitución de
expresiones para aplicar una llamada trim() alrededor de cada uno de los valores de expresión existentes
en las columnas seleccionadas.
Puede elegir entre la sustitución de la expresión completa o la sustitución de una parte de la expresión.
Expresión completa:
Con esta opción, la expresión completa existente de cada columna se sustituye por el valor de sustitución
especificado. Este valor de sustitución puede ser un valor completamente nuevo, pero normalmente será
un valor basado en el valor de la expresión original. Cuando se especifica el valor de sustitución, el valor
existente de la expresión de la columna puede incluirse en este nuevo valor incluyendo "$1". El valor
puede incluirse varias veces.
Se sustituirá por:
trim(DSLink3.col1)
Parte de la expresión:
Con esta opción, sólo se sustituye una parte de cada expresión seleccionada, en lugar de la expresión
completa. La parte de la expresión que se sustituye está especificada por una coincidencia de expresión
regular.
Es posible que más de una parte de una serie de una expresión coincida con la expresión regular
especificada. Si se selecciona Sustituir todas las apariciones, cada aparición de una coincidencia se
actualizará con el valor de sustitución especificado. Si no se selecciona, sólo se sustituirá la primera
aparición.
Al sustituir parte de una expresión, el valor de sustitución especificado puede incluir dicha parte de la
expresión original que se está sustituyendo. Para ello, la expresión regular especificada debe tener el
valor entre paréntesis. "$1" en el valor de sustitución representará el texto coincidente. Si la expresión
regular no se incluye entre paréntesis, "$1" será simplemente el texto "$1".
Para el uso de expresiones regulares complejas, se pueden incluir subconjuntos del texto de la expresión
regular entre paréntesis en lugar de todo el texto. En este caso, toda la parte coincidente de la expresión
original seguirá sustituida, pero se puede utilizar "$1", "$2", etc. para hacer referencia a cada parte
coincidente entre paréntesis de la expresión regular especificada.
Supongamos que un conjunto seleccionado de columnas tienen derivaciones que utilizan columnas de
entrada de `DSLink3'. Por ejemplo, dos de estas derivaciones pueden ser:
DSLink3.OrderCount + 1
If (DSLink3.Total > 0) Then DSLink3.Total Else -1
Si desea proteger el uso de estas columnas de entrada de los valores nulos, utilice un valor cero en lugar
del nulo. Para ello:
1. Seleccione las columnas para las que desee sustituir expresiones.
2. Seleccione la opción Parte de la expresión.
3. Especifique un valor de expresión regular:
(DSLink3\.[a-z,A-Z,0-9]*)
Este coincidirá con las series que contengan "DSLink3." seguido de varios dígitos o caracteres
alfabéticos. (Se supone que los nombres de columna de este caso están formados por dígitos y
generará
NullToZero(DSLink3.OrderCount) + 1
y
If (DSLink3.Total > 0) Then DSLink3.Total Else -1
generará:
If (NullToZero(DSLink3.Total) > 0) Then DSLink3.Total Else -1
El valor de sustitución puede ser una serie de expresión de cualquier formato. Por ejemplo, en el caso
anterior, el valor de sustitución puede ser:
(If (StageVar1 > 50000) Then $1 Else ($1 + 100))
generará:
(If (StageVar1 > 50000) Then DSLink3.OrderCount
Else (DSLink3.OrderCount + 100)) + 1
En la mayoría de los casos, una expresión de clave será un equijoin de una columna de enlace de entrada
primario. Puede especificar un equijoin de dos formas:
v Utilice arrastrar y soltar para arrastrar una columna de enlace de entrada primario a la celda de
expresión de clave correspondiente.
v Utilice copiar y pegar para copiar una columna de enlace de entrada primario y pegarla en la celda de
expresión de clave correspondiente.
Se crea un enlace de relación entre la columna de enlace de entrada primario y la expresión de clave.
También puede arrastrar o copiar una expresión de clave existente en otra columna de entrada, y
arrastrar o copiar varias selecciones.
Si una expresión de clave aparece en rojo (o el color definido en Herramientas → Opciones), significa que
el editor de transformador la considera incorrecta. (En algunos casos, simplemente significa que la
expresión de clave no cumple estrictamente las reglas del patrón de uso del motor de servidor, pero
funcionará correctamente).
Inicialmente, las celdas de expresión de clave ocupan una columna muy estrecha. En la mayoría de los
casos, la línea de relación ofrece suficiente información sobre la expresión de clave; de lo contrario, puede
arrastrar el borde izquierdo de la columna para expandirla.
Para poder utilizar la funcionalidad de múltiples filas, debe definir qué columna o columnas son las
claves foráneas en los metadatos de columna. Para ello, cambie el atributo Clave de la columna de claves
primarias actual por No y, a continuación, cambie el atributo Clave de la columna o columnas de claves
foráneas necesarias por Sí. Las expresiones de clave foránea pueden definirse mediante el editor de
expresiones, de la misma forma que las expresiones de clave primaria que se describen en “Definición de
expresiones de clave de columna de entrada” en la página 118.
También debe especificar que el enlace de referencia utiliza la funcionalidad de múltiples filas.
Para ello, abra el recuadro de diálogo Propiedades de la etapa Transformer, vaya al separador General
en la página Entradas, compruebe que el enlace de entrada de referencia esté seleccionado y seleccione el
recuadro de diálogo Enlace de referencia con conjunto de resultados en múltiples filas.
Para especificar una rutina, pulse el botón de propiedades de la etapa en la barra de herramientas para
abrir el recuadro de diálogo Propiedades de la etapa. El separador General contiene los campos
siguientes:
v Subrutina anterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta antes de que la etapa empiece a procesar datos.
v Subrutina posterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta después de que la etapa haya procesado los datos.
Seleccione una rutina en la lista. Esta lista contiene todas las rutinas integradas definidas como una
Subrutina anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado
para el argumento de entrada de la rutina en el campo Valor de entrada.
Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa
Transformer.
Si edita un trabajo creado utilizando el Release 1 de IBM InfoSphere DataStage, el campo Subrutina
anterior a la etapa o Subrutina posterior a la etapa puede contener el nombre de una rutina creada en el
Release 1. Cuando se actualiza InfoSphere DataStage, se identifican estas rutinas y se renombran
automáticamente. Por ejemplo, si utiliza una subrutina anterior a la etapa denominada BeforeSubr,
aparece como BeforeSubr\<Rev1> en el campo Subrutina anterior a la etapa. Puede continuar utilizando
estas rutinas. No obstante, como no ha podido especificar valores de entrada para las rutinas en el
Release 1 de InfoSphere DataStage, el campo Valor de entrada está sombreado cuando utiliza una de
estas rutinas "antiguas".
Para definir una restricción o especificar un enlace de rechazo, utilice una de las opciones siguientes:
v Seleccione un enlace de salida y pulse el botón Restricciones.
v Efectúe una doble pulsación en el campo de entrada de restricción del enlace de salida.
v Elija Restricciones en los menús de atajos de cabecera o en segundo plano.
Aparecerá un recuadro de diálogo que permite definir restricciones en los enlaces de salida de la etapa
Transformer o definir un enlace como un enlace de rechazo.
Defina una restricción especificando una expresión BASIC en el campo Restricción del enlace. A
continuación, las restricciones existentes aparecerán debajo de la barra de título del enlace en el Editor de
transformación. Esta expresión de restricción se comprobará con los datos de fila en el tiempo de
ejecución. Si los datos no cumplen la restricción, la fila no se grabará en el enlace. También es posible
definir un enlace que se puede utilizar para detectar las filas que se han "rechazado" de un enlace
anterior.
Para definir un enlace de rechazo, seleccione Sí en el campo Fila de rechazo y establezca el campo
Restricción de la siguiente manera:
v Para detectar las filas que se han rechazado en un enlace de salida específico, establezca el campo
Restricción en nombre_enlace.REJECTED. Esto debe establecerse siempre se rechace una fila en el enlace
nombre_enlace, ya sea porque la fila no cumple una restricción del enlace de salida o porque una
operación de grabación en el destino falla para la fila. Tenga en cuenta que este tipo de enlace de
rechazo debe producirse después del enlace de salida desde el que se ha definido para detectar los
rechazos.
v Para detectar las filas que han generado un error de grabación en un enlace de salida, establezca el
campo Restricción en nombre_enlace.REJECTEDCODE. El valor de nombre_enlace.REJECTEDCODE será
distinto de cero si la fila se ha rechazado debido a un error de grabación o 0 (DSE.NOERROR) si la fila
se ha rechazado porque no se ha cumplido una restricción de enlace. Cuando edita el campo
Restricción, puede establecer los valores de retorno de nombre_enlace.REJECTEDCODE realizando una
selección en las opciones de menú Variables de enlaceRestricciones... del Editor de expresiones. Estos
proporcionan un rango de errores, pero tenga en cuenta que la mayoría de errores de grabación
devuelven DSE.WRITERROR.
Para poder establecer una restricción de rechazo que diferencie entre un error de grabación y una
restricción no cumplida, puede utilizarse una combinación de los distintivos
nombre_enlace.REJECTEDCODE y nombre_enlace.REJECTED. Por ejemplo:
Nota: Debido a la naturaleza del caso "detectar todo" anterior, sólo debe utilizar un enlace de rechazo
cuyo campo Restricción esté en blanco. Para utilizar varios enlaces de rechazo, debe definirlos para
que utilicen el distintivo nombre_enlace.REJECTED detallado en el primer caso anterior.
Nota: Aunque los recursos de orden de los enlaces permiten utilizar una columna de salida anterior
para derivar una columna de salida posterior, no se recomienda y recibirá un aviso si lo hace.
Las variables de etapa que declara se muestran en una tabla en el panel de la derecha del área de enlaces.
La tabla es parecida a un enlace de salida. Para mostrar u ocultar la tabla, pulse el botón Variables de
La tabla muestra las variables de etapa junto con las expresiones utilizadas para derivar sus valores. Las
líneas de enlace unen las variables de etapa con las columnas de entrada utilizadas en las expresiones.
Los enlaces de la derecha de la tabla enlazan las variables con las columnas de salida que las utilizan.
En general, puede realizar prácticamente las mismas operaciones en una variable de etapa que en una
columna de salida (consulte “Definición de derivaciones de columna de salida” en la página 115). Un
menú de tajos ofrece los mismos mandatos. No obstante, no puede pegar una variable de etapa como una
nueva columna o una columna como una nueva variable de etapa.
Formato de expresión
El formato de una expresión es el siguiente:
KEY:
something_like_this is a token
something_in_italics is a terminal, that is, doesn’t break down any
further
| is a choice between tokens
[ is an optional part of the construction
"XXX" is a literal token (that is, use XXX not
including the quotation marks)
=================================================
Nota: Las palabras clave "AND", "IF" o "EQ" pueden ir en mayúsculas o minúsculas.
Especificación de expresiones
Cuando el punto de inserción está en un recuadro de la expresión, puede utilizar el editor de expresiones
para sugerir el siguiente elemento de la expresión. Para ello, pulse con el botón derecho del ratón sobre el
recuadro o pulse el botón Sugerir a la derecha del recuadro. Se abrirá el menú Sugerir operando o
Sugerir operador. El menú que aparece depende del contexto, es decir, de si debe especificar un
operando o un operador como siguiente elemento de expresión.
Se le ofrecerá una selección diferente del menú Sugerir operando, dependiendo de si está definiendo
expresiones de clave, derivaciones y restricciones, o una transformación personalizada. El menú Sugerir
operador siempre es el mismo.
Validación de la expresión
Si ha especificado una expresión en el editor de transformador, pulse Intro para validarla. El editor de
expresiones comprueba que la sintaxis sea correcta y que los nombres de variable utilizados sean
aceptables para el compilador. Cuando utilice el editor de expresiones para definir una transformación
personalizada, pulse Aceptar para validar la expresión.
Si hay un error, aparece un mensaje y el elemento que causa el error se resalta en el recuadro de la
expresión. Puede corregir la expresión o cerrar el editor de transformador o el recuadro de diálogo
Transformación.
En el editor de transformador, las expresiones que no son válidas se muestran en rojo. (En algunos casos,
simplemente significa que la expresión no cumple estrictamente las reglas del patrón de uso del motor de
servidor, pero funcionará correctamente).
Para obtener más información sobre la sintaxis que puede utilizar en una expresión, consulte Capítulo 7,
“Programación BASIC”, en la página 147.
Página Etapa
La página Etapa tiene cuatro separadores:
v General. Permite introducir una descripción opcional de la etapa y especificar una subrutina anterior o
posterior a la etapa.
v Variables. Permite configurar variables de etapa para utilizarlas en la etapa.
v Orden de los enlaces. Permite especificar el orden en el que se procesarán los enlaces de salida.
Página Entradas
La página Entradas permite especificar detalles sobre los datos que llegan a la etapa Transformer. La
etapa Transformer sólo puede tener un enlace de entrada.
El separador General permite especificar una descripción opcional del enlace de entrada.
Página Salidas
La página Salidas tiene un separador General que permite especificar una descripción opcional para cada
uno de los enlaces de salida en la etapa Transformer.
El depurador permite establecer puntos de interrupción en los enlaces del trabajo. Cuando ejecuta el
trabajo en la modalidad de depuración, el trabajo se detendrá cuando alcance un punto de interrupción.
A continuación, puede pasar a la siguiente acción (lectura o grabación) en el enlace, o pasar al proceso en
la siguiente fila de datos (que puede estar en el mismo enlace o en otro).
Los puntos de interrupción que ha establecido permanecen si el trabajo se cierra y se vuelve a abrir. Los
puntos de interrupción se validan cuando se compila el trabajo y permanecen válidos si el enlace al que
pertenecen se mueve, termina de moverse o se renombra. No obstante, si se suprime un enlace y se crea
otro con el mismo nombre, el nuevo enlace no hereda el punto de interrupción. Los puntos de
interrupción no se heredan cuando un trabajo se guarda con otro nombre, se exporta o se actualiza.
Nota: Tenga cuidado cuando depure trabajos que ejecuten procesos paralelos (utilizando etapas IPC o
enlaces de activo a activo entre procesos). No puede establecer puntos de interrupción en más de un
proceso a la vez. Para asegurarse de que esto no ocurre, sólo debe establecer un punto de interrupción
cada vez en estos trabajos.
Aparece un círculo en el enlace para indicar que se ha añadido un punto de interrupción. Elija Editar
puntos de interrupción en el menú Depurar o pulse Editar puntos de interrupción en la barra de
herramientas Depurar para abrir el recuadro de diálogo Editar puntos de interrupción y configurar el
punto de interrupción.
No puede colocar un punto de interrupción en un enlace que tenga un contenedor como etapa de origen.
En su lugar, debe colocar el punto de interrupción en el mismo enlace que se representa en la propia
vista del contenedor. El enlace sólo mostrará que tiene un punto de interrupción en la vista del
contenedor. Para obtener más información, consulte el apartado “Depuración de los contenedores
compartidos” en la página 129.
La Ventana de depuración permite ver las variables en la lista de observaciones y las variables en
contexto cuando se detiene un punto de interrupción.
© Copyright IBM Corp. 1997, 2010 127
La Ventana de depuración está visible cuando se selecciona Depurar → Ventana de depuración. Siempre
aparece sobre la ventana del cliente del Diseñador. Si pulsa con el botón derecho del ratón sobre la
Ventana de depuración, aparece un menú de atajos que contiene los mismos elementos que el menú
Depurar. La Ventana de depurador tiene dos paneles de visualización. Puede arrastrar la barra divisora
entre los dos paneles para redimensionar los paneles. La ventana también proporciona información sobre
el estado del trabajo y el depurador.
El panel superior muestra variables locales. Antes de iniciar la depuración, se muestran todas las
columnas de todos los enlaces del trabajo, y todas se marcan como "Fuera de contexto". Durante la
depuración, el panel muestra sólo las variables que hay en contexto cuando se detiene el trabajo en el
punto de interrupción. Muestra los nombres y los valores de las variables que hay actualmente en
contexto. Puede añadir las variables en contexto que desee a la lista de observaciones, que mantiene un
registro de las variables seleccionadas el tiempo que sea necesario.
El panel inferior muestra las variables de la lista de observaciones. Cuando las variables están en
contexto, sus valores se muestran y se actualizan en cada punto de interrupción. Cuando variables no
están en contexto, se marcan como "Fuera de contexto". La lista de observaciones se guarda entre las
distintas sesiones.
En su lugar, debe colocar el punto de interrupción en el mismo enlace que se representa en la vista del
contenedor. El enlace sólo se mostrará con un punto de interrupción en la vista del contenedor.
Nota: La barra de depuración sólo muestra trabajos de servidor abiertos porque un contenedor
compartido no puede ejecutarse fuera del contexto de un trabajo.
v Si otro trabajo utiliza el mismo contenedor compartido que se está depurando, el punto de interrupción
no estará visible ni se activará en el otro trabajo. El siguiente ejemplo muestra un trabajo denominado
`Ex2', que utiliza el mismo contenedor compartido que el ejemplo anterior denominado `Exercise 4.' El
punto de interrupción sólo se establecerá para el trabajo de destino que es Exercise 4.
Si se han realizado cambios en el trabajo pero no se han guardado, el sistema le preguntará si desea
guardar el trabajo y, en caso afirmativo, deberá pulsar Aceptar. Se abrirá la ventana Compilar trabajo.
Esta ventana contiene una área de visualización para mensajes de compilación y tiene los siguientes
botones:
v Recompilar. Vuelve a compilar el trabajo si se han efectuado cambios.
v Mostrar error. Resalta la etapa que ha generado un error de compilación. Este botón sólo está activo si
se ha generado un error durante la compilación.
v Más. Muestra la salida que no se adapta al área de visualización. Algunos errores producidos por el
compilador incluyen una salida BASIC detallada.
v Cerrar. Cierra la ventana Compilar trabajo.
v Ayuda. Invoca al sistema de ayuda.
El trabajo se compila tan pronto como se abre la ventana. Debe comprobar el área de visualización por si
se han producido mensajes de compilación o se han generado errores.
Si se establecen puntos de interrupción para enlaces que ya no existen, aparece un mensaje durante la
compilación para avisarle al respecto. Los puntos de interrupción se eliminan automáticamente.
Comprobaciones de compilación
Durante la compilación se comprueban los criterios siguientes en el diseño del trabajo:
v Entrada primaria. Si tiene más de un enlace de entrada a una etapa Transformer, el compilador
comprueba que se haya definido uno como enlace de entrada primario.
v Entrada de referencia. Si tiene entradas de referencia definidas en una etapa Transformer, el
compilador comprueba que éstas no provengan de archivos secuenciales.
v Expresiones de clave. Si tiene campos de clave especificados en sus definiciones de columna, el
compilador comprueba que haya expresiones de clave que unan las tablas de datos.
v Transformaciones. Si ha especificado una transformación, el compilador comprueba que sea una
transformación adecuada para el tipo de datos.
Compilación satisfactoria
Si la ventana Compilar trabajo muestra el mensaje Trabajo compilado satisfactoriamente sin errores,
puede:
v Validar el trabajo
v Ejecutar o planificar el trabajo
Los trabajos se validan utilizando el cliente del Director. (También puede realizar una ejecución de prueba
en el cliente del Diseñador durante el desarrollo, aunque las ejecuciones de producción se ejecutan
normalmente en el cliente del Director). Consulte IBM InfoSphere DataStage and QualityStage Director Client
Guide para obtener más información.
Resolución de problemas
Si la ventana Compilar trabajo muestra un error, puede utilizar el botón Mostrar error para solucionar los
problemas del diseño del trabajo. Cuando pulsa Mostrar error, se resalta la etapa que contiene el primer
error en el diseño. Debe editar la etapa para cambiar los valores incorrectos y volver a compilar el
trabajo.
El proceso de solucionar los errores de iteración es un proceso iterativo. Debe perfeccionar cada etapa
"problemática" hasta que el trabajo se compile satisfactoriamente.
Los colores que utiliza el supervisor de rendimiento se establecen mediante el recuadro de diálogo
Opciones. Elija Herramientas → Opciones y seleccione la ramificación Supervisor de rendimiento gráfico
para ver los colores predeterminados y cambiarlos si es necesario.
Hay varias áreas en un trabajo de servidor donde, si lo desea, puede especificar código:
v Definición de rutinas personalizadas que se utilizan como bloques de creación en otras tareas de
programación. Por ejemplo, puede definir una rutina que se reutilizará en varias transformaciones
personalizadas. Puede ver, editar y crear sus propias rutinas BASIC utilizando el cliente del Diseñador.
v Definición de transformaciones personalizadas. La función especificada en una definición de
transformación convierte los datos en una columna seleccionada.
v Definición de derivaciones, expresiones de clave y restricciones mientras se edita una etapa
Transformer.
v Definición de subrutinas anteriores y posteriores a la etapa. Estas subrutinas realizan una acción antes
o después de que una etapa haya procesado los datos. Pueden especificarse para las etapas Aggregator,
Transformer y algunas etapas suplementarias.
v Definición de subrutinas anteriores y posteriores al trabajo. Estas subrutinas realizan una acción antes o
después de ejecutar un trabajo y se establecen como propiedades del trabajo.
v Definición de rutinas de control de trabajos. Estas subrutinas pueden utilizarse para controlar otros
trabajos dentro del trabajo actual.
Componentes de programación
En los trabajos de servidor, se utilizan tipos de componentes de programación muy diferentes. Pueden
clasificarse en tres categorías principales:
v Incorporados. IBM InfoSphere DataStage se proporciona con varios componentes de programación
incorporados que puede reutilizar en los trabajos de servidor, según sea necesario. Algunos de los
componentes incorporados son accesibles desde el repositorio, y puede copiar el código desde ellos.
Otros son sólo accesibles desde el Editor de expresiones, y el código subyacente no está visible.
v Personalizados. También puede definir sus propios componentes de programación utilizando el cliente
del Diseñador, en concreto, rutinas (consulte “Cómo trabajar con las rutinas” en la página 138) y
transformaciones personalizadas (consulte “Definición de transformaciones personalizadas” en la
página 144). Se almacenan en el repositorio y puede reutilizarse para otros trabajos y por otros
usuarios de InfoSphere DataStage.
v Externos. Puede utilizar algunos tipos de componentes externos desde InfoSphere DataStage. Si tiene
una gran inversión en funciones UniVerse personalizadas o funciones ActiveX (OLE), es posible
invocarlas desde InfoSphere DataStage. Para ello, se define una rutina de derivador que, a su vez,
invoca las funciones externas. Tenga en cuenta que el mecanismo para incluir funciones UniVerse
personalizadas es distinto al de incluir funciones ActiveX (OLE).
En las siguientes secciones se describen los términos de programación que deberá conocer cuando
programe trabajos de servidor.
Rutinas
Las rutinas se almacenan en la carpeta Rutinas del árbol de repositorio de forma predeterminada, pero
puede almacenarlas en la carpeta que prefiera. Las rutinas se pueden crear, ver o editar utilizando el
recuadro de diálogo Rutina de servidor. Los siguientes componentes de programa se clasifican como
rutinas:
Cuando utiliza el editor de expresiones, todos estos componentes aparecen en el mandato Rutinas de
DS... en el menú Sugerir operando.
Un caso especial de rutina es la rutina de control de trabajos. Este tipo de rutina se utiliza para
configurar un trabajo que controla otros trabajos. Las rutinas de control de trabajos se especifican en la
página Control de trabajos del recuadro de diálogo Propiedades del trabajo. Las rutinas de control de
trabajos no se almacenan en la carpeta Rutinas del árbol de repositorio.
Transformaciones
Las transformaciones se almacenan en la carpeta Transformaciones del árbol de repositorio de forma
predeterminada, pero puede almacenarlas en la carpeta que desee. Las transformaciones se pueden crear,
ver o editar utilizando el recuadro de diálogo Transformación. Las transformaciones especifican el tipo
de datos transformados, el tipo en que se transforman y la expresión que realiza la transformación.
Cuando utiliza el editor de expresiones, las transformaciones aparecen bajo el mandato Transformación
de DS... en el menú Sugerir operando.
Funciones
Las funcionen utilizan argumentos y devuelven un valor. La palabra "función" se aplica a muchos
componentes de IBM InfoSphere DataStage:
v Funciones BASIC. Estas constituyen unos de los bloques de creación fundamentales del lenguaje
BASIC. Cuando utiliza el editor de expresiones, puede acceder a las funciones BASIC mediante el
mandato Función... del menú Sugerir operando.
v Funciones BASIC de InfoSphere DataStage. Estas son funciones BASIC especiales que son específicas
de InfoSphere DataStage. Se utilizan principalmente en las rutinas de control de trabajos. Las funciones
Los siguientes elementos, aunque se denominan "funciones", se clasifican como rutinas y se describen en
“Rutinas” en la página 135. Cuando utiliza el editor de expresiones, todas aparecen bajo el mandato
Rutinas de DS... en el menú Sugerir operando.
v Funciones de transformación
v Funciones de UniVerse personalizadas
v Funciones ActiveX (OLE)
Expresiones
Una expresión es un elemento de código que define un valor. La palabra "expresión" se utiliza como una
parte específica de la sintaxis de BASIC y para describir las partes de código que puede especificar
cuando define un trabajo. Las áreas de IBM InfoSphere DataStage donde puede utilizar este tipo de
expresiones son:
v Definición de puntos de interrupción en el depurador
v Definición de derivaciones de columna, expresiones de clave y restricciones en las etapas Transformer
v Definición de una transformación personalizada
En cada uno de estos casos, el editor de expresiones de InfoSphere DataStage sirve de guía sobre qué
elementos de programación puede insertar en la expresión.
Subrutinas
Una subrutina es un conjunto de instrucciones que realizan una tarea concreta. Las subrutinas no
devuelven un valor. La palabra "subrutina" se utiliza como una parte específica de la sintaxis de BASIC,
pero también para hacer referencia específica a subrutinas anteriores/posteriores que realizan tareas antes
o después de un trabajo en una etapa activa. IBM InfoSphere DataStage tiene muchas subrutinas
anteriores y posteriores incorporadas, pero también definir rutinas personalizadas.
Macros
IBM InfoSphere DataStage tiene varias macros incorporadas. Pueden utilizarse en las expresiones, las
rutinas de control de trabajos y las subrutinas anteriores/posteriores. Las macros disponibles permiten
establecer el estado del trabajo.
Cuando utiliza el editor de expresiones, todas aparecen bajo el mandato Macro de DS... en el menú
Sugerir operando.
Reglas de prioridad
Se aplican las siguientes reglas de prioridad si hay conflictos de nombres entre los distintos operandos
cuando se trabaja con los componentes de programación de IBM InfoSphere DataStage:
1. Funciones incorporadas declaradas en el archivo DSParams
2. Macros de InfoSphere DataStage
3. Constantes de InfoSphere DataStage
4. Funciones de InfoSphere DataStage
5. Transformaciones de InfoSphere DataStage
6. Rutinas de InfoSphere DataStage
Hay cinco botones en el recuadro de diálogo Rutina de servidor. Su disponibilidad depende de la acción
que se esté realizando y del tipo de rutina que se esté editando.
v Cerrar. Cierra el recuadro de diálogo Rutina de Servidor. Si no ha guardado las modificaciones, el
sistema le preguntará si desea guardarlas.
v Guardar. Guarda la rutina.
v Compilar. Compila una rutina guardada. Sólo está disponible cuando no hay cambios pendientes (sin
guardar).
v Probar... Prueba una rutina. Sólo está disponible para rutinas del tipo Función de transformación y
Función UniVerse personalizada. Esto sucede porque no se pueden probar las subrutinas anteriores y
posteriores de modo aislado. Sólo está activo cuando la rutina se ha compilado o referenciado
satisfactoriamente.
v Ayuda. Invoca al sistema de Ayuda.
Página General
Aparece la página General de modo predeterminado. Contiene información general sobre la rutina,
incluido:
v Nombre de rutina. Nombre de la función o subrutina.
v Tipo. Tipo de rutina. Existen tres tipos de rutina: Función de transformación, Subrutina
anterior/posterior o Función de UniVerse personalizada.
v Nombre de catálogo externo. Sólo está disponible si ha elegido la Función de UniVerse personalizada
en el recuadro Tipo. Entre el nombre catalogado de la rutina externa.
v Descripción breve. Descripción breve opcional de la rutina.
v Descripción explicativa. Descripción detallada opcional de la rutina.
Página Creador
La página Creador contiene información sobre el creador y el número de versión de la rutina, por
ejemplo:
v Proveedor. Empresa que ha creado la rutina.
v Autor. Creador de la rutina.
v Versión. Número de versión de la rutina, que se utiliza al importar la rutina. El campo Versión
contiene una número de versión de tres partes, por ejemplo: 3.1.1. La primera parte de este número es
un número interno utilizado para comprobar la compatibilidad entre la rutina y el sistema IBM
InfoSphere DataStage. La segunda parte de este número representa el número de release. Este número
debería ir incrementando a medida que se vayan realizando cambios importantes en la definición de
rutina o en el código subyacente. El release nuevo de la rutina reemplaza cualquier release anterior.
Los trabajos que utilicen la rutina utilizarán el release nuevo. La última parte de este número marca los
releases intermedios cuando se ha realizado un cambio menor o un arreglo.
Página de argumentos
Los nombres de rutina predeterminados y si puede añadir o suprimir argumentos dependerá del tipo de
rutina que esté editando:
v Subrutinas anteriores/posteriores. Los nombres de los argumentos son ArgEntrada y Código de error.
Puede editar los nombres y las descripciones de los argumentos pero no puede añadir ni suprimir
argumentos.
v Funciones de transformación y funciones de UniVerse personalizadas. De forma predeterminada,
tienen un argumento denominado Arg1. Puede editar nombres y descripciones de argumentos y añadir
y suprimir argumentos. Como mínimo tiene que haber un argumento, pero no más de 255.
Página de códigos
La página Código se utiliza para ver o grabar el código para la rutina. La barra de herramientas contiene
botones para cortar, copiar, pegar y formatear códigos, así como para activar Buscar (y Reemplazar). La
parte principal de esta página consta de un recuadro de texto con varias líneas con barras de
desplazamiento. Para obtener más información sobre cómo utilizar esta página, consulte “Introducción de
código” en la página 140.
Página Dependencias
La página Dependencias permite entrar cualquier función o rutina catalogada de forma local o global que
vaya a utilizar en la rutina que está definiendo. Así también se puede garantizar, que cuando empaquete
cualquier trabajo utilizando esta rutina para desplegarla en otro sistema, todas las dependencias se
incluirán en el paquete. La información necesaria es la siguiente:
v Tipo. El tipo de elemento sobre el que depende la rutina. Seleccione una de las opciones siguientes:
– Local. Funciones y subrutinas BASIC de IBM InfoSphere DataStage catalogadas localmente.
– Global. Funciones y subrutinas BASIC de InfoSphere DataStage catalogadas globalmente.
– Archivo. Un archivo estándar.
– ActiveX. Un objeto ActiveX (OLE) (no disponible en sistemas basados en UNIX).
– Servicio web. Una operación de servicio web.
v Nombre. Nombre de la función o de la rutina. El nombre necesario depende del tipo de dependencia:
– Local. Nombre del catálogo.
– Global. Nombre del catálogo.
– Archivo. Nombre del archivo.
– ActiveX. La entrada Nombre actualmente no es relevante para los objetos ActiveX. Entre algo
significativo para usted (los objetos ActiveX se identifican por el campo Ubicación).
– Servicio web. Nombre de la operación de servicio web.
v Ubicación. Ubicación de la dependencia. Para una operación de servicio web, es un URL. Esta
ubicación puede ser una vía de acceso absoluta, pero es recomendable especificar una vía de acceso
relativa utilizando las siguientes variables de entorno:
%SERVERENGINE% - directorio de la cuenta del motor de servidor (normalmente
C:\IBM\InformationServer\Server\DSEngine).
Cuando complete esta página, puede especificar información del creador en la página Creador,
información de argumentos en la página Argumentos y detalles de las dependencias en la página
Dependencias. A continuación, debe especificar su código en la página Código.
Introducción de código
Puede entrar o editar códigos para una rutina en la página Código, en el recuadro de diálogo Rutina de
Servidor.
El primer campo de esta página muestra el nombre de la rutina y los nombres del argumento. Si desea
cambiar estas propiedades, deberá editar los campos en las páginas General y Argumentos.
El parte principal de esta página contiene un recuadro de entrada de texto de varias líneas, en el que
deberá entrar su código. Para entrar el código, pulse el recuadro y empiece a escribir. Puede utilizar las
siguientes funciones de edición estándar de Windows en este recuadro de texto:
v Suprimir utilizando la tecla Supr
v Cortar utilizando Control-X
v Copiar utilizando Control-C
v Pegar utilizando Control-V
v Ir al final de la línea utilizando la tecla Fin
Algunas de estas funciones de edición se incluyen en un menú de atajos que se puede visualizar
pulsando el botón derecho del ratón. También puede cortar y pegar códigos utilizando los botones de la
barra de herramientas.
Su código sólo debe contener funciones y sentencias BASIC soportadas por IBM InfoSphere DataStage. Si
no está seguro de las funciones y de las sentencias que se soportan o de la sintaxis apropiada que debe
utilizar, consulte Capítulo 7, “Programación BASIC”, en la página 147 para obtener una lista completa de
las funciones BASIC de InfoSphere DataStage soportadas.
Si el soporte multilingüístico está habilitado, podrá utilizar caracteres no ingleses en las siguientes
circunstancias:
v En comentarios
v En datos de serie (es decir, en series incluidas entre comillas)
El último campo de esta página muestra la sentencia de retorno para la función o la subrutina. Este
campo no se puede editar.
Código de compilación
Una vez haya guardado la rutina, deberá compilarla. Para compilar una rutina, pulse Compilar en el
recuadro de diálogo Rutina de servidor. Si la rutina se compila satisfactoriamente, aparece un recuadro de
mensaje. Pulse Aceptar para acusar la recepción del mensaje. La rutina se marca como "creada" en el
repositorio y está disponible para ser utilizada. Si la rutina es una Función de transformación, ésta se
visualiza en la lista de funciones disponibles cuando se edita una transformación. Si la rutina es una
Subrutina anterior/posterior, aparece en lista de las subrutinas disponibles cuando se edita una etapa
Aggregator, Transformer o suplementaria, o se definen propiedades del trabajo. Si la rutina no puede
compilarse, se muestran los errores generados.
Antes de empezar a investigar la causa del error, se recomienda mover la ventana Salida de compilación
al lado o debajo del recuadro de diálogo Rutina de servidor, ya que necesita ver ambas ventanas para
solucionar el error.
Para solucionar el error, efectúe una doble pulsación en la ventana Salida de la compilación. IBM
InfoSphere DataStage intenta encontrar la línea correspondiente del código que ha causado el error y lo
resalta en el recuadro de diálogo Rutina de servidor. Debe editar el código para eliminar todas las
sentencias incorrectas o para corregir posibles errores sintácticos.
Si el soporte multilingüístico está habilitado, busque múltiples signos interrogantes en la ventana Salida
de compilación. Normalmente indica que se ha producido un error en la correlación de juego de
caracteres.
Cuando la rutina se haya compilado, puede utilizarla en otras áreas de InfoSphere DataStage o
comprobarla. Consulte “Comprobación de una rutina” para obtener más información.
Nota: El botón Probar no está disponible para una Subrutina anterior/posterior. Las rutinas de este tipo
no se pueden comprobar de forma aislada y deben ejecutarse como parte de un trabajo en ejecución.
Si pulsa Probar, aparecerá el recuadro de diálogo Probar rutina. Este recuadro de diálogo contiene una
cuadrícula y botones. La cuadrícula tiene una columna para cada argumento y una para el resultado de
la comprobación.
Puede añadir y editar filas en la cuadrícula para especificar valores para distintos casos de prueba. Para
obtener más información sobre cómo utilizar y editar una cuadrícula, consulte IBM InfoSphere DataStage
and QualityStage Designer Client Guide.
Para ejecutar una prueba con un conjunto de valores seleccionado, pulse en cualquier parte de la fila que
desea utilizar y pulse Ejecutar. Si desea ejecutar pruebas utilizando todos los valores de prueba, pulse
Ejecutar todos. La columna Resultado... se llena conforme se va completando cada prueba.
Para ver más detalles sobre una prueba en concreto, efectúe una doble pulsación sobre la celda
Resultado... de la prueba que desee ver. Se abre la ventana Salida de prueba, mostrando todos los
resultados de la prueba. Pulse Cerrar para cerrar esta ventana.
Si desea suprimir un conjunto de valores de prueba, pulse en cualquier parte de la fila que desea
eliminar y pulse Suprimir o elija Suprimir fila en el menú de atajos.
Cuando haya finalizado de probar la rutina, pulse Cerrar para cerrar el recuadro de diálogo Probar
rutina. Todos los valores de prueba que haya entrado se guardarán cuando cierre el recuadro de diálogo.
Sustitución de texto
Si desea sustituir texto en el código con una serie de texto alternativa, pulse Sustituir... en el recuadro de
diálogo Buscar. Cuando pulsa este botón, el recuadro de diálogo Buscar cambia al recuadro de diálogo
Sustituir.
Aparecerá el recuadro de diálogo Rutina de Servidor. Puede editar cualquier campo u opción en
cualquiera de las páginas. Si efectúa cambios, deberá guardar, compilar y comprobar el código antes de
cerrar el recuadro de diálogo Rutina de Servidor. Consulte “Cómo guardar códigos” en la página 141
para obtener más información.
Si las transformaciones incorporadas no son adecuadas o si desea que una transformación específica actúe
sobre un elemento de datos específico, puede crear transformaciones personalizadas en el cliente del
Diseñador. La ventaja de crear una transformación personalizada con sólo entrar la expresión necesaria en
el editor de transformador es tal, que una vez definida, la transformación está disponible para ser
utilizada desde cualquier sitio del proyecto. También se puede exportar fácilmente a otros proyectos de
InfoSphere DataStage.
Para proporcionar aún más flexibilidad, también puede definir sus propias rutinas y funciones
personalizadas a partir de las cuales se crearán transformaciones personalizadas. Hay tres modos de
hacerlo:
v Entrar el código en InfoSphere DataStage (utilizando las funciones BASIC). Consulte “Creación de una
rutina” en la página 140.
v Crear una referencia a una rutina catalogada externamente. Consulte “Creación de una rutina” en la
página 140.
v Importar funciones ActiveX (OLE) externas. Consulte “Importación de funciones ActiveX (OLE)
externas” en la página 146.
8. Pulse Aceptar. Aparecerá el recuadro de diálogo Guardar transformación como, que permite
seleccionar la carpeta en la que se guardará en el árbol de repositorio. Si es necesario, también puede
cambiar el nombre de la transformación. Pulse Guardar para guardar la transformación y cierre el
recuadro de diálogo Transformación.
A continuación, puede utilizar la nueva transformación desde dentro del Editor de transformador.
Para utilizar este recurso, necesita un servidor de automatización que exponga las funciones a través de
la interfaz IDispatch y que tenga una biblioteca de tipos asociados. Para ello, puede utilizar varias
herramientas, incluido Visual Basic.
El primer paso para utilizar las funciones externas es importarlas al repositorio. La acción de importar
una función externa crea una rutina de InfoSphere DataStage que contiene código que invoca la función
externa. El código utiliza una función BASIC de InfoSphere DataStage que sólo acepta determinados tipos
de datos. Estos tipos de datos se definen en el archivo DSOLETYPES.H en el directorio dsinclude de cada
proyecto.
Una vez importadas, podrá llamar a las funciones cuando defina una transformación personalizada.
La publicación IBM InfoSphere DataStage BASIC Reference Guide íntegra se proporciona en formato PDF
con InfoSphere DataStage.
Convenios de sintaxis
Las descripciones de sintaxis utilizan los siguientes convenios:
Convenio
Uso
Negrita
El tipo negrita indica funciones, sentencias, subrutinas, opciones, paréntesis, comas, etc., que
deben especificarse exactamente tal como aparecen.
Cursiva
La cursiva indica información variable que debe proporcionar como, por ejemplo, una expresión,
una serie de entrada, un nombre de variable o una lista de sentencias.
[] Los corchetes encierran elementos opcionales. No especifique estos corchetes.
[] Los corchetes con un tipo de letra cursiva y negrita deben especificarse como parte de la sintaxis.
{ Then | Else }
Dos palabras clave o cláusulas separadas por barras verticales y entre signos de llave indican que
puede elegir sólo una opción. No especifique los signos de llave ni la barra vertical.
... Los tres puntos indican que el último elemento de la sintaxis puede repetirse si es necesario.
@FM Marca de campo.
@IM Marca de elemento.
@SM Marca de subvalor.
@TM Marca de texto.
@VM Marca de valor.
Constantes
Una constante es un valor que se fija durante la ejecución de un programa y puede reutilizarse en
distintos contextos. Una constante puede ser:
v Una serie de caracteres
v Una serie vacía
v Una serie numérica con formato de entero o coma flotante
Los caracteres ASCII del 0 al 10, y los caracteres del 251 al 255, inclusivos, no pueden incorporarse en las
constantes de tipo serie en los sistemas sin soporte multilingüístico (estos caracteres no pueden utilizarse
tampoco en los comentarios).
Variables
Las variables se utilizan para almacenar valores en la memoria temporalmente. Posteriormente podrá
utilizar los valores en varias operaciones.
Puede asignar un valor explícito a una variable, o asignarle el valor que es el resultado de las operaciones
efectuadas por el programa durante la ejecución. Las variables pueden cambiar de valor durante la
ejecución del programa. Al principio de la ejecución del programa, todas las variables están desasignadas.
Si se intenta emplear una variable desasignada, se genera un mensaje de error.
IBM InfoSphere DataStage proporciona un conjunto de variables del sistema de sólo lectura que
almacenan datos del sistema como, por ejemplo, la fecha actual, la hora, el nombre de la vía de acceso,
etc. Puede acceder a ellas desde una rutina o una transformación.
Matrices dimensionadas
Una matriz es una variable de varios valores a la que se accede desde un nombre individual. Cada valor
es un elemento de la matriz. IBM InfoSphere DataStage utiliza dos tipos de matrices dimensionadas:
v Matrices unidimensionales o vectores
v Matrices bidimensionales o matrices
Los vectores tienen elementos almacenados en la memoria en una fila individual. Cada elemento está
indexado, es decir, tiene un número secuencial asignado. El índice del primer elemento es 1. Para
especificar un elemento del vector, utilice el nombre de variable seguido del índice del elemento entre
paréntesis. El índice puede ser una constante o una expresión, por ejemplo:
A(1) ;*especifica el primer elemento de la variable A
Cost(n + 1) ;* especifica una expresión para calcular el índice
La especificación completa utiliza el nombre de variable seguido de los índices entre paréntesis. Por
ejemplo:
Obj(3,1)
Widget(7,17)
Los vectores se tratan como si fueran matrices con una segunda dimensión 1. COST(35) y COST(35,1)
significan lo mismo.
Las dimensiones de una matriz se definen con la sentencia Dimension. También puede redimensionar
una matriz utilizando Dimension.
Expresiones
Una expresión define un valor. El valor se evalúa en el tiempo de ejecución. El resultado puede utilizarse
como entrada de una función, asignarse a una variable, etc. Una expresión simple puede constar de:
v Una serie o una constante numérica, por ejemplo, "porcentaje" o "42"
v Un nombre de variable
v Una función
v Una función definida por el usuario
Una expresión compleja puede contener una combinación de constantes, variables, operadores, funciones
y otras expresiones.
Funciones
Una función realiza manipulaciones matemáticas o de serie en los argumentos que se proporcionan y
devuelve un valor. Algunas funciones no tienen argumentos; la mayoría tienen uno o varios. Los
argumentos van siempre entre paréntesis, separados por comas, tal como se muestra en la sintaxis
general:
FunctionName (argumento, argumento)
Una expresión puede contener una función. Un argumento en una función puede ser una expresión que
incluya una función. Las funciones pueden realizar tareas:
v En las series numéricas, por ejemplo, cuando se calcula el seno de un ángulo que se pasa como
argumento (función Sin)
v En las series de caracteres, por ejemplo, cuando se suprimen los espacios en blanco y las tabulaciones
excedentes (función Trim)
Las funciones de transformación en IBM InfoSphere DataStage deben tener al menos un argumento que
contenga el valor de entrada que se va a transformar. Una definición de transformación puede utilizar
otros argumentos opcionales para seleccionar una determinada vía de acceso mediante la función de
transformación, si es necesario. Esto significa que una función individual puede encapsular la lógica de
varias transformaciones relacionadas. La función de transformación debe devolver el valor transformado
utilizando una sentencia Return (valor).
Sentencias
Las sentencias se utilizan para:
Etiquetas de sentencias
Una etiqueta de sentencia es un identificador exclusivo de una línea de código. Una etiqueta de sentencia
consta de una serie de hasta 64 caracteres seguida de un carácter de dos puntos. La serie puede contener
caracteres alfanuméricos, puntos, signos de dólar y signos de porcentaje. Las etiquetas de sentencia son
sensibles a las mayúsculas y minúsculas. Una etiqueta de sentencia puede colocarse delante de una
sentencia o en su propia línea.
Subrutinas
Una subrutina es un conjunto autocontenido de instrucciones que realizan una tarea concreta. Una
subrutina puede tomar dos formas:
v Una subrutina incorporada está contenida en el programa y se accede a ella con una sentencia GoSub.
v Una subrutina externa se almacena en un archivo aparte y se accede a ella con una sentencia Call.
En términos generales, utilice una subrutina incorporada para el código que desea invocar muchas veces
desde el mismo programa; utilice una subrutina externa para el código que desee invocar desde varios
programas diferentes.
Hay varias subrutinas BASIC que son específicas de IBM InfoSphere DataStage. Sus nombres empiezan
por DS y se describen en “Subrutinas BASIC de IBM InfoSphere DataStage especiales”.
Operadores
Un operador realiza una operación en una o varias expresiones (los operandos). Los operadores se
dividen en las categorías siguientes:
v Operadores aritméticos
v Operadores de serie para:
– Concatenar series con Cats o :
– Extraer subseries con [ ]
v Operadores relacionales
v Operadores de coincidencia de patrón
Operadores aritméticos
Los operadores aritméticos combinan operandos mediante sumas, restas, etc. Las expresiones resultantes
pueden combinarse también con otras expresiones. Los operandos deben ser expresiones numéricas. Las
expresiones no numéricas se tratan como 0 y generan un aviso de tiempo de ejecución. Una variable de
serie de caracteres que contiene únicamente caracteres numéricos cuenta como una expresión numérica.
Por ejemplo, la siguiente expresión da como resultado el valor 66:
"22" + 44
Puede cambiar el orden de evaluación utilizando paréntesis. Las expresiones escritas entre paréntesis se
evalúan antes que las de fuera de los paréntesis.
El resultado de una operación aritmética que incluya el valor nulo es un valor nulo.
Concatenación de series
El operador de concatenación, : o Cats, enlaza expresiones de serie para formar expresiones de serie
compuestas. Por ejemplo, si x tiene el valor Tarzan, esta expresión:
"Hello. " : "My Name is " : X : ". What’s yours?"
se evalúa en:
"Hello. My name is Tarzan. What’s yours?"
Los operandos numéricos en las expresiones concatenadas se consideran valores de serie. Los operadores
aritméticos tienen una mayor prioridad que el operador de concatenación. Por ejemplo:
"There are " : "2" + "2" : "3" : " windows."
tiene el valor:
"There are 43 windows."
se evalúa en "A<CHAR128>".
Extracción de subseries
Una subserie es una serie dentro de una serie. Por ejemplo, tab y abla son ambas subseries de tabla.
Puede utilizar el operador [ ] para especificar una subserie utilizando esta sintaxis:
serie[ [
inicio, ] longitud ]
inicio es un número que especifica dónde se inicia la subserie. El primer carácter de la serie cuenta como
1. Si inicio es 0 o un número negativo, se supone que la posición inicial es 1. Si omite inicio, la posición
inicial se calcula según la fórmula siguiente:
longitud.serie - longitud.subserie + 1
v Subseries finales. Puede especificar una subserie final omitiendo inicio en la sintaxis. Por ejemplo, esta
especificación:
"1234567890" [5]
devuelve la subserie:
67890
v Subseries delimitadas. Puede extraer una subserie delimitada con esta sintaxis:
serie [
delimitador, instancia, campos
]
– serie es la serie que contiene la subserie.
– delimitador especifica el carácter que delimita la subserie.
– instancia especifica la instancia del delimitador donde se inicia la extracción.
– campos especifica el número de campos que se van a extraer.
Los delimitadores que marcan el inicio y el final de la extracción no se devuelven, pero si extrae
más de una serie, se devuelven los delimitadores provisionales. Esta sintaxis funciona de la misma
forma que la función Field.
v Asignación de una subserie a una variable. Todas las sintaxis de subserie se pueden utilizar junto con
el operador = para sustituir el valor que normalmente devuelve el operador [ ] por el valor asignado a
la variable. Por ejemplo:
A="12345"
A[3]=1212
devuelve el resultado 121212.
Esta sintaxis funciona de la misma forma que la función FieldStore.
Operadores relacionales
Los operadores relacionales comparan las series u otros datos. El resultado de la comparación puede ser
true ( 1 ) o false ( 0 ). Esta tabla muestra los operadores relacionales que puede utilizar:
Las operaciones aritméticas se ejecutan antes de los operadores relacionales de una expresión. Por
ejemplo, la expresión:
X + Y < (T - 1) / Z
Las series se comparan carácter a carácter. La serie con el código de carácter más alto se considera mayor.
Si todos los códigos de carácter son iguales, las series se consideran iguales.
Un espacio se evalúa como menor que 0. Una serie con los espacios en blanco iniciales y finales se
considera mayor que la misma serie sin los espacios en blanco.
Una serie vacía siempre se compara como una serie de caracteres. No es igual al valor numérico 0.
devuelve true.
devuelve true.
No puede utilizar operadores relacionales para probar si hay un valor nulo. En su lugar, utilice la función
IsNull.
Puede especificar una coincidencia negativa añadiendo ~ (tilde) delante del código. Por ejemplo, ~ 4A
coincide con una serie que no contiene cuatro caracteres alfabéticos. Si n tiene más de nueve dígitos, se
utiliza como serie literal.
Puede especificar varios patrones separándolos con marcas de valor. Por ejemplo, la expresión siguiente
es verdadera si la dirección tiene 16 caracteres alfabéticos o 4 caracteres numéricos seguidos de 12
caracteres alfabéticos; de lo contrario, es falsa:
address Matches "16A":
CHAR(253): "4N12A"
Una serie vacía coincide con los patrones siguientes: "0A", "0X", "0N", "...", "", '' o \\.
Operadores If
Un operador If asigna un valor que cumple las condiciones especificadas. Tiene la sintaxis siguiente:
variable =
If condición Then expresión
Else expresión
El operador If es la única forma de la construcción If...Then...Else que puede utilizarse en una expresión.
Los operadores lógicos prueban estas condiciones. Los operadores lógicos disponibles son:
v And (o el equivalente &)
v Or (o el equivalente !)
v Not (invierte un valor lógico)
Estos son los factores que determinan la prioridad de los operadores en las operaciones lógicas:
v Las operaciones aritméticas y relacionales tienen preferencia sobre las operaciones lógicas.
v Las operaciones lógicas se evalúan de izquierda a derecha.
v Las sentencias And y las sentencias Or tienen una prioridad igual.
v En las cláusulas If...Then...Else, el valor lógico nulo utiliza la acción false.
Operadores de asignación
Los operadores de asignación asignan valores a las variables. Esta tabla muestra los operadores de
asignación y sus usos:
Este ejemplo muestra una secuencia de operaciones en la misma variable. La primera sentencia asigna el
valor 5 a la variable X.
X = 5
Este ejemplo concatena una serie con la variable y es equivale a X=X:Y. Si el valor de X es `con' y el valor
de Y es `catenate':
X := Y
El valor nulo representa unos datos de valor desconocido, tal como se define en SQL.
El valor nulo se representa externamente, según sea necesario, mediante una serie de caracteres formada
por el byte único Char(128). En el tiempo de ejecución, se le asigna un tipo de datos nulo. Los programas
pueden hacer referencia al valor nulo con la variable del sistema @NULL. Para probar si un valor es el
valor nulo, utilice la función IsNull.
Si especifica un valor nulo en una función o en otra operación, siempre se devuelve un valor nulo. Por
ejemplo, si concatena un valor de serie con una serie vacía, se devuelve el valor de serie pero, si
concatena un valor de serie con el valor nulo, se devuelve el valor nulo:
A = @NULL
B = ""
C = "JONES"
X = C:B
Y = C:A
Campos
En las funciones de IBM InfoSphere DataStage como, por ejemplo, Field o FieldStore, puede definir
campos especificando subseries delimitadas. Para determinar qué constituye un campo, tenga en cuenta
lo siguiente:
v Una subserie seguida de un delimitador es un campo.
v Si una serie empieza por un delimitador, InfoSphere DataStage supone que hay un campo que contiene
una serie vacía delante del delimitador.
v Si una subserie final no termina con un delimitador, InfoSphere DataStage supone que hay uno.
Por ejemplo, si utiliza la serie ABC con dos puntos como delimitador, InfoSphere DataStage genera tres o
cuatro campos, de la siguiente manera:
Palabras reservadas
Estas palabras están reservadas y no deben utilizarse como nombres de variable en una transformación o
una rutina:
v And
v Cat
v Else
v End
v Eq
v Ge
v Get
v Go
v GoSub
v GoTo
v Gt
v If
v Include
v Le
v Locked
v Lt
v Match
v Matches
v Ne
v Next
v Or
v Rem
v Remove
v Repeat
v THEN
v Until
v While
Una línea de código fuente puede empezar con una etiqueta de sentencia. Siempre termina con Return.
Caracteres especiales
Los siguientes caracteres tienen un significado especial en las transformaciones y rutinas. Su uso está
restringido en las constantes numéricas y de tipo serie. Tenga en cuenta también que los caracteres ASCII
del 0 al 10 y del 251 al 255 no deben incorporarse en las constantes de tipo serie.
Carácter
Uso permitido
Espacio
Se utiliza en las constantes de tipo serie, o para formatear el código fuente.
Separador
Se utiliza en las constantes de tipo serie, o para formatear el código fuente.
= Se utiliza para indicar los operadores de igualdad o asignación.
+ Signo más. Se utiliza para indicar el operador de suma o el operador unario más.
- Signo menos. Se utiliza para indicar el operador de resta o el operador unario menos.
* Asterisco. Se utiliza para indicar el operador de multiplicación o un comentario en el código
fuente.
\ Barra inclinada invertida. Se utiliza para las series entrecomilladas.
/ Barra inclinada. Se utiliza para indicar el operador de división.
^ Flecha arriba. Se utiliza para indicar el operador de elevación a una potencia.
() Paréntesis. Se utilizan para encerrar argumentos en las funciones o dimensiones de matriz.
# Hash. Se utiliza para indicar el operador de no igual.
$ Signo del dólar. Está permitido en los nombres de variable y las etiquetas de sentencias, pero no
en las constantes numéricas.
[] Corchetes. Se utilizan para indicar el operador de extracción de subserie y para encerrar
determinadas expresiones.
, Coma. Se utiliza para separar argumentos en las funciones y subrutinas, o en las dimensiones de
matriz. No está permitida en las constantes numéricas.
. Punto. Se utiliza para indicar un separador decimal en las constantes numéricas.
"" Comillas dobles. Se utilizan para escribir series entre comillas.
'' Comillas simples. Se utilizan para escribir series entre comillas.
: Dos puntos. Se utiliza para indicar el operador de concatenación o el final de una etiqueta de
sentencia.
; Punto y coma. Se utiliza para indicar el final de una sentencia si desea incluir un comentario en
la misma línea.
& Carácter &. Se utiliza para indicar el operador Y relacional.
< Corchete angular izquierdo. Se utiliza para indicar el operador menor que.
Directivas de compilador
Las directivas de compilador son sentencias que determinan cómo se compila una rutina o una
transformación.
Para hacer esto...
Utilice esto...
Añadir o sustituir un identificador
Sentencia $Define
Eliminar un identificador
Sentencia $Undefine
Especificar una compilación condicional
Sentencias $IfDef y $IfNDef
Incluir otros programas
Sentencia $Include
Declaración
Estas sentencias declaran matrices, funciones y subrutinas para su uso en las rutinas.
Para hacer esto...
Utilice esto...
Definir un área de almacenamiento en la memoria
Sentencia Common
Definir una función escrita por el usuario
Sentencia Deffun
Declarar el nombre y las dimensiones de una variable de matriz
Sentencia Dimension
Identificar una subrutina interna
Sentencia Subroutine
Control de trabajos
Estas funciones se pueden utilizar en una rutina de control de trabajo, que se define como parte de las
propiedades de un trabajo y permite que otros trabajos se ejecuten y sean controlados desde el primer
trabajo. Algunas de estas funciones también se pueden utilizar para obtener información de estado sobre
el trabajo actual; son útiles en expresiones de etapa activa y en subrutinas anteriores y posteriores a la
etapa.
Para hacer esto...
Utilice esto...
Conversión de datos
Estas funciones realizan conversiones numéricas y de caracteres.
Para hacer esto...
Utilice esto...
Convertir valores de código ASCII en sus equivalentes EBCDIC
Función Ebcdic
Convertir valores de código EBCDIC en sus equivalentes ASCII
Función Ascii
Convertir un valor de código ASCII en su equivalente de carácter
Función Char
Convertir un carácter ASCII en su valor de código
Función Seq
Convertir valores hexadecimales en decimales
Función Xtd
Convertir valores decimales en hexadecimales
Función Dtx
Convertir un valor numérico en uno de coma flotante con la precisión especificada
Función FIX
Convertir un valor numérico en uno de coma flotante sin pérdida de precisión
Función REAL
Generar un carácter individual en formato Unicode
Función UniChar
Formateo de datos
Estas funciones pueden utilizarse para formatear los datos en horas, fechas, cantidades monetarias, etc.
Para hacer esto...
Utilice esto...
Convertir datos para la salida
Función Oconv
Convertir datos en la entrada
Función Iconv
Formatear datos para la salida
Función Fmt
Formatear datos por posición de visualización
“Función FmtDP” en la página 230
Sentencia $Define
Define los identificadores que controlan la compilación del programa o proporciona el texto de
sustitución de un identificador. No está disponible en las expresiones.
Sintaxis
$Define
identificador [texto.sustitución]
El valor de identificador es el símbolo que se va a definir. Puede ser cualquier identificador válido.
El valor de texto.sustitución es una serie de caracteres que el compilador utiliza para sustituir identificador
en todos los casos en que aparece en el programa que contiene la sentencia $Define.
Comentarios
Especifique un espacio en blanco para separar el identificador del texto.sustitución. Los siguientes espacios
en blancos se consideran parte del texto.sustitución. Finalice el texto.sustitución con una nueva línea. No
incluya comentarios después del texto.sustitución o se incluirán como parte del texto de sustitución.
Este ejemplo muestra cómo puede utilizarse $Define en el tiempo de compilación para determinar si una
rutina opera en modalidad de depuración, y cómo se utilizan $IfDef y $IfNDef para controlar el flujo del
programa, según corresponda:
* Establece la
siguiente línea en $UnDefine para desactivar el código de depuración
$Define DebugMode
...
$IfDef DebugMode
* En modalidad de depuración, se registra cada vez mediante esta rutina.
Call DSLogInfo("Transform entered,arg1 = ":Arg1, "Test")
$EndIf
Este ejemplo muestra cómo puede utilizarse $Define para sustituir texto del programa por un
identificador simbólico.
* Da un nombre simbólico a los últimos 3 caracteres del
* argumento de entrada de la rutina de transformación.
$Define NameSuffix Arg1[3]
...
If NameSuffix = "X27" Then
* La acción se basa en un valor específico en los últimos 3 caracteres.
...End
Sintaxis
{$IfDef | IfNDef}
identificador [ sentencias ]
$Else [ sentencias ]
$EndIf
Comentarios
Con $IfDef, si el identificador está definido por una sentencia $Define anterior, todas las líneas de código
fuente del programa que aparecen entre la sentencia $IfDef y la sentencia $EndIf de cierre se compilan.
Con $IfNDef, las líneas se compilan si el identificador no está definido. Las sentencias $IfDef y $IfNDef
se pueden anidar hasta 10 niveles.
Ejemplo
Este ejemplo muestra cómo puede utilizarse $Define en el tiempo de compilación para determinar si una
rutina opera en modalidad de depuración, y cómo se utilizan $IfDef y $IfNDef para controlar el flujo del
programa, según corresponda:
* Establece la
siguiente línea en $UnDefine para desactivar el código de depuración
$Define DebugMode
...
Sentencia $Include
Inserta el código fuente contenido en un archivo aparte y lo compila con el programa principal. No está
disponible en las expresiones.
Sintaxis
$Include
programa
Comentarios
El archivo incluido debe estar en el subdirectorio del proyecto DSU_BP. Puede anidar sentencias
$Include.
Sentencia $Undefine
Elimina un identificador que se ha establecido utilizando la sentencia $Define. Si no se establece ningún
identificador, $Undefine no tiene ningún efecto. No está disponible en las expresiones.
Sintaxis
$Undefine
identificador
Operador []
Sintaxis
Extrae una subserie de una serie de caracteres. La segunda sintaxis actúa como la función Field. Los
corchetes del operador [ ] se muestran en negrita y cursiva en la sintaxis y deben especificarse.
serie [ [
inicio,] longitud ]
serie[ delimitador,
instancia, repeticiones ]
serie es la serie de caracteres. Si la serie es un valor nulo, el valor extraído también es nulo.
inicio es un número que define la posición inicial del primer carácter de la subserie. Un valor 0 o un valor
negativo se supone que es 1. Si especifica una posición inicial después del final de serie, se devuelve una
serie vacía.
instancia especifica qué instancia del delimitador marca el final de la subserie. Un valor menor que 1 se
supone que es 1.
Comentarios
Puede especificar una subserie formada por los n últimos caracteres de una serie utilizando la primera
sintaxis y omitiendo inicio.
Ejemplos
El resultado es 67890.
Todas las sintaxis de subserie se pueden utilizar con el operador de asignación ( = ). El nuevo valor
asignado a la variable sustituye a la subserie especificada por el operador [ ]. Este uso no está disponible
en las expresiones. Por ejemplo:
A = ’12345’
A[3] = 1212
Como no se ha especificado ningún argumento de longitud, A[3] sustituye los tres últimos caracteres de
A (345) por el nuevo valor asignado para esa subserie (1212).
Sentencia *
Inserta un comentario en un programa.
Sintaxis
* [texto.comentario]
Comentarios
Un comentario puede aparecer en cualquier lugar del programa, excepto en el texto de sustitución de un
identificador (consulte la sentencia $Define). Cada línea de comentarios completa debe empezar por un
asterisco (*). Si añade un comentario al final de una línea que contiene una sentencia ejecutable, debe
escribir un carácter de punto y coma (;) antes del asterisco.
Ejemplo
Función Abs
Devuelve el valor absoluto (sin signo) de un número.
Sintaxis
Abs
(número)
Comentarios
Una forma útil de eliminar el signo más o menos de una serie. Por ejemplo, si número es -6 o +6, Abs
devuelve 6. Si número es un valor nulo, se devuelve un valor nulo.
Ejemplo
Este ejemplo utiliza la función Abs para calcular el valor absoluto de un número:
AbsValue
= Abs(12.34) ;* devuelve 12.34
AbsValue = Abs(-12.34) ;* devuelve 12.34
Función Alpha
Comprueba si una serie es alfabética. Si el soporte multilingüístico está habilitado, el resultado de esta
función depende del valor de entorno local actual del convenio Ctype.
Sintaxis
Alpha
(serie)
Comentarios
Las series alfabéticas contienen sólo los caracteres de a-z o A-Z. Alpha devuelve 1 si la serie es alfabética,
un valor nulo si la serie es un valor nulo y 0 en los demás casos.
Ejemplos
Estos ejemplos muestran cómo comprobar que una serie contiene sólo caracteres alfabéticos:
Column1 = "ABcdEF%"
* el carácter "%" no es alfabético
Column2 = (If Alpha(Column1) Then "A" Else "B")
* Column2 se establece en "B"
Column1 = ""
* tenga en cuenta que la serie vacía no es un carácter alfabético
Column2 = (If Alpha(Column1) Then "A" Else "B")
* Column2 se establece en "B"
Sintaxis
Ascii
(serie)
serie es la serie o la expresión que desea convertir. Si la serie es un valor nulo, se devuelve un valor nulo.
Comentarios
Nota: Si el soporte multilingüístico está habilitado, esta función puede devolver datos no reconocidos
para la correlación de juego de caracteres actual.
Ejemplo
Este ejemplo muestra cómo se utiliza la función Ascii para comparar una serie de bytes EBCDIC:
EbcdicStr
= Char(193):Char(241) ;* letra A dígito 1 en EBCDIC
AsciiStr = Ascii(EbcdicStr) ;* convierte EBCDIC en ASCII
If AsciiStr = "A1" Then ;* se compara con la constante ASCII
... ;* ... se utiliza esta ramificación
EndIf
Sentencia de asignación
Las sentencias de asignación son =, +=, -= y :=. Asignan valores a las variables. No está disponible en las
expresiones.
Sintaxis
variable
= valor
variable += valor
variable -= valor
variable := valor
valor es el valor que desea asignar. Puede ser una expresión o una constante cualquiera, incluido el valor
nulo.
Comentarios
Funciones Bit
Las funciones Bit son BitAnd, BitOr, BitNot, BitSet, BitReset, BitTest y BitXOr. Realizan operaciones bit
a bit en los enteros.
Sintaxis
BitAnd | BitOr |
BitXOr (entero1, entero2)
BitSet | BitReset | BitTest (entero,
número.bit)
BitNot (entero [,número.bit])
entero1 y entero2 son los enteros que se van a comparar. Si alguno de los valores de entero es nulo, se
devuelve un valor nulo. Los lugares decimales se truncan antes de la evaluación.
entero es el entero que se va a evaluar. Si el entero es un valor nulo, se devuelve un valor nulo. Los
lugares decimales se truncan antes de la evaluación.
número.bit es el número del bit en el que se actúa. Los bits se cuentan de derecha a izquierda a partir de
0. Si número.bit es un valor nulo, el programa falla con un error de tiempo de ejecución.
Comentarios
Las funciones Bit operan en una palabra de complemento de a dos de 32 bits. No utilice estas funciones
si desea que el código sea portátil, ya que el valor de bit superior puede variar en otro hardware.
BitAnd compara dos enteros bit a bit. Para cada bit, devuelve el bit 1 si ambos bits son 1; de lo contrario,
devuelve el bit 0.
BitOr compara dos enteros bit a bit. Para cada bit, devuelve el bit 1 si uno de los bits o ambos son 1; de
lo contrario, devuelve el bit 0.
BitXOr compara dos enteros bit a bit. Para cada bit, devuelve el bit 1 si sólo uno de los dos bits es 1; de
lo contrario, devuelve el bit 0.
BitNot invierte los bits en un entero, es decir, cambia el bit 1 por el bit 0, y viceversa. Si se especifica
número.bit, se invierte ese bit; de lo contrario, se invierten todos los bits.
Ejemplos
BitAnd
Result = BitAnd(6, 12) ;* Result is 4
* (bin) (dec) BitAnd (bin) (dec) gives (bin) (dec)
* 110 6 1100 12 100 4
BitOr
Result = BitOr(6, 12) ;* Result is 14
* (bin) (dec) BitOr (bin) (dec) gives (bin) (dec)
* 110 6 1100 12 1110 14
BitReset
Result = BitReset(29, 0) ;* Result is 28
Result = BitReset(29, 3) ;* Result is 21
Result = BitReset(2, 1) ;* Result is 0
Result = BitReset(2, 0) ;* Result is 2
* (bin) (dec) BitReset bit# gives (bin) (dec)
* 11101 29 0 11100 28
* 11101 29 3 10101 21
* 10 2 1 00 0
* 10 2 0 10 2
BitSet
Result = BitSet(20, 0) ;* Result is 21
Result = BitSet(20, 3) ;* Result is 28
Result = BitSet(2, 0) ;* Result is 3
Result = BitSet(2, 1) ;* Result is 2
* (bin) (dec) BitReset bit# gives (bin) (dec)
* 10100 20 0 10101 21
* 10100 20 2 11100 28
* 10 2 0 11 3
* 10 2 1 10 2
BitTest
Result = BitTest(11, 0) ;* Result is 1
Result = BitTest(11, 1) ;* Result is 1
Result = BitTest(11, 2) ;* Result is 0
Result = BitTest(11, 3) ;* Result is 1
* (bin) (dec) BitTest bit# is:
* 1011 11 0 1
* 1011 11 1 1
* 1011 11 2 0
* 1011 11 3 1
BitXOr
Result = BitXor(6, 12) ;* Result is 10
* (bin) (dec) BitXOr (bin) (dec) gives (bin) (dec)
* 110 6 1100 12 1010 10
Nota: Utilice estas funciones con cuidado: si crea una serie no válida, puede producir resultados
inesperados cuando la procese otra función.
Función Byte
Devuelve un byte de un valor numérico de entrada.
Sintaxis
Byte
(expresión)
Comentarios
La función Byte puede utilizarse para crear una serie byte a byte, en lugar de carácter a carácter. Si el
soporte multilingüístico no está habilitado, la función Byte funciona como la función Char.
Función ByteLen
Devuelve la longitud de una serie interna en bytes, en lugar de en caracteres.
Sintaxis
ByteLen
(expresión)
Comentarios
Si expresión es una serie vacía, el resultado es 0. Si expresión es un nulo SQL, el resultado es un nulo.
Función ByteType
Devuelve la función de un determinado byte en el código de carácter interno.
Sintaxis
ByteType
(valor)
valor es un valor de byte, del 0 al 255, cuya función debe determinarse. Si valor es un nulo SQL, se
devuelve un valor nulo.
Comentarios
Función ByteVal
Devuelve el valor interno de un byte especificado en una serie.
ByteVal
Sintaxis
ByteVal (
serie [, número_byte ] )
serie contiene el byte que se va a evaluar. Una serie vacía o un valor nulo devuelve -1. Una serie que
tiene menos bytes que el número especificado en número_byte devuelve -1.
número_byte es el número del byte en la serie que se evalúa. Si se omite o es menor que 1, se utiliza 1.
Comentarios
Sentencia Call
Llama a una subrutina. No está disponible en las expresiones.
Sintaxis
Call
subrutina [ ( argumento [ ,
argumento ] ... ) ]
argumento es una variable, una expresión o una constante que desea pasar a la subrutina. Si hay varios
argumentos, deben ir separados por comas.
Comentarios
Call transfiere el control de programa del programa principal a una subrutina externa compilada. Utilice
una sentencia Return para devolver el control al programa principal.
El número de argumentos especificados en una sentencia Call debe ser igual al número de argumentos
especificados en la sentencia Subroutine que identifica la subrutina.
Las constantes se pasan por valor; las variables se pasan por referencia. Si desea pasar variables por
valor, delimítelas con paréntesis.
Nota: Si pasa las variables por valor, un cambio en la variable en la subrutina no afecta al valor de la
variable en el programa principal. Si pasa las variables por referencia, un cambio en la variable en la
subrutina también afecta a programa principal.
Este ejemplo muestra cómo llamar a una rutina anterior/posterior denominada MyRoutineB desde otra
rutina denominada MyRoutineA:
Subroutine MyRoutineA(InputArg, ErrorCode)
ErrorCode = 0 ;* se establece el código de error local
* Cuando se invoca una rutina escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe añadir un prefijo "DSU.".
* Asegúrese de proporcionar otra variable para el segundo argumento
* de la rutina invocada para mantenerlo aparte del suyo
* propio.
Call DSU.MyRoutineB("First argument", ErrorCodeB)
If ErrorCodeB <> 0 Then
... ;* la rutina invocada ha fallado; actúe según corresponda
Endif
Return
Sentencia Case
Altera la secuencia de ejecución en el programa de acuerdo con el valor de una expresión. No está
disponible en las expresiones.
Sintaxis
Begin Case Case
expresión sentencias [ Case
expresión sentencias ] ...
End Case
expresión es un valor que se utiliza para probar el caso. Si expresión es un valor nulo, se supone que es
false.
Comentarios
Las sentencias Case pueden estar repetidas. Si el valor de expresión en la primera sentencia Case es true,
se ejecutan las sentencias siguientes. Si expresión es false, el programa cambia a la siguiente sentencia
Case. El proceso se repite hasta que se alcance una sentencia End Case.
Si más de una expresión es true, sólo se actúa en la primera. Si ninguna expresión es true, no se ejecuta
ninguna de las sentencias.
Para probar si una variable contiene un valor nulo, utilice esta sintaxis:
Case IsNull (expresión)
Para especificar un caso predeterminado para que se ejecute si las demás expresiones son false, utilice
una expresión que contenga el valor constante 1.
Ejemplo
Este ejemplo utiliza sentencias Case en el argumento de entrada para seleccionar el tipo de proceso que
se ejecuta en una rutina:
Function MyTransform(Arg1)
Begin Case
Case Arg1 = 1
Reply = "A"
Case Arg1 = 2
Reply = "B"
Sentencia Cats
Concatena dos series.
Sintaxis
Cats
(serie1, serie2)
serie1 y serie2 son las series que se concatenarán. Si alguna de las series es un valor nulo, se devuelve un
valor nulo.
Ejemplo
String1 = "ABC"
String2 = "1234"
Result = Cats(String1, String2)
* El resultado contiene "ABC1234"
Función Change
Sustituye una o varias instancias de una subserie.
Sintaxis
Change
(serie, subserie,
sustitución [,número
[,inicio]])
serie es la serie o la expresión en la que desea cambiar subseries. Si serie se evalúa en un valor nulo, se
devuelve el valor nulo.
subserie es la subserie que desea sustituir. Si está vacía, se devuelve el valor de serie (esta es la única
diferencia entre Change y Ereplace).
sustitución es la subserie de sustitución. Si sustitución es una serie vacía, se eliminan todas las apariciones
de subserie.
número especifica el número de instancias de subserie que hay que sustituir. Para cambiar todas las
instancias, utilice un valor menor que 1.
inicio especifica la primera instancia que hay que sustituir. Un valor menor que 1 toma el valor 1 de
forma predeterminada.
Comentarios
Un valor nulo para serie devuelve un valor nulo. Si utiliza un valor nulo para otra variable, se produce
un error de tiempo de ejecución.
El siguiente ejemplo sustituye todas las apariciones de una subserie por otra:
MyString = "AABBCCBBDDBB"NewString = Change(MyString, "BB",
→ "xxx") * El resultado es "AAxxxCCxxxDDxxx"
Función Char
Genera un carácter ASCII a partir de su valor de código numérico.
Sintaxis
Char
(código)
código es el valor de código ASCII del carácter o una expresión que se evalúa en el código.
Comentarios
Tenga cuidado con los valores nulos. Si el código es un valor nulo, se devuelve un nulo. Si el código es 128,
el valor devuelto es CHAR(128), es decir, la variable del sistema @NULL.STR.
Nota: Si el soporte multilingüístico está habilitado, los valores de código en el rango del 129 al 247
devuelve valores Unicode en el rango de x0081 a x00F7. Estos son caracteres de varios bytes equivalentes
a los mismos valores en el juego de caracteres ISO 8859 (Latin 1). Para generar los bytes específicos con
los valores del 129 al 247, utilice la función Byte.
Ejemplo
Este ejemplo utiliza la función Char para devolver el carácter asociado con el código de carácter
especificado:
MyChar = Char(65) ;* devuelve "A"
MyChar = Char(97) ;* devuelve "a"
MyChar = Char(32) ;* devuelve un espacio
MyChar = Char(544)
* devuelve un espacio (544 = 32 módulos 256)
Función Checksum
Devuelve un valor de suma de comprobación de una serie.
Sintaxis
Checksum
(serie)
Ejemplo
En este ejemplo, se utiliza la función Checksum para devolver un número que es un código de
redundancia cíclica para la serie especificada:
MyString = "This is any arbitrary string value"
CheckValue = Checksum(MyString) ;* devuelve 36235
Sentencia CloseSeq
Cierra un archivo después del proceso secuencial.
Sintaxis
CloseSeq
variable.archivo [On Error sentencias ]
On Error sentencias especifica las sentencias que se ejecutan si se produce un error muy grave durante el
proceso de la sentencia CloseSeq.
Comentarios
Cada referencia de archivo secuencial en una rutina debe ir precedida de una sentencia OpenSeq aparte
para el archivo. OpenSeq establece un bloqueo de registro de actualización en el archivo. De este modo,
se impide que ningún otro programa cambie el archivo mientras se procesa. CloseSeq restablece este
bloqueo después de procesar el archivo. Varias operaciones OpenSeq en el mismo archivo sólo generan
un bloqueo de registro de actualización, por lo que sólo debe incluir una sentencia CloseSeq por archivo.
Si se utiliza la cláusula On Error, el valor devuelto por la función Status es el número de error.
Función Col1
Devuelve la posición del carácter anterior a la subserie especificada en la función Field ejecutada más
recientemente.
Sintaxis
Col1 ( )
Comentarios
La posición del carácter se devuelve como un número. El valor devuelto es local para la rutina que
ejecuta la función Field. El valor de Col1 en la rutina se inicializa como 0.
Ejemplos
La función Field del ejemplo siguiente devuelve la subserie "CCC". Col1 ( ) devuelve 8, la posición del
delimitador (/) que precede a CCC.
* Extraer tercer campo delimitado por
"/".
SubString = Field("AAA/BBB/CCC", "/" ,3)
Position = Col1() ;* obtiene la posición del delimitador
En el ejemplo siguiente, la función Field devuelve una subserie de dos campos con el delimitador (.) que
los separa: 4.5. Col1 ( ) devuelve 6, la posición del delimitador que precede a 4.
* Obtener cuarto y quinto campo delimitado por ".".
SubString = Field("1.2.3.4.5.6", ".", 4, 2)
Position = Col1() ;* obtiene la posición del delimitador
Función Col2
Devuelve la posición del carácter que sigue a la subserie especificada en la función Field ejecutada más
recientemente.
Sintaxis
Col2 ( )
Comentarios
La posición del carácter se devuelve como un número. El valor devuelto es local para la rutina que
ejecuta la función Field. El valor de Col2 en la rutina se inicializa como 0. Cuando se devuelve el control
al programa de llamada, se restaura el valor guardado de Col2.
Ejemplos
La función Field del ejemplo siguiente devuelve la subserie "CCC". Col2 ( ) devuelve 12, la posición que
el delimitador (/) habría ocupado después de CCC si no se hubiera encontrado el final de la serie.
* Extraer tercer campo delimitado por
"/".
SubString = Field("AAA/BBB/CCC", "/" ,3)
Position = Col2() ;* devuelve el final de la serie de hecho
En el ejemplo siguiente, la función Field devuelve una subserie de dos campos con el delimitador (.) que
los separa: 4.5. Col2 ( ) devuelve 10, la posición del delimitador que sigue a 5.
* Obtener cuarto y quinto campo delimitado por ".".
SubString = Field("1.2.3.4.5.6", ".", 4, 2)
Position = Col2() ;* obtiene la posición del delimitador
En el ejemplo siguiente, Field devuelve toda la serie, ya que el delimitador (.) no se encuentra. Col2 ( )
devuelve 6, la posición tras el último carácter de la serie.
En el ejemplo siguiente, Field devuelve una serie vacía, ya que no existe una décima aparición de la
subserie en la serie. Col2 ( ) devuelve 0 porque no se ha encontrado la subserie.
* *
Intenta obtener primero el décimo campo delimitado por ".",
* pero falla.
SubString = Field("9*8*7*6*5*4", "*", 10)
Position = Col2 ;* devuelve 0
Sentencia Common
Define un área de almacenamiento común para las variables. No está disponible en las expresiones.
Sintaxis
Common
/nombre / variable [ ,variable] ...
Comentarios
Todas las rutinas que tienen declarado el /nombre/ común pueden acceder a las variables del área
común. (Utilice la sentencia $Include para definir el área común en cada rutina). Las variables
correspondientes pueden tener distintos nombres en distintas rutinas, pero deben definirse en el mismo
orden. La sentencia Common debe preceder a cualquier referencia a las variables que denomina.
Las matrices se pueden dimensionar y denominar con una sentencia Common. Se pueden volver a
dimensionar más tarde con una sentencia Dimension, pero la sentencia Common debe aparecer antes de
la sentencia Dimension.
Ejemplo
Este ejemplo muestra dos rutinas que se comunican mediante un área común denominada MyCommon,
definida en un archivo aparte en el subdirectorio DSU_BP cuyo nombre está declarado por una sentencia
$Include:
Función Compare
Compara dos series. Si el soporte multilingüístico está habilitado, el resultado de esta función depende
del valor de entorno local actual del convenio Collate.
Sintaxis
Compare
(serie1, serie2 [ ,
justificación ])
El valor de justificación es L para una comparación justificada a la izquierda o R para una comparación
justificada a la derecha. Si no especifica L o R, el valor predeterminado es L. Cualquier otro valor genera
un aviso de tiempo de ejecución, y se devuelve 0.
Comentarios
Utilice una comparación justificada a la derecha para las series numéricas; utilice una comparación
justificada a la izquierda para las series de texto. Tenga cuidado con las series mixtas. Por ejemplo, una
comparación justificada a la derecha de las series AB100 y AB99 indica que AB100 es mayor que AB99 ya
que 100 es mayor que 99. No obstante, una comparación justificada a la derecha de las series AC99 y
AB100 indica que AC99 es mayor ya que C es mayor que B.
Ejemplo
En el ejemplo siguiente, las series AB99 y AB100 se comparan con la opción de justificación a la derecha,
en la que "AB100" es mayor que "AB99":
On Compare("AB99", "AB100", "R") + 2 GoSub
LessThan,
EqualTo
GreaterThan
Sintaxis
Convert
(lista, nueva.lista, serie)
lista es la lista de caracteres que se van a sustituir. Si la lista es un valor nulo, genera un error de tiempo
de ejecución.
La expresión serie se evalúa como la serie o un variable que contiene la serie. Si la serie es un valor nulo,
se devuelve el valor nulo.
Comentarios
Las dos listas de caracteres se corresponden. El primer carácter de nueva.lista sustituye a todas las
instancias del primer carácter de la lista, el segundo sustituye al segundo, etc. Si las dos listas no
contienen el mismo número de caracteres:
v Los caracteres de lista que no tengan caracteres correspondientes en nueva.lista se suprimen del
resultado.
v Los caracteres excedentes de nueva.lista se ignoran.
Ejemplo
Sentencia Convert
Sustituye todas las instancias de los caracteres especificados en una serie por los caracteres de sustitución.
No está disponible en las expresiones.
Sintaxis
Convert
lista To nueva.lista In
serie
lista es la lista de caracteres que se van a sustituir. Si lista es un valor nulo, genera un error de tiempo de
ejecución.
La expresión serie se evalúa como la serie o un variable que contiene la serie. Si la serie es un valor nulo,
se devuelve el valor nulo.
Las dos listas de caracteres se corresponden. El primer carácter de nueva.lista sustituye a todas las
instancias del primer carácter de la lista, el segundo sustituye al segundo, etc. Si las dos listas no
contienen el mismo número de caracteres:
v Los caracteres de lista que no tengan caracteres correspondientes en nueva.lista se suprimen del
resultado.
v Los caracteres excedentes de nueva.lista se ignoran.
Ejemplo
Función Count
Cuanta el número de veces que una subserie aparece en una serie.
Sintaxis
Count
(serie, subserie)
serie es la serie que desea buscar. Si la serie es un valor nulo, se devuelve el valor nulo.
subserie es la subserie que desea contar. Puede ser una serie de caracteres, una constante o una variable. Si
la subserie no aparece en la serie, se devuelve 0. Si la subserie es una serie vacía, se devuelve el número de
caracteres de la serie. Si la subserie es un valor nulo, se produce un error de tiempo de ejecución.
Comentarios
Cuando se cuenta una subserie completa, Count pasa al siguiente carácter y vuelve a empezar. Por
ejemplo, la sentencia siguiente cuenta sólo dos instancias de la subserie tt y devuelve 2 a la variable c:
c = Count (’tttt’, ’tt’)
Ejemplo
* La siguiente línea devuelve el
número de "A"
* en la serie (3).
MyCount = Count("ABCAGHDALL", "A")
* La siguiente línea devuelve 2 ya que las subseries solapadas
* no se cuentan.
MyCount = Count ("TTTT", "TT")
Función CRC32
Devuelve un valor de comprobación de redundancia cíclica de 32 bits para una serie.
Sintaxis
CRC32
(serie)
Ejemplo
En este ejemplo, se utiliza la función CRC para devolver un número que es un código de redundancia
cíclica para la serie especificada:
MyString = "This is any arbitrary string value"
CheckValue = CRC32(MyString) ;* devuelve 36235
Función de fecha
Devuelve una fecha con su formato de sistema interno.
Sintaxis
Date ( )
Comentarios
IBM InfoSphere DataStage almacena las fechas como el número de días antes o después del día 0,
utilizando el 31 de diciembre de 1967 como día 0. Por ejemplo:
Esta fecha...
Se almacena como...
10 de diciembre de 1967
-21
15 de noviembre de 1967
-46
31 de diciembre de 1967
0
15 de febrero de 1968
46
1 de enero de 1985
6575
Ejemplo
Este ejemplo muestra cómo convertir la fecha actual en formato interno en una serie que represente el día
siguiente:
Tomorrow = Oconv(Date() + 1, "D4/YMD") ;* "1997/5/24"
Función DCount
Cuenta los campos delimitados de una serie.
Sintaxis
DCount
(serie, delimitador)
delimitador es uno o varios caracteres que delimitan los campos que se van a contar. Si el delimitador es
una serie vacía, se devuelve el número de caracteres de la serie + 1. Si el delimitador es un valor nulo, se
produce un error de tiempo de ejecución. Dos delimitadores consecutivos en la serie se cuentan como un
campo.
Comentarios
DCount se diferencia de Count en que devuelve el número de valores separados por delimitadores en
lugar del número de apariciones de una serie de caracteres.
Ejemplo
* La siguiente línea devuelve el
número de subseries
* delimitadas por "A" en la serie (4)
MyCount = DCount("ABCAGHDALL", "A")
* La siguiente línea devuelve 3 ya que las subseries solapadas
* no se cuentan.
MyCount = DCount ("TTTT", "TT")
Sentencia Deffun
Define una función escrita por el usuario.
Sintaxis
Deffun
función [ ( [Mat] argumento [, [Mat]
argumento ...] ) ]
[Calling nombre.llamada]
argumento es un argumento que se pasa a la función. Puede proporcionar hasta 254 argumentos. Para
pasar una matriz, especifique Mat antes del nombre de matriz.
Calling nombre.llamada especifica el nombre que se utiliza para llamar a la función. Si no especifica
ningún nombre, la función se invoca utilizando function.
Comentarios
Debe declarar una función escrita por el usuario antes de poder utilizarla en un programa. Puede definir
una función escrita por el usuario una sola vez en un programa. La definición de la función dos veces
genera un error muy grave.
Ejemplo
Este ejemplo muestra cómo definir una función de transformación denominada MyFunctionB, para que
se pueda invocar desde otra función de transformación denominada MyFunctionA:
Function MyFunctionA(Arg1)
* Cuando hace referencia a una función escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe declararla como una función con el
* número correcto de argumentos y añadirle un prefijo "DSU.".
Deffun MyFunctionB(A) Calling "DSU.MyFunctionB"
Sintaxis
Dimension
matriz (filas, columnas) [ ,
matriz (filas, columnas) ] ...
Dimension vector (máx) [ ,
vector (máx) ] ...
Comentarios
Las matrices se pueden volver a dimensionar en el tiempo de ejecución. Puede cambiar una matriz de
unidimensional a bidimensional y viceversa.
El hecho de volver a dimensionar una matriz afecta a los valores de los elementos de matriz tal como se
indica a continuación:
v Los elementos comunes con la misma dirección fila/columna en ambas matrices se conservan.
v Los nuevos elementos que no tenían ninguna dirección fila/columna en la matriz original se inicializan
como no asignados.
v Los elementos redundantes a los que ya no se puede hacer referencia en la nueva matriz se pierden, y
el espacio de memoria se devuelve al sistema operativo.
Si no hay suficiente memoria para la matriz, la sentencia Dimension falla y la siguiente función InMat
devuelve 1.
Para asignar valores a los elementos de la matriz, utilice la sentencia Mat y las sentencias de asignación.
Ejemplo
Este ejemplo muestra cómo puede dimensionarse una matriz dinámicamente en el tiempo de ejecución
basándose en los valores de los argumentos entrantes:
Subroutine MyRoutine(InputArg, ErrorCode)
ErrorCode = 0
* InputArg son 2 campos separados por comas, que se corresponden con las dimensiones
Rows = Field(InputArg, ",", 1)
Cols = Field(InputArg ",", 2)
Dimension MyMatrix(Rows, Cols)
If InMat = 1 Then
* No se ha podido obtener el espacio para la matriz; sale con estado de error.
Call DSLogWarn("Could not dimension matrix","MyRoutine")
ErrorCode = -1
Else
* Continúe.
...
End
Sintaxis
Div
(dividendo, divisor)
dividendo es el número que se va a dividir. Si dividendo es un valor nulo, se devuelve el valor nulo.
divisor es el número por el que se divide. divisor no puede ser 0. Si divisor es un valor nulo, se devuelve el
valor nulo.
Comentarios
Ejemplos
Función DownCase
Convierte las letras mayúsculas de una serie a minúsculas. Si el soporte multilingüístico está habilitado,
el resultado de esta función depende del valor de entorno local actual del convenio Ctype.
Sintaxis
DownCase
(serie)
serie es la serie o expresión que desea cambiar a minúsculas. Si la serie es un valor nulo, se devuelve el
valor nulo.
Ejemplo
Función DQuote
Delimita una serie mediante comillas dobles.
Sintaxis
DQuote
(serie)
serie es la serie que se escribirá entre comillas. Si la serie es un valor nulo, se devuelve el valor nulo.
Para especificar una serie entre comillas simples, utilice la función SQuote.
Ejemplo
Este es un ejemplo de la función DQuote que añade comillas dobles (") al principio y al final de una
serie:
ProductNo = 12345
QuotedStr = DQuote(ProductNo : "A")
* el resultado es "12345A"
DSAttachJob
Se conecta a un trabajo a fin de ejecutarlo en una secuencia de control de trabajos. Se devuelve un
descriptor de contexto que se utiliza para direccionar el trabajo. Sólo puede haber un descriptor de
contexto abierto para un trabajo determinado en cualquier momento dado.
Sintaxis
DescriptorContextoTrabajo = DSAttachJob (NombreTrabajo, ModalidadError)
DescriptorContextoTrabajo es el nombre de una variable para mantener el valor de retorno que utiliza
posteriormente cualquier otra función o rutina al hacer referencia al trabajo. No presuponga que este
valor es un entero.
NombreTrabajo es una serie que proporciona el nombre del trabajo al que se conectará.
ModalidadError es un valor que especifica cómo otras rutinas que utilizan el descriptor de contexto deben
notificar errores. Es una de las siguientes:
v DSJ.ERRFATAL Registra un mensaje muy grave y termina anormalmente el trabajo de control (valor
predeterminado).
v DSJ.ERRWARNING Registra un mensaje de aviso pero continúa.
v DSJ.ERRNONE No registra ningún mensaje - el emisor de la llamada tiene toda la responsabilidad (sin
embargo, se registrará anomalía del propio DSAttachJob).
Comentarios
El parámetro NombreTrabajo puede especificar una versión exacta del trabajo en forma de trabajo%Reln.n.n
o la versión más reciente del trabajo con el formato trabajo. Si se libera el propio trabajo de control,
obtendrá la versión liberada más reciente del trabajo. Si el trabajo de control es una versión de desarrollo,
obtendrá la versión de desarrollo más reciente de trabajo.
Ejemplo
DSCheckRoutine
Comprueba si está catalogada una rutina de BASIC, en el VOC como elemento invocable o en el espacio
de catálogo.
Ejemplo
rtn$ok = DSCheckRoutine("DSU.DSSendMail")
If(NOT(rtn$ok)) Then
* aquí manejo de errores
End.
DSDetachJob
Devuelve un DescriptorContextoTrabajo adquirido por DSAttachJob si no es necesario ningún control
adicional de un trabajo (permitiendo que otro trabajo se convierta en su controlador). No es necesario
llamar a esta función; de lo contrario, los trabajos conectados se desconectarán automáticamente cuando
finalice el trabajo de control.
Sintaxis
CódigoError = DSDetachJob (DescriptorContextoTrabajo)
El único error posible es un intento de cerrar DSJ.ME. De lo contrario, la llamada siempre es satisfactoria.
Ejemplo
DSExecute
Ejecuta un mandato del motor, de DOS o de UNIX desde una subrutina anterior/posterior.
Sintaxis
Call DSExecute (TipoShell, Mandato, Salida, CódigoRetornoSistema)
TipoShell (entrada) especifica el tipo de mandato que desea ejecutar y es NT, UNIX o UV (para motor).
Mandato (entrada) es el mandato que se ejecutará. Mandato no debe solicitar entrada cuando se ejecute.
Salida (salida) es cualquier salida del mandato. Cada línea de salida aparece separada por una marca de
campo, @FM. La salida se añade al archivo de registro de trabajo como un mensaje informativo.
CódigoRetornoSistema (salida) es el código que indica el resultado satisfactorio del mandato. Un valor de 0
significa que el mandato se ha ejecutado satisfactoriamente. Un valor de 1 (para un mandato de DOS o
UNIX) indica que el mandato no se ha encontrado. Cualquier otro valor es un código de salida específico
del mandato.
No utilice DSExecute desde una transformación; la sobrecarga de ejecutar un mandato para cada fila
procesada por una etapa degradará el rendimiento del trabajo.
DSGetCustInfo
Obtiene información notificada al final de la ejecución de determinadas etapas paralelas. La información
recopilada, y disponible para su interrogación, se especifica durante el tiempo de diseño. Por ejemplo, la
información de la etapa Transformer se especifica en el separador Desencadenantes del recuadro de
diálogo Propiedades de la etapa Transformer.
Sintaxis
Resultado = DSGetCustInfo (DescriptorContextoTrabajo, NombreEtapa, NombreInfoPers, TipoInfo)
NombreEtapa es el nombre de la etapa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.
TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:
DSJ.CUSTINFOVALUE
DSJ.CUSTINFODESC
DSGetJobInfo
Proporciona un método de obtención de información sobre un trabajo, que se puede utilizar de forma
general así como para control de trabajos. Puede hacer referencia al trabajo actual o a un trabajo
controlado, dependiendo del valor de DescriptorContextoTrabajo.
Sintaxis
Resultado = DSGetJobInfo (DescriptorContextoTrabajo, TipoInfo)
DSJ.JOBSTATUS
DSJ.JOBNAME
DSJ.JOBCONTROLLER
DSJ.JOBSTARTTIMESTAMP
DSJ.JOBWAVENO
DSJ.PARAMLIST
DSJ.STAGELIST
DSJ.USERSTATUS
DSJ.JOBCONTROL
DSJ.JOBPID
DSJ.JPBLASTTIMESTAMP
DSJ.JOBINVOCATIONS
DSJ.JOBINTERIMSTATUS
DSJ.JOBINVOCATIONID
DSJ.JOBDESC
DSJ.JOBFULLDESC
DSJ.STAGELIST2
DSJ.JOBELAPSED
DSJ.JOBEOTCOUNT
DSJ.JOBEOTTIMESTAMP
DSJ.JOBRTISERVICE
DSJ.JOBMULTIINVOKABLE
DSJ.JOBFULLSTAGELIST
Comentarios
Cuando se hace referencia a un trabajo controlado, se puede utilizar DSGetJobInfo antes o después de
haber emitido un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob
es una garantía de que está relacionado con esa ejecución del trabajo.
Ejemplos
El mandato siguiente solicita el estado de trabajo del trabajo qsales:
q_status = DSGetJobInfo(qsales_handle, DSJ.JOBSTATUS)
DSGetJobMetaBag
Devuelve una matriz dinámica que contiene las propiedades de MetaBag asociadas con el trabajo
nombrado.
Sintaxis
Resultado = DSGetJobMetaBag(NombreTrabajo, Propietario)
o
Call DSGetJobMetaBag(Resultado, NombreTrabajo, Propietario)
NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, Resultado se establecerá en una serie vacía.
Resultado devuelve una matriz dinámica de conjuntos de propiedades de metabag, de la forma siguiente:
Ejemplo
Sintaxis
Resultado = DSGetLinkInfo (DescriptorContextoTrabajo, NombreEtapa, NombreEnlace, TipoInfo)
NombreEtapa es el nombre de la etapa activa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.
NombreEnlace es el nombre de un enlace (entrada o salida) conectado a la etapa. También puede ser
DSJ.ME para hacer referencia al enlace actual (por ejemplo, cuando se utiliza en una expresión de
Transformer o función de transformación denominada desde código de enlace).
TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:
DSJ.LINKLASTERR
DSJ.LINKNAME
DSJ.LINKROWCOUNT
DSJ.LINKSQLSTATE
DSJ.LINKDBMSCODE
DSJ.LINKDESC
DSJ.LINKSTAGE
DSJ.INSTROWCOUNT
DSJ.LINKEOTROWCOUNT
Comentarios
Cuando se hace referencia a un trabajo controlado, se puede utilizar DSGetLinkInfo antes o después de
haber emitido un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob
es una garantía de que está relacionado con esa ejecución del trabajo.
Ejemplo
El mandato siguiente solicita el número de filas que se han pasado al enlace order_feed en la etapa de
cargador del trabajo qsales:
link_status = DSGetLinkInfo(qsales_handle, "cargador",
→ "order_feed", DSJ.LINKROWCOUNT)
DSGetLinkMetaData
Devuelve una matriz dinámica que contiene los metadatos de columna del enlace especificado.
Sintaxis
Resultado = DSGetLinkMetaData(Nombretrabajo, NombreEtapa, NombreEnlace)
o
Call DSGetLinkMetaData(Resultado, NombreTrabajo, NombreEtapa, NombreEnlace)
NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, la función devolverá una serie vacía.
NombreEtapa es el nombre de la etapa en el trabajo especificado que contiene el enlace para el cual es
necesaria la información. Si NombreEtapa no existe en el trabajo especificado, la función devolverá una
serie vacía.
NombreEnlace es el nombre del enlace en el trabajo especificado para el cual es necesaria la información. Si
NombreEnlace no existe en el trabajo especificado, la función devolverá una serie vacía.
Resultado devuelve una matriz dinámica de nueve campos, donde cada uno de ellos contendrá N valores
donde N es el número de columnas en el enlace.
Ejemplo
Lo siguiente devuelve los metadatos del enlace enlacei1 en la etapa etapasec del trabajo trabajoprueba:
linksmdata = DSGetLinkMetaData (trabajoprueba, etapasec, enlacei1)
DSGetLogEntry
Lee todos los detalles del suceso proporcionados en IDsuceso.
Sintaxis
DetalleSuceso = DSGetLogEntry (DescriptorContextoTrabajo, IDsuceso)
IDsuceso es un entero que identifica el suceso de registro específico para el que son necesarios los detalles.
Se obtiene utilizando la función DSGetNewestLogId.
DetalleSuceso es una serie que contiene subseries separadas por \. Las subseries tienen la forma siguiente:
Si se produce un error, el error se notifica mediante uno de los siguientes códigos de resultado de entero
negativo:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADVALUE Error al acceder a IDsuceso.
Ejemplo
Los mandatos siguientes en primer lugar obtienen el IDsuceso para el suceso de registro necesario y a
continuación leen todos los detalles del suceso del suceso de registro identificado por LatestLogid en la
serie LatestEventString:
latestlogid =
→ DSGetNewestLogId(qsales_handle,DSJ.LOGANY)
LatestEventString =
→ DSGetLogEntry(qsales_handle,latestlogid)
DSGetLogEventIds
Devuelve una lista de ID de suceso de registro para una ejecución determinada de una invocación de
trabajo.
FiltroTipoSuceso restringe los tipos de entrada de registro de suceso para los que se devuelven los ID. De
forma predeterminada se devuelven los ID para todas las entradas de registro. Incluya caracteres en la
serie del filtro para restringir las entradas de la forma siguiente:
I Informativo
W Aviso
F Muy grave
S Sucesos de inicio o finalización
B Sucesos de proceso por lotes o control
R Sucesos de depuración o restablecimiento
J Sucesos de rechazo
ListaID se devuelve como una lista de enteros positivos que identifican los sucesos de registro necesarios.
En caso de un error, ListaID también se puede devolver como un entero negativo, en cuyo caso contiene
uno de estos códigos de error:
DSJE.BADHANDLE
DescriptorContextoTrabajo no válido.
DSJE.BADTYPE
FiltroTipoSuceso no válido.
DSJE.BADVALUE
NúmeroEjecución no válido.
Comentarios
Para utilizar este método, es necesario que el programa haya adquirido anteriormente un descriptor de
contexto de trabajo llamando a DSAttachJob.
El número de ejecución para una invocación de trabajo se restablece cuando se compila el trabajo; por lo
tanto, no es posible utilizar este método para recuperar ID de suceso de trabajo para ejecuciones que se
han producido antes de la compilación más reciente del trabajo.
DSGetLogSummary
Devuelve una lista de detalles cortos de suceso de registro. Los detalles que se devuelven se determinan
mediante el establecimiento de algunos filtros. (Se debe tener cuidado al establecer los filtros; de lo
contrario, se puede devolver una gran cantidad de información.)
NúmeroMáx es un entero que restringe el número de sucesos a devolver. 0 significa ninguna restricción.
Utilice este valor con precaución.
MatrizResumen es una matriz dinámica de campos separados por @FM. Cada campo consta de un
conjunto de subseries separadas por \, donde cada campo representa un suceso separado, con las
subseries con el formato siguiente:
Si se produce un error, el error se notifica mediante uno de los siguientes códigos de resultado de entero
negativo:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE TipoSuceso no válido.
v DSJE.BADTIME HoraInicio u HoraFinalización no válido.
v DSJE.BADVALUE NúmeroMáx no válido.
Ejemplo
El mandato siguiente produce una matriz de sucesos activos de enlace de rechazo registrados para el
trabajo qsales entre el 18 de agosto de 1998 y el 18 de septiembre de 1998, hasta un máximo de MAXREJ
entradas:
RejEntries = DSGetLogSummary (qsales_handle,
→ DSJ.LOGREJECT, "1998-08-18 00:00:00", "1998-09-18
→ 00:00:00", MAXREJ)
DSGetNewestLogId
Obtiene el ID del suceso de registro más reciente en una categoría determinada o en cualquier categoría.
IDsuceso es un entero positivo que identifica el suceso de registro específico. En caso de un error, IDsuceso
también se puede devolver como un entero negativo, en cuyo caso contiene un código de error como el
siguiente:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE TipoSuceso no válido.
Ejemplo
El mandato siguiente obtiene un ID para el mensaje de aviso más reciente en el registro para el trabajo
qsales:
IDAviso = DSGetNewestLogId (qsales_handle,
→ DSJ.LOGWARNING)
DSGetParamInfo
Proporciona un método de obtener información sobre un parámetro, que se puede utilizar de forma
general así como para control de trabajo. Esta rutina puede hacer referencia a un trabajo controlado o al
trabajo actual, en función del valor de DescriptorContextoTrabajo.
Sintaxis
Resultado = DSGetParamInfo (DescriptorContextoTrabajo, NombreParám, TipoInfo)
TipoInfo especifica la información necesaria y puede ser uno de los valores siguientes:
DSJ.PARAMDEFAULT
DSJ.PARAMHELPTEXT
DSJ.PARAMPROMPT
DSJ.PARAMTYPE
DSJ.PARAMVALUE
DSJ.PARAMLISTVALUES
DSJ.PARAMDES.LISTVALUES
DSJ.PARAMPROMPT.AT.RUN
Comentarios
Cuando se hace referencia a un trabajo controlado, DSGetParamInfo se puede utilizar antes o después de
haber emitido un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob
es una garantía de que está relacionado con esa ejecución del trabajo.
Ejemplo
El mandato siguiente solicita el valor predeterminado del parámetro de trimestre para el trabajo qsales:
DSGetProjectInfo
Proporciona un método de obtención de información sobre el proyecto actual.
Sintaxis
Resultado = DSGetProjectInfo (TipoInfo)
TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:
DSJ.JOBLIST
DSJ.PROJECTNAME
DSJ.HOSTNAME
DSGetStageInfo
Proporciona un método de obtener información sobre una etapa, que se puede utilizar de forma general
así como para control de trabajos. Puede hacer referencia al trabajo actual, o un trabajo controlado, en
función del valor de DescriptorContextoTrabajo.
Sintaxis
Resultado = DSGetStageInfo (DescriptorContextoTrabajo, NombreEtapa, TipoInfo)
NombreEtapa es el nombre de la etapa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.
TipoInfo especifica la información necesaria y puede ser uno de los valores siguientes:
DSJ.LINKLIST
DSJ.STAGELASTERR
DSJ.STAGENAME
DSJ.STAGETYPE
DSJ.STAGEINROWNUM
DSJ.STAGESTARTTIMESTAMP
DSJ.STAGEENDTIMESTAMP
DSJ.STAGEDESC
DSJ.STAGEINST
DSJ.STAGECPU
DSJ.LINKTYPES
DSJ.STAGEELAPSED
DSJ.STAGEPID
DSJ.STAGESTATUS
DSJ.STAGEEOTCOUNT
DSJ.STAGEEOTTIMESTAMP
DSJ.CUSTINFOLIST
DSJ.STAGEEOTSTART
Comentarios
Cuando se hace referencia a un trabajo controlado, se puede utilizar DSGetStageInfo antes o después de
emitir un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob es una
garantía de que está relacionado con esa ejecución del trabajo.
Ejemplo
El mandato siguiente solicita el último mensaje de error para la etapa de cargador del trabajo qsales:
stage_status = DSGetStageInfo(qsales_handle, "cargador",
→ DSJ.STAGELASTERR)
DSGetStageLinks
Devuelve una lista delimitada por marcas de campo que contiene los nombres de todos los enlaces de
entrada/salida de la etapa especificada.
Sintaxis
Resultado = DSGetStageLinks(Nombretrabajo, NombreEtapa, Clave)
o
Call DSGetStageLinks(Resultado, NombreTrabajo, NombreEtapa, Clave)
NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, la función devolverá una serie vacía.
Clave dependiendo del valor de la clave, la lista devuelta contendrá todos los enlaces de la etapa
(Clave=0), sólo los enlaces de entrada de la etapa (Clave=1) o sólo los enlaces de salida de la etapa
(Clave=2).
Resultado devuelve una lista delimitada por marcas de campo que contiene los nombres de los enlaces.
Ejemplo
Lo siguiente devuelve una lista de todos los enlaces de entrada en la etapa denominada "unión1" en el
trabajo "trabajoprueba":
linkslist = DSGetStageLinks (trabajoprueba, unión1, 1)
Sintaxis
Resultado = DSGetStagesOfType (NombreTrabajo, TipoEtapa)
o bien
Call DSGetStagesOfType (Resultado, NombreTrabajo, TipoEtapa)
NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, la función devolverá una serie vacía.
TipoEtapa es el nombre del tipo de etapa, como muestra el formulario de propiedades de tipo de etapa de
repositorio, como por ejemplo CTransformerStage o ORAOCI8. Si el TipoEtapa no existe en el proyecto
actual o no hay etapas de ese tipo en el trabajo especificado, la función devolverá una serie vacía.
Resultado devuelve una lista delimitada por marcas de campo que contiene los nombres de todas las
etapas del tipo especificado en un trabajo nombrado.
Ejemplo
Lo siguiente devuelve una lista de todas las etapas Aggregator en el trabajo paralelo "trabajoprueba":
stagelist = DSGetStagesOfType (trabajoprueba, PxAggregator)
DSGetStagesTypes
Devuelve una serie delimitada por marcas de campo de todos los tipos de etapas activas y pasivas que
existen dentro de un trabajo nombrado.
Sintaxis
Resultado = DSGetStageTypes(Nombretrabajo)
o
Call DSGetStageTypes(Resultado, Nombretrabajo)
NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, Resultado se establecerá en una serie vacía.
Resultado es una serie delimitada por marcas de campo de tipos de etapas dentro de NombreTrabajo.
Ejemplo
Lo siguiente devuelve una lista de todos los tipos de etapa en el trabajo "trabajoprueba":
stagetypelist = DSGetStagesOfType (trabajoprueba)
DSGetVarInfo
Proporciona un método de obtención de información sobre variables utilizado en las etapas Transformer.
Sintaxis
Resultado = DSGetVarInfo (DescriptorContextotrabajo, NombreEtapa, NombreVar, TipoInfo)
TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:
DSJ.VARVALUE
DSJ.VARDESCRIPTION
DSIPCPageProps
Devuelve el tamaño (en KB) del almacenamiento intermedio de envío y recepción de una etapa IPC (o
servicio web).
Sintaxis
Resultado = DSGetIPCStageProps (NombreTrabajo, NombreEtapa)
o
Call DSGetIPCStageProps (Resultado, Nombretrabajo, NombreEtapa)
NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, Resultado se establecerá en una serie vacía.
NombreEtapa es el nombre de una etapa IPC en el trabajo especificado para la que es necesaria
información. Si NombreEtapa no existe o si no es una etapa IPC dentro de NombreTrabajo, el Resultado se
establecerá en una serie vacía.
Ejemplo
Sintaxis
CódigoError = DSLogEvent (DescriptorContextoTrabajo, TipoSuceso, MsjSuceso)
CódigoError es 0 si no hay ningún error. De lo contrario, contiene uno de los errores siguientes:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE TipoSuceso (especialmente, tenga en cuenta que no puede colocar un mensaje muy
grave en el registro de otro trabajo).
Ejemplo
El mandato siguiente, cuando se incluye en el trabajo msales, añade el mensaje "ventas mensuales
finalizadas" al registro para el trabajo qsales:
Logerror = DsLogEvent (qsales_handle, DSJ.LOGINFO,
→ "ventas mensuales finalizadas")
DSLogFatal
Registra un mensaje de error muy grave en el archivo de registro de un trabajo y termina el trabajo.
Sintaxis
Call DSLogFatal (Mensaje, NombreProgLlamada)
Mensaje (entrada) es el mensaje de aviso que desea registrar. Mensaje recibe automáticamente como prefijo
el nombre de la etapa actual y la subrutina anterior/posterior de llamada.
Comentarios
DSLogFatal graba un mensaje de error muy grave en el archivo de registro del trabajo y termina
anormalmente el trabajo. DSLogFatal nunca vuelve a la subrutina anterior/posterior de llamada, de
forma que se debe utilizar con precaución. Si un trabajo se detiene con un error muy grave, se debe
restablecer utilizando el cliente del Director antes de poder volver a ejecutarlo.
DSLogInfo
Registra un mensaje de información en el archivo de registro de un trabajo.
Sintaxis
Call DSLogInfo (Mensaje, NombreProgLlamada)
Mensaje (entrada) es el mensaje de información que desea registrar. Mensaje recibe automáticamente como
prefijo el nombre de la etapa actual y del programa de llamada.
Comentarios
DSLogInfo graba el texto del mensaje en el archivo de registro del trabajo como un mensaje de
información y vuelve a la rutina de llamada o transformación. Si se llama a DSLogInfo durante la fase de
prueba para una rutina recientemente creada en el repositorio, los dos argumentos se visualizan en la
ventana de resultados.
Se puede grabar un número ilimitado de mensajes de información en el archivo de registro del trabajo.
Sin embargo, si se producen muchos mensajes, es posible que el trabajo se ejecute lentamente y que el
cliente del Director tarde algún tiempo en mostrar el archivo de registro del trabajo.
Ejemplo
Call DSLogInfo("Transformando: ":Arg1, "MiTransformación")
DSLogToController
Esta rutina se puede utilizar para poner un mensaje informativo en el archivo de registro del trabajo que
controla este trabajo, si hay alguno. Si no hay ninguno, la llamada simplemente se ignora.
Sintaxis
Call DSLogToController(SerieMsj)
Comentarios
Ejemplo
Call DSLogToController("Se registra en el padre")
DSLogWarn
Inicia un mensaje de aviso en el archivo de registro de un trabajo.
Sintaxis
Call DSLogWarn (Mensaje, NombreProgLlamada)
Comentarios
DSLogWarn graba el mensaje en el archivo de registro del trabajo como aviso y devuelve la subrutina
anterior/posterior de llamada. Si el trabajo tiene un límite de aviso definido para el mismo, cuando el
número de avisos alcanza ese límite, la llamada no devuelve el valor de retorno y el trabajo termina
anormalmente.
Ejemplo
If InputArg > 100 Then
Call DSLogWarn("La entrada debe ser =< 100; received
":InputArg,"MiRutina")
End Else
* Continuar procesando a menos que el trabajo termine anormalmente
End
DSMakeJobReport
Genera un informe que describe el estado completo de un trabajo conectado válido.
Sintaxis
TextoInforme = DSMakeJobReport(DescriptorContextoTrabajo, NivelInforme, SeparadorLíneas)
SeparadorLíneas es la serie utilizada para separar líneas del informe. Los valores especiales reconocidos
son:
v "CRLF" => CHAR(13):CHAR(10)
v "LF" => CHAR(10)
v "CR" => CHAR(13)
Ejemplo
h$ = DSAttachJob("MiTrabajo", DSJ.ERRNONE)
rpt$ = DSMakeJobReport(h$,0,"CRLF")
DSMakeMsg
Inserta argumentos en una plantilla de mensaje. Opcionalmente, buscará un ID de plantilla en el archivo
de mensajes de InfoSphere DataStage y utilizará cualquier plantilla de mensaje devuelta en lugar de la
proporcionada a la rutina.
Sintaxis
TextoCompleto = DSMakeMsg(Plantilla, ListaArg)
Plantilla es la plantilla de mensaje, en la que %1, %2, etc. se sustituirán por valores en la posición
equivalente en ListaArg. Si la serie de plantilla empieza con un número seguido de "\", se asume que
forma parte de un ID de mensaje que se buscará en el archivo de mensajes de InfoSphere DataStage.
Nota: si una señal de argumento va seguida de "[E]", se asume que el valor de ese argumento es un
código de error de control de trabajo y se insertará una explicación del mismo en lugar de "[E]".
(Consulte la función DSTranslateCode.)
Comentarios
Se llama a esta rutina desde el código de control de trabajo creado por JobSequence Generator. Es
básicamente un interludio para llamar a DSRMessage que oculta cualquier inclusión de tiempo de
ejecución.
También realizará sustitución de parámetros de trabajo local en el texto del mensaje. Es decir, si se llama
desde dentro de un trabajo, busca subseries como por ejemplo "#xyz#" y las sustituye por el valor del
parámetro de trabajo denominado "xyz".
Ejemplo
t$ = DSMakeMsg("Error al llamar a DSAttachJob(%1)<L>%2",
→jb$:@FM:DSGetLastErrorMsg())
DSPrepareJob
Se utiliza para asegurar que un trabajo compilado está en el estado correcto para ser ejecutado o
validado.
Sintaxis
DescriptorContextoTrabajo = DSPrepareJob(DescriptorContextoTrabajo)
DescriptorContextoTrabajo es el descriptor de contexto, tal como lo devuelve DSAttachJob(), del trabajo que
se preparará.
Ejemplo
h$ = DSPrepareJob(h$)
DSRunJob
Inicia la ejecución de un trabajo. Tenga en cuenta que esta llamada es asíncrona; la solicitud se pasa al
motor de tiempo de ejecución, pero no se informa de su progreso.
Sintaxis
CódigoError = DSRunJob (DescriptorContextoTrabajo, ModalidadEjecución)
CódigoError es 0 si DSRunJob es satisfactorio; de lo contrario puede ser uno de los enteros negativos
siguientes:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADSTATE El trabajo no está en el estado correcto (compilado, no en ejecución).
v DSJE.BADTYPE ModalidadEjecución no es una modalidad conocida.
Comentarios
Un trabajo en modalidad de validación ejecutará su rutina JobControl (si existe) en lugar de comprobar
solamente su existencia, como es el caso para las rutinas anteriores/posteriores. Esto permite examinar el
registro de qué trabajo ha iniciado en modalidad de validación.
Ejemplo
Sintaxis
Respuesta = DSSendMail(Parámetros)
Los nombres que se reconocen actualmente (sin distinguir entre mayúsculas y minúsculas) son los
siguientes:
v "De" Dirección de correo del remitente, por ejemplo, Aqui@Enalgúnlugar.com
Sólo se puede dejar en blanco si el archivo de plantilla local no contiene una señal "%from%".
v "Para" Dirección de correo del destinatario, por ejemplo, Tu@Enalgúnlugar.com
Sólo se puede dejar en blanco si el archivo de plantilla local no contiene una señal "%to%".
v "Asunto" Algo que poner en la línea del asunto del mensaje.
Hace referencia a la señal "%subject%". Si se deja como "", se creará una línea de asunto estándar, junto
con las líneas de "From InfoSphere DataStage job: jobname"
v "Servidor" Nombre de host a través del cual se enviará el correo.
Se puede omitir en sistemas (por ejemplo, Unix) donde el nombre de host SMTP se puede configurar, y
se configura, externamente, en cuyo caso el archivo de plantilla local presumiblemente no contendrá
una señal "%server%".
v "Cuerpo" Cuerpo del mensaje.
Se puede omitir. Se enviará un mensaje vacío. Si se utiliza, debe ser el último parámetro, para permitir
la obtención de varias líneas en el mensaje, utilizando "\n" para saltos de línea. Hace referencia a la
señal "%body%".
Nota: Es posible que el texto del cuerpo contenga las señales "%report% o %fullreport% en cualquier
lugar dentro del mismo, lo que hará que se inserte en ese punto un informe en el estado de trabajo
actual. Un informe completo contiene información de etapa y enlace así como estado de trabajo.
Comentarios
La rutina busca un archivo local en el directorio actual de proyectos, con un nombre conocido. Es decir,
una plantilla para describir exactamente cómo ejecutar el mandato sendmail local.
Ejemplo
code = DSSendMail("De:yo@aquí\nPara:Tu@allí\nAsunto:Hola\nCuerpo:Línea1\nLínea2")
DSSetDisableJobHandler
Enable or disable job-level message handling.
value is TRUE to disable job-level message handling, or FALSE to enable job-level message handling.
Example
The following command disables job-level message handling for the qsales job:
GenErr = DSSetDisableJobHandler (qsales_handle, TRUE)
DSSetDisableProjectHandler
Enable or disable project-level message handling.
Syntax
ErrCode = DSSetDisableProjectHandler (ProjectHandle, value)
value is TRUE to disable project-level message handling, or FALSE to enable project-level message
handling.
Example
The following command disables project-level message handling for the qsales project:
GenErr = DSSetDisableProjectHandler (qsales_handle, TRUE)
DSSetGenerateOpMetaData
Se utiliza para especificar si el trabajo genera metadatos operativos. Altera temporalmente el valor
predeterminado para el proyecto.
Sintaxis
CódigoError = DSSetGenerateOpMetaData (DescriptorContextoTrabajo, valor)
valor es TRUE para generar metadatos operativos, FALSE para no generar metadatos operativos.
CódigoError es 0 si DSRunJob es satisfactorio; de lo contrario puede ser uno de los enteros negativos
siguientes:
Ejemplo
El mandato siguiente hace que el trabajo qsales genere metadatos operativos independientemente de lo
que especifique el valor predeterminado del proyecto:
DSSetJobLimit
De manera predeterminada, un trabajo controlado hereda los límites de filas o avisos del trabajo de
control. Sin embargo, la función DSSetJobLimit los puede alterar temporalmente.
Sintaxis
CódigoError = DSSetJobLimit (DescriptorTrabajoContexto, TipoLímite, ValorLímite)
TipoLímite es el nombre del límite que se aplicará al trabajo en ejecución y es uno de los siguientes:
v DSJ.LIMITWARN Trabajo que se detendrá después de ValorLímite sucesos de aviso.
v DSJ.LIMITROWS Etapas que se limitarán a ValorLímite filas.
ValorLímite es un entero que especifica el valor en el que se establecerá el límite. Establézcalo en 0 para
especificar un número ilimitado de avisos.
Ejemplo
El mandato siguiente establece un límite de 10 avisos en el trabajo qsales antes de que se detenga:
LimitErr = DSSetJobLimit(qsales_handle,
→ DSJ.LIMITWARN, 10)
DSSetParam
Especifica los valores de parámetro del trabajo antes de ejecutar un trabajo. Cualquier parámetro que no
se establezca adoptará el valor predeterminado.
Sintaxis
CódigoError = DSSetParam (DescriptorContextoTrabajo, NombreParám, ValorParám)
Ejemplo
DSSetUserStatus
Se aplica sólo al trabajo actual y no toma un parámetro DescriptorContextoTrabajo. La puede utilizar
cualquier trabajo en una rutina de control de trabajo o posterior para establecer un código de terminación
para la interrogación por parte de otro trabajo. De hecho, el código se puede establecer en cualquier
punto del trabajo y el último valor es el que se tomará en cualquier momento. Por lo tanto, para estar
seguro de obtener el código de terminación real para un trabajo, el emisor de la llamada debe utilizar en
primer lugar DSWaitForJob y DSGetJobInfo, comprobando si hay un estado de finalización satisfactorio.
Esta rutina se define como una subrutina, no como función, porque no hay posibles errores.
Sintaxis
Call DSSetUserStatus (EstadoUsuario)
EstadoUsuario La serie es cualquier mensaje de terminación definido por el usuario. La serie se registrará
como parte de un suceso de "control" adecuado en el registro del trabajo de llamada y se almacenará para
su recuperación por parte de DSGetJobInfo, sobrescribiendo la serie almacenada anterior.
Esta serie no debe ser un entero negativo; de lo contrario es posible que no se distinga de un error
interno en llamadas a DSGetJobInfo.
Ejemplo
DSStopJob
Esta rutina sólo se debe utilizar después de haber emitido un DSRunJob. Inmediatamente envía una
solicitud de detención al motor de tiempo de ejecución. La llamada es asíncrona. Si necesita saber que el
trabajo se ha detenido realmente, debe llamar a DSWaitForJob o utilizar la sentencia de Suspensión y
buscar DSGetJobStatus. Tenga en cuenta que la solicitud de detención se envía independientemente del
estado actual del trabajo.
Sintaxis
CódigoError = DSStopJob (DescriptorContextoTrabajo)
Ejemplo
DSTransformError
Registra un mensaje de aviso en un archivo de registro del trabajo. Se llama a esta función desde
transformaciones solamente.
Sintaxis
Call DSTransformError (Mensaje, NombreTransformación)
Mensaje (entrada) es el mensaje de aviso que desea registrar. Mensaje recibe automáticamente como prefijo
el nombre de la etapa actual y la transformación de llamada.
Comentarios
DSTransformError graba el mensaje (y otra información) en el archivo de registro del trabajo como aviso
y vuelve a la transformación. Si el trabajo tiene un límite de aviso definido para el mismo, cuando el
número de avisos alcanza ese límite, la llamada no devuelve el valor de retorno y el trabajo termina
anormalmente.
Además del mensaje de aviso, DSTransformError registra los valores de todas las columnas en las filas
actuales para todos los enlaces de entrada y salida conectados a la etapa actual.
Ejemplo
Function MySqrt(Arg1)
If Arg1 < 0 Then
Call DSTransformError("Valor negativo:"Arg1, "MySqrt")
Return("0") ;*la transformación produce 0 en este caso
End
Result = Sqrt(Arg1) ;* de lo contrario devuelve la raíz cuadrada
Return(Result)
DSTranslateCode
Convierte un estado de control de trabajo o código de error en un mensaje de texto explicativo.
Sintaxis
Ans = DSTranslateCode(Código)
Código es:
v Si Código > 0, se presupone que es un estado de trabajo.
v Si Código < 0, se presupone que es un código de error.
v (No se debe pasar nunca 0 y devolverá "ningún error")
Ejemplo
code$ = DSGetLastErrorMsg()
ans$ = DSTranslateCode(code$)
DSWaitForFile
Suspende un trabajo hasta que existe o no existe un archivo nombrado.
Sintaxis
Respuesta = DSWaitForFile(Parámetros)
Parámetros es la vía de acceso completa del archivo que se debe esperar. No se realiza ninguna
comprobación respecto a si se trata de una vía de acceso razonable (por ejemplo, si existen todos los
directorios de la vía de acceso). Un nombre de vía de acceso que empieza con "-" indica un distintivo
para comprobar la no-existencia de la vía de acceso. No forma parte del nombre de vía de acceso.
Los parámetros también pueden finalizar con el formato "timeout:NNNN" (o "timeout=NNNN"). Esto
indica un tiempo no predeterminado que se debe esperar antes de abandonar. Existen varios formatos
posibles, y no distinguen entre mayúsculas y minúsculas:
v nnn número de segundos a esperar (a partir de ahora)
v nnnS ídem
v nnnM número de minutos que se debe esperar (desde ahora)
v nnnH número de horas que se debe esperar (desde ahora)
v nn:nn:nn esperar hasta esta hora en 24HH:NN:SS. Si se ha pasado esta hora o nn:nn, esperará hasta el
día siguiente.
El formato puede opcionalmente terminar con "/nn", lo que indica un tiempo de retardo de sondeo en
segundos. Si se omite, se utiliza un tiempo de sondeo predeterminado.
Ejemplos
Respuesta = DSWaitForFile("C:\ftp\incoming.txt timeout:2H")
(espera 1 hora a que exista un archivo local, comprobándolo una vez por minuto.)
Sintaxis
CódigoError = DSWaitForJob (DescriptorContextoTrabajo)
CódigoError es 0 sino hay ningún error, de lo contrario los posibles valores de error (<0) son:
v DSJE.BADHANDLE DescriptorContextoTrabajo incorrecto.
v DSJE.WRONGJOB El trabajo para este DescriptorContextoTrabajo no se ha ejecutado desde dentro de
este trabajo.
CódigoError es >0 => el descriptor de contexto del trabajo ha finalizado desde una espera de varias
trabajos.
Comentarios
Ejemplo
Función Dtx
Convierte un entero decimal en hexadecimal.
Sintaxis
Dtx
(número [ ,tamaño] )
número es el número decimal que se va a convertir. Si el número es un valor nulo, se devuelve un nulo.
tamaño es el número mínimo de caracteres en el valor hexadecimal. El valor devuelto se rellena con ceros
iniciales, según sea necesario. Si el tamaño es un valor nulo, se produce un error de tiempo de ejecución.
Ejemplo
Este es un ejemplo de la función Dtx que se utiliza para convertir un número decimal en una
representación de serie hexadecimal:
MyNumber = 47
MyHex = Dtx(MyNumber) ;* devuelve "2F"
MyHex = Dtx(MyNumber, 4) ;* devuelve "002F"
Sintaxis
Ebcdic
(serie)
serie es la serie o la expresión que desea convertir. Si la serie es un valor nulo, se produce un error de
tiempo de ejecución.
Comentarios
Nota: Si el soporte multilingüístico está habilitado, esta función puede devolver datos no reconocidos
para la correlación de juego de caracteres actual.
Ejemplo
Este ejemplo muestra cómo se utiliza la función Ebcdic para convertir una serie de bytes ASCII:
AsciiStr = "A1"
EbcdicStr = Ebcdic(AsciiStr) ;* convierte todos los bytes a EBCDIC
* (La letra A es el decimal 193, el dígito 1 es el decimal 241 en EBCDIC)
If EbcdicStr = Char(193):Char(241) Then
... ;* ... por lo tanto, se utiliza esta ramificación
EndIf
Sentencia End
Indica el final de un programa, una subrutina o bloque de sentencias.
Sintaxis
End
End Case
Comentarios
Utilice una sentencia End en el medio de un programa para finalizar una sección de una sentencia If u
otras sentencias condicionales.
Ejemplos
Este ejemplo ilustra el uso de una sentencia End con varias formas de la construcción If...Then en una
rutina:
Function MyTransform(Arg1, Arg2, Arg3)
* Las cláusulas Then y Else ocupan una línea cada una:
If Arg1 Matches "A..."
Then Reply = 1
Else Reply = 2
* Cláusulas multilínea:
If Len(arg1) > 10 Then
Reply += 1
Reply = Arg2 * Reply
End Else
Este ejemplo utiliza una sentencia End Case con una sentencia Case:
Function MyTransform(Arg1)
Begin Case
Case Arg1 = 1
Reply = "A"
Case Arg1 = 2
Reply = "B"
Case Arg1 > 2 And Arg1 < 11
Reply = "C"
Case @True ;* los demás valores
Call DSTransformError("Bad arg":Arg1, "MyTransform"
Reply = ""
End Case
Return(Reply)
Sentencia Equate
Compara un valor con un símbolo o una serie literal durante la compilación. No está disponible en las
expresiones.
Sintaxis
Equate
símbolo To valor [ ,símbolo
To valor] ...
Equate símbolo Literally valor [
,símbolo Literally valor] ...
símbolo es el nombre de comparación que desea dar a un valor en el programa. El valor de símbolo no
puede ser un número.
valor es el valor que desea identificar mediante símbolo. El valor debe ir entre comillas.
Comentarios
Puede comparar el símbolo sólo una vez; de lo contrario, obtiene un error de compilador.
Ejemplo
El ejemplo siguiente muestra cómo utilizar Equate...To y Equate...Literally para establecer símbolos en el
código:
Función Ereplace
Sustituye una o varias instancias de una subserie.
Sintaxis
Ereplace
(serie, subserie, sustitución [
,número [ ,inicio] ] )
subserie es la subserie que desea sustituir. Si la subserie es una serie vacía, se devuelve el valor de la serie.
sustitución es la subserie de sustitución. Si sustitución es una serie vacía, se eliminan todas las apariciones
de subserie.
número especifica el número de instancias de subserie que hay que sustituir. Para cambiar todas las
instancias, utilice un valor menor que 1.
inicio especifica la primera instancia que hay que sustituir. Un valor menor que 1 toma el valor 1 de
forma predeterminada.
Comentarios
Un valor nulo para serie devuelve un valor nulo. Si utiliza un valor nulo para otra variable, se produce
un error de tiempo de ejecución.
Ejemplos
El siguiente ejemplo sustituye todas las apariciones de una subserie por otra:
MyString = "AABBCCBBDDBB"
NewString = Ereplace(MyString, "BB", "xxx")
* El resultado es "AAxxxCCxxxDDxxx"
Sintaxis
Exchange
(serie, buscar.carácter,
sustituir.carácter)
serie es la serie o la expresión que contiene el carácter que desea sustituir. Una serie nula devuelve un
valor nulo.
buscar.carácter es el valor hexadecimal del carácter que se busca. Si buscar.carácter es un valor nulo,
Exchange falla y genera un error de tiempo de ejecución.
Comentarios
Si el soporte multilingüístico está habilitado, Exchange utiliza los dos primeros bytes de buscar.carácter y
sustituir.carácter. Los caracteres se evalúan de la siguiente manera:
Ejemplo
En el ejemplo siguiente, 41 es el valor hexadecimal del carácter "A" y 2E es el valor hexadecimal del
carácter de punto (.):
MyString = Exchange("ABABC", "41", "2E")
* el resultado es ".B.BC"
* La línea anterior es funcionalmente equivalente a:
* MyString = Convert("A", ".", "ABABC")
Función Exp
Devuelve el valor de "e" elevado a la potencia especificada.
Sintaxis
Exp
(potencia)
potencia es un número o una expresión numérica que especifica la potencia. Un valor nulo devuelve un
valor nulo. Si la potencia es demasiado alta o baja, se genera un mensaje de aviso y se devuelve 0.
El valor de "e" es aproximadamente 2,71828. La fórmula utilizada para realizar el cálculo es:
Exp
valor de función = 2.71828**(potencia)
Ejemplo
Este ejemplo utiliza la función Exp para devolver "e" elevado a una potencia:
* Se
define el ángulo en radianes.
MyAngle = 1.3
* Se calcula la secante hiperbólica.
MyHSec = 2 / (Exp(MyAngle) + Exp(-MyAngle))
Función Field
Devuelve las subseries delimitadas de una serie.
Sintaxis
Field
(serie, delimitador,
instancia [ ,número] )
serie es la serie que contiene la subserie. Si la serie es un valor nulo, se devuelve el valor nulo.
delimitador es el carácter que delimita la subserie. Si delimitador es una serie vacía, se devuelve la serie. Si
la serie no contiene un delimitador, se devuelve una serie vacía, salvo que instancia sea 1, en cuyo caso se
devuelve la serie. Si el delimitador es un valor nulo, se produce un error de tiempo de ejecución. Si se
devuelve más de una subserie, se devuelven los delimitadores con las subseries.
instancia especifica qué instancia del delimitador termina la subserie. Si instancia es menor que 1, se supone
1. Si la serie no contiene la instancia, se devuelve una serie vacía. Si la instancia es un valor nulo, se
produce un error de tiempo de ejecución.
El número especifica el número de subseries delimitadas que se devolverán. Si el número es una serie vacía
o menor que 1, se supone 1. Si el número es un valor nulo, se produce un error de tiempo de ejecución.
Ejemplos
En el siguiente ejemplo, la variable MyString se establece en los datos entre la tercera y la cuarta
aparición del delimitador "#":
MyString = Field("###DHHH#KK","#", 4) ;* devuelve "DHHH"
En el siguiente ejemplo, SubString se establece en "" ya que el delimitador "/" no aparece en la serie:
MyString = "London+0171+NW2+AZ"
SubString = Field(Mystring, "/", 1) ;* devuelve ""
En el siguiente ejemplo, SubString se establece en "0171+NW2", ya que se han solicitado dos campos
utilizando el delimitador "+" (el segundo y el tercer campo):
MyString = "London+0171+NW2+AZ"
SubString = Field(Mystring, "+", 2, 2)
* devuelve "0171+NW2"
Sintaxis
FieldStore
(serie, delimitador,
inicio, número,
nuevos.campos)
serie es la serie que se va a modificar. Si la serie es un valor nulo, se devuelve el valor nulo.
delimitador delimita los campos y puede ser un carácter ASCII individual cualquiera. Si delimitador es
nulo, se produce un error de tiempo de ejecución.
nuevos.campos es una serie o una expresión que contiene los nuevos campos que se utilizarán. Si
nuevos.campos es nulo, se produce un error de tiempo de ejecución.
Ejemplo
Los siguientes ejemplos muestran varias formas de sustituir subseries en una serie:
MyString = "1#2#3#4#5"
String = Fieldstore(MyString, "#", 2, 2, "A#B")
* El código anterior da como resultado: "1#A#B#4#5"
String2 = Fieldstore(MyString, "#", 2, -2, "A#B")
* El código anterior da como resultado: "1#A#B#4#5"
String3 = Fieldstore(MyString, "#", 2, 0, "A#B")
* El código anterior da como resultado: "1#A#B#2#3#4#5"
String4 = Fieldstore(MyString, "#", 1, 4, "A#B#C#D")
* El código anterior da como resultado: "A#B#C#D#5"
String5 = Fieldstore(MyString, "#", 7, 3, "A#B#C#D")
* El código anterior da como resultado: "1#2#3#4#5##A#B#"
Sintaxis
FIX (número [ ,precisión [ ,modalidad ] ] )
La expresión número se evalúa como el valor numérico que se convertirá.Si número se evalúa como valor
nulo, se devuelve el valor nulo.
La expresión precisión se evalúa como el número de dígitos de precisión del número de coma flotante. La
precisión predeterminada es 4.
Ejemplos
El ejemplo siguiente calcula el mismo valor con dos dígitos de precisión. El primer resultado se redondea,
y el segundo se trunca:
PRINT FIX (REAL.VALUE, 2)
PRINT FIX (REAL.VALUE, 2, 1)
Función Fmt
Formatea los datos de la salida.
Sintaxis
Fmt
(serie, formato)
serie es la serie que se va a formatear. Si la serie es un valor nulo, se devuelve el valor nulo.
formato es una expresión que define cómo se formateará la serie. Si el formato es nulo, la función Fmt
falla. Para ver la sintaxis detallada, consulte Expresión de formato.
Expresión de formato
Define cómo se formatea la serie.
Sintaxis
[longitud] [relleno]
justificación [edición] [máscara
]
Longitud de salida
El número de posiciones de caracteres en el campo de salida se especifica utilizando el parámetro de
longitud. Debe especificar longitud a menos que especifique máscara. (Puede especificar longitud y
máscara.)
v Si serie es menor que longitud, se rellena con caracteres de relleno.
v Si serie es mayor que longitud, la serie se divide en campos mediante una marca de texto, CHAR(251),
que se inserta cada longitud caracteres. Cada campo se rellena con caracteres de relleno hasta longitud.
Carácter de relleno
El parámetro fill se especifica para definir el carácter de relleno que se utiliza para rellenar el campo de
salida al tamaño especificado por length. El carácter de relleno predeterminado es un espacio. Si desea
emplear un carácter numérico o las letras L, R, T o Q como carácter de relleno, deberá escribirlo entre
comillas simples.
Justificación
La justificación de la salida se especifica utilizando el parámetro de justificación, que debe ser uno de los
códigos siguientes:
T Justificar a la izquierda e interrumpir en espacio (especialmente indicado para los campos de texto).
Salida enmascarada
Puede especificar una plantilla de formato para la salida utilizando el parámetro máscara. Por ejemplo, un
patrón de formato 10L##-##-#### formatea la serie 31121999 en 31-12-1999. Una máscara puede incluir los
caracteres que desee, pero estos caracteres tienen un significado especial:
#n Especifica que los datos se visualizan en un campo de n caracteres de relleno. Si la expresión de
formato no especifica un carácter de relleno, se utiliza un espacio.
%n Especifica que los datos se visualizan en un campo de n ceros.
*n Especifica que los datos se visualizan en un campo de n asteriscos.
Si desea utilizar números o caracteres especiales como literales, debe aplicar la función de escape al
carácter especial con una barra inclinada invertida ( \ ).
máscara debe ir entre paréntesis a efectos de claridad, en cuyo caso también debe escribir entre paréntesis
la máscara completa. Por ejemplo:
((###) ###-####)
Ejemplos
Los siguientes ejemplos muestran el efecto de varios códigos Fmt. En cada caso, el resultado se muestra
como una serie, para que estén visibles todos los espacios significativos.
Expresión de formato
Valor formateado
X = Fmt("1234567", "14R2")
X = "1234567.00"
X = Fmt("1234567", "14R2$,"
X = " $1,234,567.00"
X = Fmt("12345", "14*R2$,"
X = "****$12,345.00"
X = Fmt("1234567", "14L2"
X = "1234567.00"
X = Fmt("0012345", "14R")
X = "0012345"
X = Fmt("0012345", "14RZ")
X = "12345"
X = Fmt("00000", "14RZ")
X = " "
X = Fmt("12345", "14’0’R")
X = "00000000012345"
X = Fmt("ONE TWO THREE", "10T")
X = "ONE TWO ":T:"THREE"
X = Fmt("ONE TWO THREE", "10R")
X = "ONE TWO TH":T:"REE "
X = Fmt("AUSTRALIANS", "5T")
X = "AUSTR":T:"ALIAN":T:"S "
Función FmtDP
En la modalidad de soporte multilingüístico, formatea los datos en las posiciones de visualización en
lugar de por longitud de caracteres.
Sintaxis
FmtDP
(serie, formato [,
nombrecorrelación] )
serie es la serie que se va a formatear. Si la serie es un valor nulo, se devuelve el valor nulo. Los caracteres
que no se pueden correlacionar en la serie se supone que tienen una longitud de visualización de 1.
formato es una expresión que define cómo se formateará la serie. Si el formato es nulo, FmtDP falla. Para
ver la sintaxis detallada, consulte Expresión de formato.
nombrecorrelación es el nombre de una correlación de juego de caracteres que se utiliza para el formateo. Si
no se especifica el nombrecorrelación, se utiliza el valor predeterminado actual para el proyecto o el trabajo.
Comentarios
FmtDP está especialmente indicada para su uso con juegos de caracteres de varios bytes. Si el soporte
multilingüístico no está habilitado, la función FmtDP funciona como una función Fmt equivalente.
Función Fold
Dobla las series para crear subseries.
Sintaxis
Fold
(serie, longitud)
Comentarios
Utilice la función Fold para dividir una serie en un número de subseries separadas por marcas de campo.
El valor de serie se separa en subseries de longitud igual o menor que longitud. El valor de serie se separa
por los espacios en blanco, si es posible, y de lo contrario se separa en subseries de la longitud
especificada.
Si serie se evalúa como valor nulo, se devuelve el valor nulo. Si longitud es menor que 1, se devuelve una
serie vacía. Si longitud es el valor nulo, Fold falla y el programa termina con un mensaje de error de
tiempo de ejecución.
Establece A e:
ThisFis a FfoldeFdFstrinFg
Función FoldDP
En la modalidad de soporte multilingüístico, dobla las series para crear subseries utilizando las
posiciones de visualización de los caracteres.
Sintaxis
FoldDP
(serie, longitud [ ,
nombrecorrelación ] )
nombrecorrelación es el nombre de una correlación de juego de caracteres que se utiliza para el formateo. Si
no se especifica el nombrecorrelación, se utiliza el valor predeterminado actual para el proyecto o el trabajo.
Comentarios
La función FoldDP está especialmente indicada para su uso con juegos de caracteres de varios bytes. Si el
soporte multilingüístico no está habilitado, la función FoldDP funciona como una función Fold
equivalente.
Sentencias For...Next
Cree un bucle de programa For...Next. No está disponible en las expresiones.
Sintaxis
For
variable = inicio To fin
[Step incremento]
[sentencias.bucle]
[Continue|Exit]
[ {While | Until} condición]
[sentencias.bucle]
[Continue]
Next [variable]
inicio To fin especifica el valor de inicio y de fin del contador que define cuántas veces se va a repetir el
programa en bucle.
Step incremento especifica la cantidad que aumenta el contador cuando se alcanza una sentencia Next.
condición define la condición para ejecutar un bucle While o Until. condición puede ser una sentencia
cualquiera que utilice una cláusula Then...Else, pero la cláusula Then...Else no se incluye. En su lugar,
cuando la sentencia condicional ejecuta la cláusula Else, condición se evalúa en false; cuando la sentencia
condicional ejecuta la cláusula Then, condición se evalúa en true. La cláusula Locked no está soportada en
este contexto.
Next variable especifica el final del bucle. variable es la variable que se utiliza para definir el bucle con la
sentencia For. Su uso es opcional, pero se recomienda para mejorar la legibilidad del programa, en
concreto, si utiliza bucles anidados.
Comentarios
Puede utilizar varias cláusulas While y Until en un bucle For...Next. Si anida bucles For...Next, cada
bucle debe tener un nombre de variable exclusivo como contador. Si una sentencia Next no tiene ninguna
sentencia For correspondiente, genera un error de compilador.
Ejemplo
Este ejemplo utiliza sentencias For...Next para crear una serie que contiene tres instancias de los números
del 5 al 1, donde cada serie está separada de la otra por un guión. El bucle externo utiliza una variable
de contador de bucle que disminuye en 1 cada vez que pasa por el bucle.
String = "" ;* debe configurarse
el valor inicial
For Outer = 5 To 1 Step -1 ;* 5 repeticiones externas
For Inner = 1 To 3 ;* 5 repeticiones internas
String = String : Outer
Next Inner
String = String : "-" ;* se añade un guión
Next Outer
* La serie será parecida a: 555-444-333-222-111-.
Sentencia Function
Identifica una función escrita por el usuario y especifica el número y los nombres de los argumentos que
se le pasarán. No está disponible en las expresiones.
Sintaxis
Function
[nombre] [ argumento1 [,
argumento2] ...]
nombre es el nombre de la función escrita por el usuario y puede ser cualquier nombre de variable válido.
argumento1 y argumento2 son los nombres formales de los argumentos que se van a pasar a la función.
Los nombres formales hacen referencia a los nombres reales de los parámetros que se utilizan en el
programa de llamada (véase los ejemplos). Puede especificar hasta 254 argumentos. La función de
Comentarios
Una función escrita por el usuario puede contener una sola sentencia Function, que debe ser la primera
línea no comentada.
Un argumento adicional está oculto para que la función escrita por el usuario pueda utilizarlo para
devolver un valor. La función escrita por el usuario conserva un argumento adicional para que se
devuelva un valor mediante la sentencia Return. Si utiliza la sentencia Return en una función escrita por
el usuario y no especifica un valor para devolver, se devuelve una serie vacía.
El programa de llamada debe contener una sentencia Deffun que defina la función escrita por el usuario
antes de invocarla. La función escrita por el usuario debe estar catalogada en un catálogo local o el
catálogo del sistema, o debe ser un registro del mismo archivo de objeto que el programa de llamada.
Si la función definida por el usuario se invoca a sí misma recursivamente, debe incluir una sentencia
Deffun antes de la llamada recursiva. Por ejemplo:
Function Cut(expression, character)
Deffun Cut (A1,A2)
If character # ’’ Then
...
Return (Cut (expression, character [2,999999]))
End Else
Return (expression)
End
End
Ejemplos
En este ejemplo, una función definida por el usuario denominada Short compara la longitud de dos
argumentos y devuelve el más corto:
Function Short(A,B)
AL = Len(A)
BL = Len(B)
If AL < BL Then Result = A Else Result = B
Return(Result)
En este ejemplo, se define una función llamada MyFunc con los nombres de argumento A, B y C. A
continuación, figura un ejemplo de la sentencia DefFun que declara y utiliza la función MyFunc. Los
nombres de argumento A, B y C hacen referencia a los valores de X, Y y Z, lo que permite calcular el
valor asignado a T.
Function MyFunc(A, B, C)
Z = ...
Return (Z)
...
End
DefFun MyFunc(X, Y, Z)
T = MyFunc(X, Y, Z)
End
Este ejemplo muestra cómo llamar a una función de transformación denominada MyFunctionB desde
otra función de transformación denominada MyFunctionA:
Function MyFunctionA(Arg1)
* Cuando hace referencia a una función escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe declararla como una función con el
Función GetLocale
En la modalidad de soporte multilingüístico, recupera el valor de entorno local actual para una
determinada categoría.
Sintaxis
$Include UNIVERSE.INCLUDE UVNLSLOC.H
nombre = GetLocale (categoría)
Comentarios
GetLocale devuelve una de las siguientes señales de error si no puede recuperar el valor de entorno
local:
Error Significado
LCE$NOLOCALES
El soporte multilingüístico no está habilitado para IBM InfoSphere DataStage.
LCE$BAD.CATEGORY
No se reconoce la categoría especificada.
Sentencia GoSub
Transfiere el control de programa a una subrutina interna. No está disponible en las expresiones.
Sintaxis
GoSub etiqueta.sentencia [ : ]
etiqueta.sentencia define dónde se inicia puede ser cualquier etiqueta válida definida en el programa.
: identifica el texto anterior como una etiqueta de sentencia para que el programa sea más legible.
Para transferir el control de nuevo al programa principal, utilice una sentencia Return o Return To:
v Return transfiere el control de programa a la sentencia situada a continuación de la sentencia GoSub.
v Return To etiqueta transfiere el control de programa a una ubicación en el programa especificada por
etiqueta.
Un programa puede llamar a una subrutina el número de veces que desee. Puede anidar subrutinas hasta
256 niveles.
Ejemplo
Este ejemplo utiliza GoSub para invocar una subrutina interna en una función de transformación de IBM
InfoSphere DataStage. La sentencia Return hace que se reanude la ejecución en la sentencia que va
inmediatamente después de la sentencia GoSub. Es necesario utilizar GoTo tal como se muestra para que
el control no fluya accidentalmente a la subrutina.
Function MyTransform(Arg1)
* Utiliza sólo una subrutina si la entrada es un número positivo:
If Arg1 > 0 Then GoSub MyRoutine
Reply = Arg1
GoTo ExitFunction ;* se utiliza GoTo para evitar un error
MyRoutine:
Arg1 = SQRT(Arg1) ;* utiliza la raíz cuadrada
Return ;* devuelve el control a la sentencia
ExitFunction:
Return(Reply)
Sentencia GoTo
Transfiere el control de programa a la sentencia especificada. No está disponible en las expresiones.
Sintaxis
GoTo
etiqueta.sentencia [ : ]
: identifica el texto anterior como una etiqueta de sentencia para que el programa sea más legible.
Comentarios
Ejemplo
Este ejemplo utiliza la sentencia GoTo para ramificarse a las etiquetas de línea de una rutina. Tenga en
cuenta que este tipo de proceso es a menudo más claro que la utilización de una construcción Begin
Case.
Function MyTransform(Arg1)
* Evalúa el argumento y se ramifica a la etiqueta correspondiente.
If Arg1 = 1 Then GoTo Label1 Else GoTo Label2
Label1:
Reply = "A"
GoTo LastLabel
Función Iconv
Convierte una serie al formato de almacenamiento interno.
Sintaxis
Iconv
(serie, código [ @VM
código
] ... )
serie se evalúa como la serie que se va a convertir. Si la serie es un valor nulo, se devuelve el valor nulo.
código es un código de conversión y debe escribirse entre comillas. Varios códigos de conversión deben ir
separados por marcas de valor. Si hay varios códigos, se aplican de izquierda a derecha. El segundo
código convierte la salida del primero, etc. Si código es un valor nulo, genera un error de tiempo de
ejecución.
Comentarios
Ejemplos
Conversiones ASCII
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY (ASCII):
Expresión de conversión
Valor interno
X = Iconv("ABCD", "MY")
X = 41424344
X = Iconv("0123", "MY")
X = 30313233
Conversiones de fecha
Los siguientes ejemplos muestran el efecto de varios códigos de conversión D (Fecha):
Expresión de conversión
Valor interno
X = Iconv("31 DEC 1967", "D")
X = 0
Conversiones de grupo
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G (Grupo):
Expresión de conversión
Valor interno
X = Iconv("27.05.1997", "G1.2")
X = "05.1997"
X = Iconv("27.05.1997", "G.2")
X = "27.05"
Conversiones de longitud
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L (Longitud):
Expresión de conversión
Valor interno
X = Iconv("QWERTYUIOP", "L0")
X = 10
X = Iconv("QWERTYUIOP", "L7")
X = ""
X = Iconv("QWERTYU", "L7")
X = "QWERTYU"
X = Iconv("QWERTYUOP", "L3,5")
X = ""
X = Iconv("QWER", "L3,5")
X = "QWER"
Conversiones de numerales
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR (Numeral romano):
Expresión de conversión
Valor interno
X = Iconv("mcmxcvii", "NR")
X = 1997
Conversiones Radix
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX, MO y MB (Radix):
Expresión de conversión
Valor interno
X = Iconv("400", "MX")
X = 1024
X = Iconv("434445", "MX0C")
X = "CDE"
X = Iconv("2000", "MO")
X = 1024
X = Iconv("103104105", "MO0C")
X = "CDE"
X = Iconv("10000000000", "MB")
X = 1024
X = Iconv("010000110100010001000101", "MB0C")
X = "CDE"
Conversiones Soundex
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión S (Soundex):
Expresión de conversión
Valor interno
X = Iconv("GREEN", "S")
X = "G650"
Conversiones de hora
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT (Hora):
Expresión de conversión
Valor interno
X = Iconv("02:46", "MT")
X = 9960
X = Iconv("02:46:40am", "MTHS")
X = 10000
X = Iconv("02:46am", "MTH")
X = 9960
X = Iconv("02.46", "MT.")
X = 9960
X = Iconv("02:46:40", "MTS")
X = 10000
Sentencias If...Else
Ejecutan una o varias sentencias de manera condicional. Puede utilizar una sintaxis de una sola línea o
varias líneas en un bloque. No está disponible en las expresiones.
Sintaxis
If
condición Else sentencia
If condición Else
sentencias
End
condición es un valor numérico o una comparación cuyo valor determina el flujo del programa. Si la
condición es false, se ejecutan las sentencias.
Comentarios
Si desea ejecutar más de una sentencia cuando condición es false, utilice la sintaxis multilínea.
Ejemplo
Function MyTransform(Arg1, Arg2, Arg3)
* La cláusula Else ocupa sólo una línea:
Reply = 0 ;* valor predeterminado
If Arg1 Matches "A..."
Else Reply = 2
* Cláusula Else multilínea:
If Len(arg1) > 10 Else
Reply += 2
Sentencias If...Then...Else
Defina varios bloques de sentencias y las condiciones que determinan qué bloque se ejecuta. Puede
utilizar una sintaxis de una sola línea o varias líneas en un bloque. No está disponible en las expresiones.
Sintaxis
If
condición Then sentencias
[Else sentencias]
If condición
Then sentencias End [Else sentencias End]
condición es un valor numérico o una comparación cuyo valor determina el flujo del programa. Si
condición es true, se utiliza la cláusula Then. Si condición es false, se utiliza la cláusula Else. Si condición es
un valor nulo, se evalúa en false.
sentencias son las sentencias que se ejecutan dependiendo del valor de condición.
Comentarios
Puede anidar sentencias If...Then...Else. Si las sentencias Then o Else están escritas en varias líneas,
deberá emplear una sentencia End como la última sentencia.
Ejemplo
Function MyTransform(Arg1, Arg2, Arg3)
* Las cláusulas Then y Else ocupan una línea cada una:
If Arg1 Matches "A..."
Then Reply = 1
Else Reply = 2
* Cláusulas multilínea:
If Len(arg1) > 10 Then
Reply += 1
Reply = Arg2 * Reply
End Else
Reply += 2
Reply = (Arg2 - 1) * Reply
End
* Otro estilo de las cláusulas multilínea:
If Len(Arg1) > 20
THEN Reply += 2
Reply = Arg3 * Reply
End
Else
Reply += 4
Reply = (Arg3 - 1) * Reply
End
Return(Reply)
Sintaxis
If
condición Then sentencia
If condiciónThen
sentenciasEnd
condición es un valor numérico o una comparación cuyo valor determina el flujo del programa. Si la
condición es true, se ejecutan las sentencias.
Comentarios
Si desea ejecutar más de una sentencia cuando condición es true, utilice la sintaxis multilínea.
Ejemplo
Este ejemplo ilustra las distintas formas de la construcción If...Then que pueden utilizarse en una rutina:
Function MyTransform(Arg1, Arg2, Arg3)
* La cláusula Then ocupa sólo una línea:
Reply = 0 ;* valor predeterminado
If Arg1 Matches "A..."
Then Reply = 1
* Cláusula Then multilínea:
If Len(arg1) > 10 Then
Reply += 1
Reply = Arg2 * Reply
End
Operador If...Then...Else
Asigna un valor que cumple las condiciones especificadas.
Operador If...Then...Else
Sintaxis
variable =
If condición Then expresión
Else expresión
Comentarios
El operador If es la única forma de la construcción If...Then...Else que puede utilizarse en una expresión.
Ejemplo
Función Index
Devuelve la posición inicial de una subserie.
Sintaxis
Index
(serie, subserie,
instancia)
serie es la serie o la expresión que contiene la subserie. Si serie es un valor nulo, se devuelve 0.
subserie es la subserie que desea encontrar. Si subserie es una serie vacía, se devuelve 1. Si subserie es un
valor nulo, se devuelve 0.
Ejemplos
Los siguientes ejemplos muestran varias formas de buscar la posición de una subserie en una serie:
MyString = "P1234XXOO1299XX00P1"
Position = Index(MyString, 1, 2)
* El código anterior devuelve el índice del segundo carácter "1" (10).
Position = Index(MyString, "XX", 2)
* El código anterior devuelve el índice inicial de la segunda subserie "XX"
* (14).
Position = Index(MyString, "xx", 2)
* El código anterior devuelve 0, ya que no se produce la subserie "xx".
Position = Index(MyString, "XX", 3)
* El código anterior devuelve 0, ya que no se puede encontrar la
* tercera aparición de la subserie "XX" *.
Función InMat
Recupera las dimensiones de una matriz o determina si una sentencia Dimension ha fallado debido a
que la memoria es insuficiente. No está disponible en las expresiones.
Sintaxis
InMat
[(matriz)]
Comentarios
Si especifica una matriz, InMat devuelve las dimensiones de la matriz. Si no especifica una matriz, InMat
devuelve 1 si la sentencia Dimension anterior ha fallado debido a la falta de memoria disponible.
Ejemplo
Este ejemplo muestra cómo probar si una sentencia Dimension ha asignado suficiente memoria:
Dim MyArray(2000)
If InMat() = 1 Then
Call DSLogFatal("Could not allocate array",
→ "MyRoutine")
End
Función Int
Devuelve la parte entera de una expresión numérica.
Sintaxis
Int
(expresión)
expresión es una expresión numérica. Después de la evaluación, la parte de fracción del valor se trunca y
se devuelve la parte entera. Si la expresión es un valor nulo, se devuelve un nulo.
Ejemplo
Este ejemplo muestra la parte entera de una expresión devuelta por la función Int:
MyValue = 2.3
IntValue = Int(MyValue) ;* la respuesta es 2
IntValue = Int(-MyValue) ;* la respuesta es -2
IntValue = Int(MyValue / 10) ;* la respuesta es 0
Función IsNull
Prueba si una variable contiene un valor nulo.
Sintaxis
IsNull
(variable)
variable es la variable que se prueba. Si variable contiene un valor nulo, se devuelve 1; de lo contrario, se
devuelve 0.
Comentarios
Esta es la única manera de probar si es un valor nulo, ya que el valor nulo no es igual a ningún valor,
incluido él mismo.
Ejemplo
Este ejemplo muestra cómo probar una expresión que se está estableciendo en el valor nulo:
Función Left
Extrae una subserie del principio de una serie.
Sintaxis
Left
(serie, n)
serie es la serie que contiene la subserie. Si la serie es un valor nulo, se devuelve el valor nulo.
n es el número de caracteres que se extraen del principio de la serie. Si n es un valor nulo, genera un
error de tiempo de ejecución.
Ejemplos
Estos ejemplos extraen los tres caracteres más a la izquierda de una serie:
MyString = "ABCDEF"
MySubStr = Left(MyString, 3) ;* la respuesta es "ABC"
MySubStr = Left("AB", 3) ;* la respuesta es "AB"
Función Len
Devuelve el número de caracteres de una serie.
Sintaxis
Len
(serie)
serie es la serie cuyos caracteres se cuentan. Se cuentan todos los caracteres, incluidos los espacios y los
espacios en blanco finales. Si serie es un valor nulo, se devuelve 0.
Ejemplos
Estos ejemplos determinan la longitud de una serie o de un número cuando se expresa como una serie:
MyStr = "PORTLAND, OREGON"
StrLen = Len(MyStr) ;* la respuesta es 16
NumLen = Len(12345.67) ;* la respuesta es 8 (observe
;* el separador decimal)
Función LenDP
En la modalidad de soporte multilingüístico, devuelve la longitud de una serie en posiciones de
visualización.
Sintaxis
LenDP
(serie [, nombrecorrelación ])
nombrecorrelación es el nombre de la correlación que define el juego de caracteres que se utiliza en la serie.
Si se omite el nombrecorrelación, se utiliza la correlación de juego de caracteres predeterminada para el
proyecto o el trabajo.
Comentarios
Si el soporte multilingüístico no está habilitado, esta función funciona como la función Len y devuelve el
número de caracteres de la serie.
Función Ln
Calcula el logaritmo natural del valor de una expresión, empleando la base "e".
Sintaxis
Ln
(expresión)
Comentarios
Ejemplo
Este ejemplo muestra cómo grabar una transformación para convertir un número en su logaritmo de base
10 utilizando la función Ln:
Function Log10(Arg1)
If Not(Num(Arg1)) Then
Call DSTransformError("Non-numeric ":Arg1, "Log10")
Ans = 0 ;* o un valor predeterminado adecuado
End Else
Ans = Ln(Arg1) / Ln(10)
End
Return(Ans)
Sentencia LOCATE
Utilice una sentencia LOCATE para buscar en expresión en matriz.dinámica y devolver un valor con una de
las indicaciones siguientes:
v La ubicación en que se ha encontrado expresión en matriz.dinámica.
v La ubicación en que se debe insertar expresión en matriz.dinámica si no se ha encontrado.
Sintaxis
LOCATE expresión IN matriz.dinámica [ < númcampo [ ,númvalor] > ] [,inicio] [BY sec] SETTING
variable {THEN sentencias [ELSE sentencias] | ELSE sentencias}
El valor de inicio se evalúa como un número que especifica el campo, valor o subvalor a partir del cual se
debe iniciar la búsqueda.
Las expresiones de delimitador especifican el nivel de búsqueda, e inicio especifica la posición inicial de la
búsqueda.
Si alguna expresión de delimitador o inicio se evalúa como valor nulo, la sentencia LOCATE falla y el
programa termina con un mensaje de error de tiempo de ejecución.
En variable se almacena el índice de expresión. El valor de variable devuelve un número de campo, valor o
subvalor, según las expresiones de delimitador empleadas. El valor de variable se establece en un número
que representa uno de los elementos siguientes:
v El índice del elemento que contiene expresión, si se encuentra ese elemento.
v Un índice que se puede utilizar en una función INSERT para crear un elemento nuevo con el valor
especificado por expresión.
Comentarios
Durante la búsqueda, los campos se procesan como campos de un solo valor aunque contengan marcas
de valor o subvalor. Los valores se procesan como valores únicos, aunque contengan marcas de subvalor.
Si los elementos de la búsqueda están ordenados en una de las secuencias ASCII ascendentes o
descendentes que figuran a continuación, puede utilizar la expresión BY sec para finalizar la búsqueda. La
búsqueda finaliza en la posición donde se debe insertar expresión para mantener la secuencia ASCII, en
lugar de al final de la lista de elementos especificados.
Utilice los valores siguientes de sec para describir la secuencia ASCII de la búsqueda:
"AL" o "A"
Ascendente y justificada a la izquierda (ordenación alfanumérica estándar)
"AR" Ascendente y justificada a la derecha
"DL" o "D"
Descendente y justificada a la izquierda (ordenación alfanumérica estándar)
"DR" Descendente y justificada a la derecha
La especificación de sec no vuelve a ordenar los elementos de matriz.dinámica; indica las condiciones de
terminación de la búsqueda. Si se utiliza una expresión seq y los elementos no se encuentran en la
secuencia indicada por seq, es posible que no se encuentre un elemento con el valor de expresión. Si sec se
evalúa como valor nulo, la sentencia falla y el programa termina.
Si el soporte multilingüístico está habilitado, la sentencia LOCATE con una expresión BY sec utiliza el
convenio de clasificación especificado por el entorno local actual.
Ejemplos
Se muestra una marca de campo junto a F, se muestra una marca de valor junto a V y se muestra una
marca de subvalor junto a S.
Q=’X’:@SM:"$":@SM:’Y’:@VM:’Z’:@SM:4:@SM:2:@VM:’B’:@VM
PRINT "Q= ":Q
LOCATE "$" IN Q <1> SETTING WHERE ELSE PRINT ’ERROR’
PRINT "WHERE= ",WHERE
LOCATE "$" IN Q <1,1> SETTING HERE ELSE PRINT ’ERROR’
PRINT "HERE= ", HERE
NUMBERS=122:@FM:123:@FM:126:@FM:130:@FM
PRINT "BEFORE INSERT, NUMBERS= ",NUMBERS
NUM= 128
LOCATE NUM IN NUMBERS <2> BY "AR" SETTING X ELSE
NUMBERS = INSERT(NUMBERS,X,0,0,NUM)
PRINT "AFTER INSERT, NUMBERS= ",NUMBERS
END
Sentencias Loop...Repeat
Define un bucle de programa. No está disponible en las expresiones.
Sintaxis
Loop
[sentencias]
[Continue | Exit]
[While | Until condición Do]
[sentencias]
[Continue | Exit]
Repeat
While condición Do especifica que el bucle se repite siempre que condición sea true. Cuando condición es
false, el bucle se detiene y la ejecución del programa continúa con la sentencia que figura tras la sentencia
Repeat. Si condición es un valor nulo, se supone que es false.
Comentarios
Puede utilizar varias cláusulas While y Until en un bucle Loop...Repeat. Puede anidar bucles
Loop...Repeat. Si una sentencia Repeat no tiene ninguna sentencia Loop correspondiente, genera un error
de compilador.
Ejemplo
Este ejemplo muestra cómo pueden utilizarse las sentencias Loop...Repeat. La sentencia Loop...Repeat
interior hace el bucle 10 veces, establece el valor del distintivo en false y sale prematuramente utilizando
la sentencia Exit. El bucle exterior sale inmediatamente después de comprobar el valor del distintivo.
Check = @True
Counter = 0 ;* inicializa variables
Loop ;* bucle exterior
Loop While Counter < 20 ;* bucle interior
Counter += 1 ;* contador de incrementos
If Counter = 10 Then ;* si la condición es True...
Check = @False ;* establece el valor del distintivo en False...
Exit ;* y sale del bucle interior.
End
Repeat
Until Not(Check) ;* sale del bucle exterior cuando la comprobación se establece en False
Repeat
Sentencia Mat
Asigna valores a los elementos de una matriz. No está disponible en las expresiones.
Sintaxis
Mat
matriz = expresión
expresión puede ser un valor único o el nombre de una matriz dimensionada. Si expresión es un valor
único, el valor se asigna a todos los elementos de la matriz. Si es una matriz, los valores se asignan a la
matriz, elemento a elemento, independientemente de si coinciden las dimensiones de las dos matrices.
Los valores excedentes se descartan; los elementos excedentes permanecen sin asignar.
Comentarios
No puede utilizar la sentencia Mat para asignar valores a elementos específicos de una matriz.
Ejemplos
Este ejemplo muestra cómo asignar el mismo valor a todos los elementos de una matriz:
Dim MyArray(10)
Mat MyArray = "Empty"
Este ejemplo muestra cómo asignar los elementos de una matriz a los de otra matriz:
Función MatchField
Busca en una serie y devuelve la parte de la misma que coincide con un elemento de patrón.
Sintaxis
MatchField
(serie, patrón,
elemento)
serie es la serie que en la que se realiza la búsqueda. Si la serie no coincide con ningún patrón o es un
valor nulo, se devuelve una serie vacía.
patrón es uno o varios elementos de patrón que describen la serie, y puede ser cualquiera de los códigos
de patrón utilizados por el operador Match. Si el patrón es un valor nulo, se devuelve una serie vacía.
elemento es un número, n, que especifica que se devuelve la parte de la serie que coincide con el enésimo
elemento del patrón. Si el elemento es un valor nulo, genera un error de tiempo de ejecución.
Comentarios
patrón debe contener elementos que describen todos los caracteres de la serie. Por ejemplo, la sentencia
siguiente devuelve una serie vacía porque el patrón no cubre la subserie "AB" al final de la serie:
MatchField ("XYZ123AB", "3X3N", 1)
La siguiente sentencia describe la serie completa y devuelve un valor "XYZ", que es 3X, la subserie que
coincide con el primer elemento del patrón:
MatchField ("XYZ123AB", "3X3N...", 1)
Ejemplos
Q se evalúa en BBB:
Q = MatchField("AA123BBB9","2A0N3A0N",3)
En los ejemplos siguientes, la serie no coincide con el patrón y se devuelve una serie vacía:
XYZ=MatchField(’ABCDE1234’,"2N3A4N",1)
XYZ=ABC=MatchField(’1234AB’,"4N1A",2)
ABC=
Sintaxis
Mod
(dividendo, divisor)
dividendo es el número que se va a dividir. Si dividendo es un valor nulo, se devuelve el valor nulo.
divisor es el número por el que se divide. divisor no puede ser 0. Si divisor es un valor nulo, se devuelve el
valor nulo.
Comentarios
Ejemplos
Los siguientes ejemplos muestran el uso de la función Mod:
Remainder = Mod(100, 25) ;*
el resultado es 0
Remainder = Mod(100, 30) ;* el resultado es 10
Sentencia Nap
Detiene un programa el número de milisegundos especificado. No está disponible en las expresiones.
Sintaxis
Nap
[milisegundos]
Comentarios
No utilice la sentencia Nap en una transformación, ya que ralentizará la ejecución del trabajo de IBM
InfoSphere DataStage.
Ejemplo
Este ejemplo muestra la sentencia Nap que se invoca desde una rutina anterior/posterior de InfoSphere
DataStage para sondear la existencia de un recurso, con un breve intervalo de espera entre los sondeos:
If NumTimesWaited < RepeatCount Then
NumTimesWaited += 1
Nap 500 ;* esperar 500 milisegundos = 1/2 segundo
End
Sintaxis
Neg
(número)
Ejemplo
El siguiente ejemplo muestra un uso de la función Neg, equivalente al operador unario menos:
MyNum = 10
* La siguiente línea puede ser más clara que la construcción
* equivalente, que es: -(MyNum + 75) / 100
MyExpr = Neg(MyNum + 75) / 100
Función Not
Invierte el resultado lógico de una expresión.
Sintaxis
Not
(expresión)
Comentarios
La expresión es false si se evalúa en 0 o si es una serie vacía. Para los demás valores (excepto el valor
nulo), es true.
Ejemplos
A continuación, se proporcionan algunos ejemplos del uso de la función Not para invertir el valor real de
las expresiones:
Value1 = 5
Value2 = 5
Boolean = Not(Value1 - Value2);* Booleano = 1, es decir, True
Boolean = Not(Value1 + Value2);* Booleano = 0, es decir, False
Boolean = Not(Value1 = Value2);* Booleano = 0, es decir, False
Sentencia Null
No realiza ninguna acción ni genera ningún código de objeto.
Sintaxis
Nula
Comentarios
La sentencia Null actúa como una vía muerta en un programa. Por ejemplo, puede emplearla con la
cláusula Else si no desea que se efectúe ninguna operación cuando se ejecute la cláusula Else.
El siguiente ejemplo muestra el uso de la sentencia Null para dejar claro que una determinada
ramificación de una sentencia Case no realiza ninguna acción:
Begin Case
Case Arg1 = ’A’
* ... realizar alguna acción para el primer caso.
Case Arg1 = ’B’
* ... realizar alguna acción para el segundo caso.
Case @True
* ... en los demás casos, no realizar ninguna acción.
Null
End Case
Función Num
Determina si una serie es numérica. Si el soporte multilingüístico está habilitado, el resultado de esta
función depende del valor de entorno local actual del convenio Numeric.
Sintaxis
Num
(expresión)
expresión es la expresión que se prueba. Si la expresión es un número, una serie numérica o una serie
vacía, se devuelve un valor 1. Si es un valor nulo, se devuelve un valor nulo; de lo contrario, se devuelve
0.
Comentarios
Las series que contienen puntos utilizados como separadores decimales se consideran numéricas. No
obstante, las series que contienen otros caracteres utilizados para formatear cantidades numéricas o
monetarias como, por ejemplo, comas, signos de dólar, etc., no se consideran numéricas.
Ejemplos
Los siguientes ejemplos muestran la función Num que se utiliza para determinar si una variable contiene
un número:
Arg1 = "123.45
Boolean = Num(Arg1) ;* devuelve 1, es decir, True
Arg2 = "Section 4"
Boolean = Num(Arg2) ;* devuelve 0, es decir, False
Arg3 = " "
Boolean = Num(Arg3) ;* False (el espacio no es un carácter numérico)
Arg4 = ""
Boolean = Num(Arg4) ;* True (la serie vacía es numérica)
Función Oconv
Convierte una expresión a un formato de salida.
Sintaxis
Oconv
(expresión, conversión [@VM
conversión] ...)
expresión es una serie almacenada en formato interno que desea convertir a un formato de salida. Si la
expresión es un valor nulo, se devuelve un nulo.
Comentarios
Si especifica varios códigos, se aplican de izquierda a derecha. El primer código se aplica a la expresión, el
siguiente código se aplica al resultado de la primera conversión, y así sucesivamente.
La función Status utiliza los siguientes valores para indicar el resultado de una función Oconv:
0 La conversión ha sido satisfactoria.
1 Se ha pasado una serie no válida a la función Oconv. O bien se ha devuelto la serie original o, si
la serie era un valor nulo, se ha devuelto un valor nulo.
2 La conversión no era válida.
Ejemplos
Conversiones ASCII
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY (ASCII).
Expresión de conversión
Valor externo
X = Oconv("41424344", "MY")
X = "ABCD"
X = Oconv("30313233", "MY")
X = "0123"
Conversiones de fecha
Los siguientes ejemplos muestran el efecto de varios códigos de conversión D (Fecha):
Expresión de conversión
Valor externo
X = Oconv(0, "D")
X = "31 DEC 1967"
X = Oconv(10740, "D2")
X = "27 MAY 97"
X = Oconv(10740, "D2/")
X = "05/27/97"
X = Oconv(10740, "D/E")
X = "27/05/1997"
X = Oconv(10740, "D-YJ")
X = "1997-147"
X = Oconv(10740, "D2*JY")
X = "147*97"
X = Oconv(10740, "D YMD")
X = "1997 5 27"
X = Oconv(10740, "D MY[A,2]")
X = "MAY 97"
Conversiones de grupo
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G (Grupo):
Expresión de conversión
Valor externo
X = Oconv("27.05.1997", "G1.2")
X = "05.1997"
X = Oconv("27.05.1997", "G.2")
X = "27.05"
Conversiones de longitud
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L (Longitud):
Expresión de conversión
Valor externo
X = Oconv("QWERTYUIOP", "L0")
X = 10
X = Oconv("QWERTYUIOP", "L7")
X = ""
X = Oconv("QWERTYU", "L7")
X = "QWERTYU"
X = Oconv("QWERTYUOP", "L3,5")
X = ""
X = Oconv("QWER", "L3,5")
X = "QWER"
Conversiones de numerales
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR (Numeral romano):
Expresión de conversión
Valor externo
X = Oconv(1997, "NR")
X = "mcmxcvii"
X = Oconv(1997000, "NR")
X = "MCMXCVmm"
Conversiones Radix
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX, MO y MB (Radix):
Expresión de conversión
Valor externo
X = Oconv("1024", "MX")
X = "400"
X = Oconv("CDE", "MX0C")
X = "434445"
Conversiones de hora
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT (Hora):
Expresión de conversión
Valor externo
X = Oconv(10000, "MT")
X = "02:46"
X = Oconv(10000, "MTHS")
X = "02:46:40am"
X = Oconv(10000, "MTH")
X = "02:46am"
X = Oconv(10000, "MT.")
X = "02.46"
X = Oconv(10000, "MTS")
X = "02:46:40"
Sentencias On...GoSub
Transfiere el control de programa a una subrutina interna. No está disponible en las expresiones.
Sintaxis
On
índice GoSub etiqueta.sentencia1 [,
etiqueta.sentencia2] ...
On índice especifica una expresión que actúa como índice en la lista de etiquetas de sentencia. El valor de
índice determina a qué etiqueta de sentencias se mueve el control de programa. Durante la ejecución, se
evalúa índice y se redondea a un entero. Si el valor es 1 o menor, se ejecuta la subrutina definida por
GoSub etiqueta.sentencia1, etiqueta.sentencia2 especifica una lista de etiquetas de sentencia a las que se
puede mover el control de programa. Si una etiqueta de sentencia no existe, genera un error de
compilador.
Comentarios
Utilice una sentencia Return en la subrutina para devolver el control de programa a la sentencia situada
a continuación de las sentenciasOn...GoSub.
Las sentencias On...GoSub pueden escribirse en varias líneas. Finalice cada línea con una coma, excepto
la última.
Ejemplo
Este ejemplo utiliza On...GoSub para invocar una subrutina de un conjunto de subrutinas internas en
una función de transformación de IBM InfoSphere DataStage, dependiendo de un argumento entrante. La
sentencia Return hace que se reanude la ejecución en la sentencia que va inmediatamente después de la
sentencia GoSub. Es necesario utilizar GoTo tal como se muestra para que el control no fluya
accidentalmente a las subrutinas internas.
Function MyTransform(Arg1, Arg2)
Reply = "" ;* respuesta predeterminada
* Utiliza la subrutina particular dependiendo del valor del argumento:
On Arg2 GoSub BadValue, GoodValue1, GoodValue2, BadValue
GoTo ExitFunction ;* se utiliza GOTO para evitar un error
BadValue:
Call DSTransformError("Invalid arg2 ":Arg2, MyTransform")
Return ;* devuelve el control a continuación de On...GoSub
GoodValue1:
Reply = Arg1 * 99
Return ;* devuelve el control a continuación de On...GoSub
GoodValue2:
Reply = Arg1 / 27
Return ;* devuelve el control a continuación de On...GoSub
ExitFunction:
Return(Reply)
Sentencia On...GoTo
Mueve el control de programa a la etiqueta especificada. No está disponible en las expresiones.
Sintaxis
On índice GoTo etiqueta.sentencia1
[, etiqueta.sentencia2] ...
On índice especifica una expresión que actúa como índice en la lista de etiquetas de sentencia. El valor de
índice determina a qué etiqueta de sentencias se mueve el control de programa. Durante la ejecución, se
evalúa índice y se redondea a un entero. Si el valor es 1 o menor, se ejecuta la sentencia definida por
etiqueta.sentencia1. Si el valor es 2, se ejecuta la sentencia definida por etiqueta.sentencia2, y así
sucesivamente. Si el valor es mayor que el número de sentencias definidas, se ejecuta la última sentencia.
Un valor nulo genera un error de tiempo de ejecución.
GoTo etiqueta.sentencia1, etiqueta.sentencia2 especifica una lista de etiquetas de sentencia a las que se puede
mover el control de programa. Si una etiqueta de sentencia no existe, genera un error de compilador.
Las sentencias On...GoTo pueden escribirse en varias líneas. Finalice cada línea con una coma, excepto la
última.
Ejemplo
Este ejemplo utiliza On...GoTo para invocar una subrutina de un conjunto de etiquetas en una función de
transformación de IBM InfoSphere DataStage, dependiendo de un argumento entrante:
Function MyTransform(Arg1, Arg2)
Reply = "" ;* respuesta predeterminada
* GoTo a la etiqueta particular, dependiendo del valor del argumento:
On Arg2 GoTo BadValue, GoodValue1, GoodValue2, BadValue
* Tenga en cuenta que el control no vuelve nunca a la línea siguiente.
BadValue:
Call DSTransformError("Invalid arg2 ":Arg2, MyTransform")
GoTo ExitFunction
GoodValue1:
Reply = Arg1 * 99
GoTo ExitFunction
GoodValue2:
Reply = Arg1 / 27
* Descarta hasta el final de la función:
ExitFunction:
Return(Reply)
Sentencia OpenSeq
Abre un archivo para el proceso secuencial. No está disponible en las expresiones.
OpenSeq
Sintaxis
OpenSeq
nombrevía To variable.archivo
[On Error sentencias ]
[Locked sentencias]
[Then sentencias [Else sentencias]]
[Else sentencias]
nombrevía es el nombre de la vía de acceso del archivo que se va a abrir. Si el archivo no existe, la
sentencia OpenSeq falla. Si nombrevía es un valor nulo, genera un error de tiempo de ejecución.
To variable.archivo asigna el archivo a una variable.archivo. Todas las sentencias utilizadas para procesar el
archivo deben hacer referencia al mismo utilizando variable.archivo. Si variable.archivo es un valor nulo,
genera un error muy grave.
On Error sentencias especifica las sentencias que se ejecutan si hay un error muy grave mientras se está
procesando el archivo. Se produce un error muy grave si el archivo no se puede abrir o si variable.archivo
es un valor nulo.
Locked sentencias especifica las sentencias que se ejecutan si el archivo está bloqueado por otro usuario. Si
no especifica una cláusula Locked y existe un bloqueo de conflicto, el programa espera hasta que se
libere el bloqueo.
Then sentencias especifica las sentencias que se ejecutan después de abrir el archivo.
Else sentencias especifica las sentencias que se ejecutan si no se puede acceder al archivo o no existe.
Cada referencia de archivo secuencial de un programa BASIC debe ir precedida de una sentencia
OpenSeq aparte para el archivo. OpenSeq establece un bloqueo de registro de actualización en el
archivo. De este modo, se impide que ningún otro programa cambie el archivo mientras se procesa.
Restablezca este bloqueo utilizando una sentencia CloseSeq después de procesar el archivo. Varias
operaciones OpenSeq en el mismo archivo sólo generan un bloqueo de registro de actualización, por lo
que sólo debe incluir una sentencia CloseSeq por archivo.
Si se utiliza la cláusula On Error, el valor devuelto por la función Status es el número de error.
Ejemplo
Sintaxis
serie
Match[es] patrón
serie es la serie que se va a comparar. Si la serie es un valor nulo, la coincidencia es false y se devuelve 0.
Puede especificar una coincidencia negativa añadiendo ~ (tilde) delante del código. Por ejemplo, ~ 4A
coincide con una serie que no contiene cuatro caracteres alfabéticos. Si n tiene más de nueve dígitos, se
utiliza como serie literal.
Puede especificar varios patrones separándolos con marcas de valor. Por ejemplo, la expresión siguiente
es verdadera si la dirección tiene 16 caracteres alfabéticos o 4 caracteres numéricos seguidos de 12
caracteres alfabéticos; de lo contrario, es falsa:
address Matches "16A":
CHAR(253): "4N12A"
Una serie vacía coincide con los patrones siguientes: "0A", "0X", "0N", "...", "", '' o \\.
Función Pwr
Eleva el valor de un número a la potencia especificada.
Sintaxis
Pwr
(número, potencia)
número es una expresión que se evalúa en el número que se va a elevar a la potencia. Si el número es un
valor nulo, se devuelve un nulo.
potencia especifica la potencia a la que se eleva el número. Si la potencia es un valor nulo, se devuelve el
valor nulo. Si la potencia no es un entero, número no puede ser negativo.
Comentarios
Ejemplo
Sentencia Randomize
Genera una secuencia repetible de números aleatorios en un rango especificado. No está disponible en las
expresiones.
Sintaxis
Randomize
(expresión)
Utilice la función Rnd en lugar de Randomize si desea generar una secuencia de números aleatorios no
repetible.
Ejemplo
Este es un ejemplo de cómo una rutina puede utilizar la sentencia Randomize para establecer la semilla
inicial para que la función Rnd genere un conjunto específico de números aleatorios:
Randomize 1
For n = 1 To NumRecords
* Produce series como "ID00", "ID01", "ID57", etc.
RandomId = "ID" : Fmt(Rnd(100), "R%2")
* ... realizar alguna acción con los ID generados.
Next n
ReadSeq
Lee una línea de datos en un archivo abierto para el proceso secuencial. No está disponible en las
expresiones.
Sintaxis
ReadSeq
variable From variable.archivo[On
Error sentencias]
{[Then sentencias [Else
sentencias ] | [Else sentencias ]}
ReadSeq variable lee los datos desde la posición actual en el archivo hasta una línea nueva y los asignan
a variable.
From variable.archivo identifica el archivo que se va a leer. variable.archivo debe haberse asignado en una
sentencia OpenSeq anterior. Si variable.archivo es un valor nulo, o si el archivo no se encuentra o no está
abierto, genera un error de tiempo de ejecución.
On Error sentencias especifica las sentencias que se ejecutan si hay un error muy grave mientras se está
procesando el archivo. Se produce un error muy grave si el archivo no se puede abrir o si variable.archivo
es un valor nulo.
Then sentencias especifica las sentencias que se ejecutan después de leer la línea del archivo.
Else sentencias especifica las sentencias que se ejecutan si no se puede leer el archivo o si se encuentra el
fin del archivo.
Comentarios
La sentencia OpenSeq establece un puntero a la primera línea del archivo. A continuación, ReadSeq:
1. Lee los datos desde la posición actual en el archivo hasta una línea nueva.
a. Asigna los datos a una variable.
b. Restablece el puntero a la posición que se encuentra a continuación de la línea nueva.
c. Descarta la nueva línea.
Si la conexión entre el cliente y el sistema donde reside la capa de motor excede el tiempo de espera,
ReadSeq no devuelve ningún byte del almacenamiento intermedio y se debe volver a intentar la
operación.
Los demás valores son un número de error que indica que se ha utilizado la cláusula On Error. Si se
produce un error muy grave y no se ha especificado la cláusula On Error:
v Aparece un mensaje de error.
v Se retrotrae alguna transacción no confirmada iniciada en el entorno de ejecución actual.
v Termina el programa actual.
Ejemplo
El siguiente ejemplo muestra la ReadSeq que se utiliza para procesar cada línea de un archivo secuencial:
OpenSeq PathName To FileVar Else
Call DSLogWarn("Cannot open ":PathName, MyRoutine)
GoTo ErrorExit
End
Loop
ReadSeq FileLine From FileVar
On Error
Call DSLogWarn("Error from ":PathName:
→" status=":Status(), "MyRoutine")
GoTo ErrorExit
End
THEN * ... se procesa la línea que acabamos de leer
End Else
Exit ;* al final del archivo
End
Repeat
CloseSeq FileVar
Función REAL
Utilice la función REAL para convertir número en un número de coma flotante sin pérdida de precisión. Si
número se evalúa como valor nulo, se devuelve el valor nulo.
Sintaxis
REAL (número)
Sentencia Return
Finaliza una subrutina y devuelve el control al programa o la sentencia de llamada. No está disponible en
las expresiones.
Sintaxis
Return [To
etiqueta.sentencia]
To etiqueta.sentencia se utiliza con una subrutina interna iniciada con GoSub para especificar que el
control de programa vuelve a la etiqueta de sentencia especificada. Si no hay ninguna cláusula To, el
control vuelve a la sentencia que hay después de la sentencia GoSub. Si la etiqueta.sentencia no existe,
genera un error de compilador.
Cuando una sentencia Return finaliza una subrutina externa llamada con una sentencia Call, todos los
archivos abiertos por la subrutina se cierran, excepto los archivos abiertos para variables comunes.
Sintaxis
Return
(expresión)
El valor de expresión se evalúa como el valor que desea que devuelva la función escrita por el usuario. Si
no especifica una expresión, se devuelve una serie vacía.
Comentarios
Puede utilizar la sentencia Return (valor) únicamente en las funciones escritas por el usuario. Si la
emplea en un programa o una subrutina, genera un error.
Ejemplo
Este ejemplo muestra el uso de la sentencia Return (valor), donde las sentencias Function y Deffun se
utilizan para invocar una transformación denominada "MyFunctionB" desde otra función de
transformación denominada "MyFunctionA":
Function MyFunctionA(Arg1)
* Cuando hace referencia a una función escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe declararla como una función con el
* número correcto de argumentos y añadirle un prefijo "DSU.".
Deffun MyFunctionB(A) Calling "DSU.MyFunctionB"
Ans = MyFunctionB(Arg1)
* Añada su propia transformación al valor en Ans...
...
Return(Ans)
Función Right
Extrae una subserie del final de una serie.
Sintaxis
Right
(serie, n)
serie es la serie que contiene la subserie. Si la serie es un valor nulo, se devuelve el valor nulo.
n es el número de caracteres que se extraen del final de la serie. Si n es un valor nulo, genera un error de
tiempo de ejecución.
Ejemplos
Estos ejemplos extraen los tres caracteres más a la derecha de una serie:
MyString = "ABCDEF"
MySubStr = Right(MyString, 3) ;* la respuesta es "DEF"
MySubStr = Right("AB", 3) ;* la respuesta es "AB"
Sintaxis
Rnd
(expresión)
Comentarios
Para generar secuencias repetibles de números aleatorios, utilice la sentencia Randomize en lugar de
Rnd.
Ejemplo
Este es un ejemplo de cómo una rutina puede utilizar la sentencia Randomize para establecer la semilla
inicial para que la función Rnd genere un conjunto específico de números aleatorios:
Randomize 1
For n = 1 To NumRecords
* Produce series como "ID00", "ID01", "ID57", etc.
RandomId = "ID" : Fmt(Rnd(100), "R%2")
* ... realizar alguna acción con los ID generados.
Next n
Función Seq
Convierte un carácter ASCII en su valor de código numérico.
Sintaxis
Seq
(carácter)
carácter es el carácter ASCII que se va a convertir. Si carácter es un valor nulo, se devuelve un nulo.
Comentarios
Ejemplo
Este ejemplo utiliza la función Seq para devolver el número asociado con el primer carácter de una serie:
MyVal
= Seq("A") ;* devuelve 65
MyVal = Seq("a") ;* devuelve 97
MyVal = Seq(" 12") ;* devuelve 32 - el primer carácter es un espacio
MyVal = Seq("12") ;* devuelve 49 - el primer carácter es el dígito "1"
SetLocale
En la modalidad de soporte multilingüístico, establece un entorno local para una determinada categoría.
Comentarios
El éxito de la función SetLocale debe probarse con la función Status, que devuelve uno de los siguientes
valores:
Valor Significado
0 La llamada es satisfactoria.
LCE$NOLOCALES
El soporte multilingüístico no está habilitado para IBM InfoSphere DataStage.
LCE$BAD.LOCALE
valor no es un nombre de entorno local válido.
LCE$BAD.CATEGORY
No se reconoce la categoría especificada.
Ejemplo
* Switch local time convention to Japanese
SetLocale (UVLC$TIME, "JP-JAPANESE")
If Status() <> 0 Then
...
End
Sentencia Sleep
Detiene un programa el número de segundos especificado. No está disponible en las expresiones.
Sintaxis
Sleep
[segundos]
No utilice la sentencia Sleep en una transformación, ya que ralentizará la ejecución del trabajo de IBM
InfoSphere DataStage.
Ejemplo
Este ejemplo muestra la rutina Sleep que se invoca desde una rutina anterior/posterior de InfoSphere
DataStage para sondear la existencia de un recurso, con un breve intervalo de espera entre los sondeos:
If NumTimesWaited < RepeatCount Then
NumTimesWaited += 1
Sleep 60 ;* 60 segundos = 1 minuto
End
Función Soundex
Genera códigos que pueden utilizarse para comparar series de caracteres basándose en cómo suenan.
Sintaxis
Soundex
(serie)
serie es la serie que se va a analizar. Sólo se tienen en cuenta los caracteres alfabéticos de la serie. Si la
serie es un valor nulo, se devuelve el valor nulo.
Comentarios
La función Soundex devuelve un código fonético formado por la primera letra de la serie seguida de un
número. Las palabras que suenan igual, por ejemplo, rayar y rallar, generan el mismo código fonético.
Ejemplo
Los siguientes ejemplos muestran los valores de Soundex para varias series:
MySnd =
Soundex("Greenwood") ;* devuelve "G653"
MySnd = Soundex("Greenwod") ;* devuelve "G653"
MySnd = Soundex("Green") ;* devuelve "G650"
MySnd = Soundex("") ;* devuelve ""
Función Space
Devuelve una serie que contiene el número especificado de espacios en blanco.
Sintaxis
Space
(espacios)
espacios especifica el número de espacios de la serie. Si espacios es un valor nulo, genera un error de
tiempo de ejecución.
Ejemplo
Este es un ejemplo de la función Space que se utiliza para generar una serie con un número variable de
espacios:
Función Sqrt
Devuelve la raíz cuadrada de un número.
Sintaxis
Sqrt
(número)
Ejemplo
Función SQuote
Delimita una serie mediante comillas simples.
Sintaxis
SQuote
(serie)
serie es la serie que se escribirá entre comillas. Si serie es un valor nulo, se devuelve un valor nulo sin
comillas.
Ejemplo
Este es un ejemplo de la función SQuote que añade caracteres de comilla simple (') al principio y al final
de una serie:
ProductNo = 12345
QuotedStr = SQuote(ProductNo : "A")
* el resultado es "12345A"
Función Status
Devuelve un código que proporciona información sobre cómo se ha ejecutado la función anterior.
Sintaxis
Status ( )
Comentarios
El valor devuelto por Status varía según la función que notifique. En las descripción de las funciones se
incluye una lista de los valores posibles. Puede utilizar Status después de las siguientes funciones:
v Fmt
v Iconv
v Oconv
v OpenSeq
Ejemplos
Función Str
Forma una serie repitiendo la serie de entrada el número de veces especificado.
Sintaxis
Str
(serie, repetición)
serie es la serie que se repetirá. Si la serie es un valor nulo, se devuelve el valor nulo.
repetición es el número de veces que se repite la serie. Si repetición es un número negativo, se devuelve una
serie vacía. Si repetición es un valor nulo, genera un error de tiempo de ejecución.
Ejemplo
Este es un ejemplo de la función Str que se utiliza para generar una serie con un número variable de
espacios:
MyStr = Str("A", 20 - Len(Arg1)):Arg1
* se rellena con varias "A" a la izquierda
Sintaxis
Subroutine
[nombre] ( argumento1[
,argumento2 ]... )
nombre es un nombre que identifica la subrutina de forma que permite leer el programa más fácilmente.
argumento1 y argumento2 son los nombres de las variables que se utilizan para pasar argumentos entre el
programa de llamada y la subrutina. Una subrutina utilizada en una transformación debe tener uno o
varios argumentos; una subrutina anterior o una subrutina posterior debe contener dos argumentos.
Comentarios
La sentencia Subroutine debe ser la primera línea no comentada de la subrutina. Cada subrutina puede
contener una sola sentencia Subroutine. La sentencia Call que invoca la subrutina debe especificar el
mismo número de argumentos que la sentencia Subroutine.
Ejemplo
Este ejemplo muestra cómo una rutina anterior/posterior debe declararse como una subrutina. El cliente
del Diseñador lo comprobará automáticamente cuando cree una nueva rutina anterior/posterior.
Subroutine MyRoutine(InputArg, ErrorCode)
* Los usuarios pueden especificar el valor de serie que deseen cuando utilizan
* MyRoutine desde el Diseñador de trabajos. Aparecerá
* en la variable denominada InputArg.
* La rutina controla el progreso del trabajo estableciendo
* el valor de ErrorCode, que es un argumento de salida.
* Un valor distinto de cero detendrá la etapa o el trabajo.
ErrorCode = 0 ;* respuesta predeterminada
* Realice algún proceso...
...
Return
Función Time
Devuelve la hora interna del sistema.
Sintaxis
Time ( )
Comentarios
La hora interna se obtiene del sistema en el que reside la capa de motor y se devuelve como el número
de segundos transcurridos desde la medianoche hasta la milésima más próxima de un segundo.
Ejemplo
Este es un ejemplo de la hora del reloj del sistema actual que se asigna a una variable:
TimeInSecs
= Int(Time()) ;* elimina las partes fraccionarias
Sintaxis
TimeDate ( )
Comentarios
dd es el día.
aaaa es el año.
Ejemplo
Este es un ejemplo de cómo un formato legible por las personas de la fecha y la hora del sistema actual
puede asignarse a una variable y manipularse:
NowStr = TimeDate() ;*
por ej. "09:59:51 03 JUN 1997"
* extraer sólo la hora
NowTimeStr = Field(NowStr, " ", 1, 1)
* extraer el resto como la fecha
NowDateStr = Field(NowStr, " ", 2, 3)
Funciones trigonométricas
Las funciones trigonométricas devuelven el valor trigonométrico especificado por la función. Todas tienen
una sintaxis parecida.
Sintaxis general
TrigFunc
(número)
TrigFunc es una de las funciones trigonométricas: Cos, Sin, Tan, ACos, ASin, ATan, CosH, TanH o SinH.
número es el número o la expresión que desea evaluar. Si el número es un valor nulo, se devuelve un valor
nulo. Si el número es un ángulo, los valores fuera del rango del 0 al 360 se interpretan como el módulo
360. Los valores superiores a 1E17 generan un mensaje de aviso, y se devuelve 0.
Cos devuelve el coseno de un ángulo. número es el número de grados del ángulo. Cos es el inverso de
ACos.
Sin devuelve el seno de un ángulo. número es el número de grados del ángulo. Sin es el inverso de ASin.
Tan devuelve la tangente de un ángulo. número es el número de grados del ángulo. Tan es el inverso de
ATan.
CosH devuelve el coseno hiperbólico de un ángulo. número es el número de grados del ángulo.
SinH devuelve el seno hiperbólico de un ángulo. número es el número de grados del ángulo.
TanH devuelve la tangente hiperbólica de un ángulo. número es el número de grados del ángulo.
Ejemplos
Este ejemplo utiliza la función CosH para calcular la secante hiperbólica de un ángulo:
Angle = 45 ;* define el ángulo en grados
HSecant = 1 / Cosh(Angle) ;* calcula la secante hiperbólica
Este ejemplo utiliza la función SinH para calcular la cosecante hiperbólica de un ángulo:
Angle = 45 ;* define el ángulo en grados
HCoSecant = 1 / Sinh(Angle)
* calcula la cosecante hiperbólica
Función Trim
Recorta los caracteres no deseados de una serie.
Sintaxis
Trim
(serie)
Trim (serie, carácter [
,opción] )
serie es una serie que contiene caracteres no deseados. Si la serie es un valor nulo, se devuelve el valor
nulo.
carácter especifica el carácter que se va a recortar (que no sea un espacio o una tabulación). Si el carácter
es un valor nulo, genera un error de tiempo de ejecución.
opción especifica el tipo de operación de recorte, y puede ser uno de los valores siguientes:
R Elimina las apariciones iniciales y finales del carácter y reduce las apariciones a una sola aparición.
D Elimina las tabulaciones y los espacios en blanco iniciales y finales y reduce los espacios y las
tabulaciones a solo un espacio y una tabulación.
Comentarios
Ejemplos
Función TrimB
Recorta los espacios finales de una serie.
Sintaxis
TrimB
(serie)
serie es la serie que contiene los espacios finales. Si la serie es un valor nulo, se devuelve el valor nulo.
Ejemplo
MyStr = TrimB(" String with whitespace ")
* ...devuelve "(" String with whitespace"
Función TrimF
Recorta las tabulaciones y los espacios iniciales de una serie.
Sintaxis
TrimF
(serie)
serie es la serie que contiene los espacios iniciales. Si la serie es un valor nulo, se devuelve el valor nulo.
Ejemplo
MyStr = TrimF(" String with whitespace ")
* ...devuelve "String with whitespace"
Función UniChar
En la modalidad de soporte multilingüístico, genera un carácter individual en formato Unicode.
Sintaxis
UniChar
(expresión)
Comentarios
Si expresión tiene un valor fuera del rango especificado, UniChar devuelve una serie vacía. Si expresión un
nulo SQL, se devuelve un nulo SQL.
Función UniSeq
En la modalidad de soporte multilingüístico, convierte un carácter Unicode en su valor decimal
equivalente.
Comentarios
Compárese con la función Seq, que convierte caracteres ASCII en sus equivalentes decimales.
Función UpCase
Cambia las letras minúsculas de una serie a mayúsculas. Si el soporte multilingüístico está habilitado, el
resultado de esta función depende del valor de entorno local actual del convenio Ctype.
Sintaxis
UpCase
(serie)
Ejemplo
Función WEOFSeq
Graba una marca de fin del archivo en un archivo secuencial abierto.
Sintaxis
WEOFSeq
variable.archivo [On Error sentencias ]
On Error sentencias especifica la acción que se realiza si se produce un error muy grave. Se produce un
error muy grave si el archivo no se abre o si variable.archivo es un valor nulo. Si no especifica una cláusula
On Error, el trabajo termina anormalmente y se graba un error en el archivo de registro del trabajo.
Comentarios
La marca de fin del archivo trunca el archivo en la posición actual del puntero. Una sentencia ReadSeq
posterior utilizará la cláusula Else.
Ejemplo
El siguiente ejemplo abre un archivo secuencial y lo trunca grabando inmediatamente una marca de fin
del archivo:
Función WriteSeq
Escribe una nueva línea en un archivo que está abierto para el proceso secuencial y avanza un puntero a
la siguiente posición en el archivo.
Sintaxis
WriteSeq
línea To variable.archivo
[On Error sentencias]
{[Then sentencias [Else
sentencias ] | [Else sentencias ]}
línea es la línea que se graba en el archivo secuencial. WriteSeq graba una línea nueva al final de la línea.
On Error sentencias especifica la acción que se realiza si se produce un error muy grave. Se produce un
error muy grave si el archivo no se abre o si variable.archivo es un valor nulo. Si no especifica una cláusula
On Error, el trabajo termina anormalmente y se graba un mensaje de error en el archivo de registro del
trabajo.
Then sentencias especifica la acción que realiza el programa después de que se grabe una línea en el
archivo. Si no especifica una cláusula Then, debe especificar una cláusula Else.
Else sentencias especifica la acción que realiza el programa si la línea no se puede grabar en el archivo,
por ejemplo, si el archivo no existe. Si no especifica una cláusula Else, debe especificar una cláusula
Then.
Comentarios
La línea se graba en la posición actual dentro del archivo y, a continuación, el puntero se avanza a la
siguiente posición después de la línea nueva. Los datos existentes en el archivo se sobrescriben, a menos
que el puntero esté al final del archivo.
Puede utilizar la función Status después de WriteSeq para determinar si la operación ha sido
satisfactoria. Status devuelve 0 si el archivo estaba bloqueado, -2 si el archivo no estaba bloqueado y un
código de error si se ha tomado la cláusula On Error.
Ejemplo
El siguiente ejemplo graba una línea individual en un archivo secuencial truncándolo y grabando en él
inmediatamente después de abrirlo:
OpenSeq PathName To FileVar Then
WeofSeq FileVar ;* write end-of-file mark immediately
WriteSeq "First line" To FileVar Else
On Error
Call DSLogWarn("Error from ":PathName:"
→ status=":Status(), "MyRoutine")
GoTo ErrorExit
End
Función WriteSeqF
Escribe una nueva línea en un archivo que está abierto para el proceso secuencial, avanza un puntero a la
siguiente posición en el archivo y guarda el archivo en un disco.
Sintaxis
WriteSeqF
línea To variable.archivo
[On Error sentencias]
{[Then sentencias [Else
sentencias]] | [Else sentencias]}
línea es la línea que se graba en el archivo secuencial. WriteSeqF graba una línea nueva al final de la
línea.
On Error sentencias especifica la acción que se realiza si se produce un error muy grave. Se produce un
error muy grave si el archivo no se abre o si variable.archivo es un valor nulo. Si no especifica una cláusula
On Error, el trabajo termina anormalmente y se graba un mensaje de error en el archivo de registro del
trabajo.
Then sentencias especifica la acción que realiza el programa después de que se grabe una línea en el
archivo. Si no especifica una cláusula Then, debe especificar una cláusula Else.
Else sentencias especifica la acción que realiza el programa si la línea no se puede grabar en el archivo,
por ejemplo, si el archivo no existe. Si no especifica una cláusula Else, debe especificar una cláusula
Then.
Comentarios
WriteSeqF trabaja de la misma forma que WriteSeq, excepto que cada línea se graba directamente en el
disco, en lugar de guardarse en el almacenamiento intermedio y grabarse luego por lotes. Una sentencia
WriteSeqF después de varias sentencias WriteSeq graba todas las líneas del almacenamiento intermedio
en el disco.
Nota: Utilice la sentencia WriteSeqF sólo para registrar operaciones, ya que un aumento de la E/S de
disco disminuye el rendimiento del programa.
Puede utilizar la función Status después de WriteSeqF para determinar si la operación ha sido
satisfactoria. Status devuelve 0 si el archivo estaba bloqueado, -2 si el archivo no estaba bloqueado y un
código de error si se ha tomado la cláusula On Error.
Ejemplo
El siguiente ejemplo se añade a un archivo secuencial al leer hasta el final del mismo e imponer la
grabación de una línea más:
Función Xtd
Convierte una serie hexadecimal a decimal.
Sintaxis
Xtd
(serie)
Ejemplo
Este es un ejemplo de la función Xtd que se utiliza para convertir un número decimal en una
representación de serie hexadecimal:
MyHex = "2F"
MyNumber = Xtd(MyHex) ;* devuelve 47
Códigos de conversión
Los códigos de conversión especifican cómo se formatean los datos para la salida o el almacenamiento
interno. Se especifican en una función Iconv o Oconv. A continuación, se proporciona una lista de los
códigos que puede utilizar.
L Limitación de la longitud de los datos devueltos S Generación de códigos para comparar las palabras
por su sonido
Proceso de texto:
Conversiones Radix:
Los códigos de conversión se describen más detalladamente en las siguientes páginas de referencia. Los
códigos de conversión aparecen en orden alfabético.
D
Convierte fechas en formato de almacenamiento y viceversa. Cuando el soporte multilingüístico está
habilitado, el formato de fecha predeterminado del entorno local altera temporalmente el formato de
fecha predeterminado establecido en el archivo msg.text.
Sintaxis
D
[años.dígitos] [delimitador
omisión] [separador]
[formato.opciones
[ modificadores ] ] [ E ] [ L ]
años.dígitos indica el número de dígitos del año que aparecerán en la salida. El valor predeterminado es 4.
En la entradaaños.dígitos se ignora. Si la fecha de entrada no tiene ningún año, el año se obtiene de la
fecha del sistema.
omisión debe acompañar el uso de delimitador y es el número de campos delimitados que se omitirán para
extraer la fecha.
separador es el carácter que se utiliza para separar el día, el mes y el año en la salida. Si no especifica
separador, la fecha se convierte al formato 01 DEC 1999. En la entrada, separador se ignora. Si el soporte
multilingüístico está habilitado y no especifica años.dígitos ni separador, el formato de fecha
predeterminado es 01 DEC 1999.
formato.opciones está formado por hasta seis opciones que definen cómo se genera la fecha en la salida (se
ignoran en la entrada). Cada opción de formato puede tener un modificador asociado que se describe
Los [ modificadores ] modifican los formatos de salida de los datos especificados por opciones.formato.
Puede especificar hasta seis modificadores, separados por comas. Las comas indican con qué
opción.formato está asociado cada modificador; por lo tanto, debe incluir todas las comas, aunque sólo
desee especificar un modificador (vea los ejemplos). Pueden ser los siguientes valores:
v n muestra n caracteres. Se utiliza con las opciones numéricas D, M, Y, W, Q y J. Se utiliza con las
opciones de texto MA, MB, WA, WB, YA, N y "text".
v A[n] muestra el mes como n caracteres alfabéticos. Se utiliza con las opciones Y, M, W y N.
v Z[n] suprime los ceros iniciales y aparece como n dígitos. Funciona como n con las opciones numéricas.
v E conmuta los formatos de fecha día/mes/año y mes/día/año.
v L muestra los nombres de mes y día en minúsculas. El valor predeterminado es en mayúsculas.
Si especifica una fecha no válida en este código, devuelve una fecha interna válida, pero señala la
anomalía asignando un valor 3 a la función Status. Por ejemplo, 02/29/99 se interpreta como 03/01/99, y
09/31/93 se interpreta como 10/01/93. Si la fecha de entrada es un valor nulo, se asigna un valor 3 a
Status y no se realiza ninguna conversión.
Ejemplos
Los siguientes ejemplos muestran el efecto de varios códigos de conversión D con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("31 DEC 1967", "D")
X = 0
X = Iconv("27 MAY 97", "D2")
X = 10740
Iconv("05/27/97", "D2/")
X = 10740
X = Iconv("27/05/1997", "D/E")
X = 10740
X = Iconv("1997 5 27", "D YMD")
X = 10740
X = Iconv("27 MAY 97", "D DMY[,A3,2]")
X = 10740
X = Iconv("5/27/97", "D/MDY[Z,Z,2]")
X = 10740
X = Iconv("27 MAY 1997", "D DMY[,A,]")
X = 10740
X = Iconv("97 05 27", "DYMD[2,2,2]")
X = 10740
Los siguientes ejemplos muestran el efecto de varios códigos de conversión D con la función Oconv:
Expresión de conversión
Valor externo
G
Extrae uno o varios valores delimitados de un campo.
Sintaxis
G [
omisión ] campos de delimitador
El valor de omisión indica el número de campos que se omitirán; si no se especifica, se supone que es 0 y
no se omite ningún campo.
delimitador es un carácter no numérico que se utiliza como separador de campos. No debe utilizar las
variables del sistema @IM, @FM, @VM, @ SM y @TM como delimitadores.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("27.05.1997", "G1.2")
X = "05.1997"
X = Iconv("27.05.1997", "G.2")
X = "27.05"
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("27.05.1997", "G1.2")
X = "05.1997"
X = Oconv("27.05.1997", "G.2")
X = "27.05"
L
Extrae datos que cumplen unos criterios de longitud.
Sintaxis
L [ n [ ,m ] ]
n por sí solo es el número máximo de caracteres que deben contener los datos para poder devolverse. Si
contiene más de n caracteres, se devuelve una serie vacía. Si no especifica n, o si n es 0, se devuelve la
longitud de los datos.
n, m especifica un rango. Si los datos contiene los caracteres del n al m, se devuelven; de lo contrario, se
devuelve una serie vacía.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("QWERTYUIOP", "L0")
X = 10
X = Iconv("QWERTYUIOP", "L7")
X = ""
X = Iconv("QWERTYU", "L7")
X = "QWERTYU"
X = Iconv("QWERTYUOP", "L3,5")
X = ""
X = Iconv("QWER", "L3,5")
X = "QWER"
MB
Convierte números binarios en decimales o en un valor ASCII para el almacenamiento, o viceversa para
la salida.
Sintaxis
MB [ 0C ]
Comentarios
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MB con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("10000000000", "MB")
X = 1024
X = Iconv("010000110100010001000101", "MB0C")
X = "CDE"
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MB con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1024", "MB")
X = "10000000000"
X = Oconv("CDE", "MB0C")
X = "010000110100010001000101"
Sintaxis
MCA
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCA con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCA")
X = "JohnSmith"
El siguiente ejemplo muestra el efecto de un código de conversión MCA con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCA")
X = "JohnSmith"
MC/A
Extrae todos los caracteres no alfabéticos de un campo.
Sintaxis
MC/A
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MC/A con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MC/A")
X = " 1-234"
El siguiente ejemplo muestra el efecto de un código de conversión MC/A con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MC/A")
X = " 1-234"
MCD
Convierte números decimales en hexadecimales.
Sintaxis
MCD
El siguiente ejemplo muestra el efecto de un código de conversión MCD con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("4D2", "MCD")
X = "1234"
El siguiente ejemplo muestra el efecto de un código de conversión MCD con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1234", "MCD")
X = "4D2"
MCL
Convierte todas las letras mayúsculas a minúsculas.
Sintaxis
MCL
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCL con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCL")
X = "john smith 1-234"
El siguiente ejemplo muestra el efecto de un código de conversión MCL con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCL")
X = "john smith 1-234"
MCM
Se utiliza si el soporte multilingüístico está habilitado. Extrae todos los caracteres de varios bytes de
soporte multilingüístico del campo. Si la modalidad de soporte multilingüístico está inhabilitada, el
código devuelve el valor 2, que indica un código de conversión no válido.
Sintaxis
MCM
Ejemplo
El siguiente ejemplo muestra el efecto de un código de conversión MCM con la función Iconv:
IF SYSTEM(NL$ON)
THEN
Multibyte.Characters = ICONV(Input.String, "MCM")
END
MC/M
Se utiliza si el soporte multilingüístico está habilitado. Extrae todos los caracteres de un solo byte del
campo. Si la modalidad de soporte multilingüístico está inhabilitada, el código devuelve el valor 2, que
indica un código de conversión no válido.
MC/M
Sintaxis
MC/M
Ejemplo
El siguiente ejemplo muestra el efecto de un código de conversión MC/M con la función Iconv:
IF SYSTEM(NL$ON)
THEN
Singlebyte.Characters = ICONV(Input.String, "MC/M")
END
MCN
Extrae todos los caracteres numéricos de un campo.
Sintaxis
MCN
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCN con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCN")
X = "1234"
El siguiente ejemplo muestra el efecto de un código de conversión MCN con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCN")
X = "1234"
MC/N
Extrae todos los caracteres no numéricos de un campo.
Sintaxis
MC/N
El siguiente ejemplo muestra el efecto de un código de conversión MC/N con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MC/N")
X = "John Smith -"
El siguiente ejemplo muestra el efecto de un código de conversión MC/N con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MC/N")
X = "John Smith -"
MCP
Convierte los caracteres no imprimibles en un punto.
Sintaxis
MCP
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCP con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John^CSmith^X1-234", "MCP")
X = "John.Smith.1-234"
El siguiente ejemplo muestra el efecto de un código de conversión MCP con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John^CSmith^X1-234", "MCP")
X = "John.Smith.1-234"
MCT
Convierte las palabras de una serie en palabras con mayúsculas iniciales.
Sintaxis
MCT
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCT con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("john SMITH 1-234", "MCT")
X = "John Smith 1-234"
MCU
Convierte todas las letras minúsculas a mayúsculas.
Sintaxis
MCU
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCU con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("john smith 1-234", "MCU")
X = "JOHN SMITH 1-234"
El siguiente ejemplo muestra el efecto de un código de conversión MCU con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("john smith 1-234", "MCU")
X = "JOHN SMITH 1-234"
MCX
Convierte números hexadecimales en decimales.
Sintaxis
MCX
Ejemplos
El siguiente ejemplo muestra el efecto de un código de conversión MCX con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("1234", "MCX")
X = "4D2"
El siguiente ejemplo muestra el efecto de un código de conversión MCX con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("4D2", "MCX")
X = "1234"
Sintaxis
MD n
[ m ] [ opciones ]
n es un número del 0 al 9 que indica el número de lugares decimales que se utilizan en la salida. Si n es
0, la salida no contiene ningún separador decimal.
Nota: Cada elemento de la expresión del convenio es opcional, pero debe especificar los delimitadores
y las comas en la posición correcta. Por ejemplo, para especificar sólo millares, escriba [,millares,, ].
– prefijo especifica un prefijo para el número. Si prefijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.
– millares especifica el delimitador de millares.
– decimal especifica el delimitador de decimales.
– sufijo especifica un sufijo para el número. Si sufijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MD (decimal enmascarado)
con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("9876.54", "MD2")
X = 987654
X = Iconv("987654", "MD0")
X = 987654
X = Iconv("$1,234,567.89", "MD2$,")
X = 123456789
X = Iconv("123456.789", "MD33")
X = 123456789
X = Iconv("12345678.9", "MD32")
X = 1234567890
X = Iconv("F1234567.89", "MD2F")
X = 123456789
X = Iconv("1234567.89cr", "MD2C")
X = -123456789
X = Iconv("1234567.89 ", "MD2D")
X = 123456789
X = Iconv("1,234,567.89 ", "MD2,D")
X = 123456789
X = Iconv("9876.54", "MD2-Z")
X = 987654
X = Iconv("$####1234.56", "MD2$12#")
X = 123456
X = Iconv("$987.654 ", "MD3,$CPZ")
X = 987654
X = Iconv("####9,876.54", "MD2,ZP12#")
X = 987654
ML y MR
Sintaxis
ML | MR [
n [ m ] opciones [ (
fx ) ]
n es un número del 0 al 9 que indica el número de lugares decimales que se utilizan en la salida. Si n es
0, la salida no contiene ningún separador decimal.
Nota: Cada elemento de la expresión del convenio es opcional, pero debe especificar los delimitadores
y las comas en la posición correcta. Por ejemplo, para especificar sólo millares, escriba [,millares,, ].
– prefijo especifica un prefijo para el número. Si prefijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.
– millares especifica el delimitador de millares. Si millares contiene espacios, comas o corchetes de
cierre, delimítelos con comillas.
– decimal especifica el delimitador de decimales. Si decimal contiene espacios, comas o corchetes de
cierre, delimítelos con comillas.
– sufijo especifica un sufijo para el número. Si sufijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.
Las series literales también pueden escribirse entre paréntesis. Las máscaras de formateo se describen en
Expresión de formato.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión ML y MR con el convenio
Iconv:
Expresión de conversión
Valor interno
X = Iconv("$1,234,567.89", "ML2$,")
X = 123456789
X = Iconv(".123", "ML3Z")
X = 123
X = Iconv("123456.789", "ML33")
X = 123456789
X = Iconv("12345678.9", "ML32")
X = 1234567890
X = Iconv("1234567.89cr", "ML2C")
X = -123456789
X = Iconv("1234567.89db", "ML2D")
X = 123456789
X = Iconv("1234567.89-", "ML2M")
X = -123456789
X = Iconv("<1234567.89>", "ML2E")
X = -123456789
X = Iconv("1234567.89**", "ML2(*12)")
X = 123456789
X = Iconv("**1234567.89", "MR2(*12)")
X = 123456789
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión ML y MR con la función
Oconv:
Expresión de conversión
Valor externo
MM
En la modalidad de soporte multilingüístico, formatea los datos de moneda utilizando el convenio
MONETARY actual.
MM
Sintaxis
MM [
n ] [ I [ L ] ]
I formatea los datos utilizando el símbolo de moneda internacional de tres caracteres especificado en el
convenio MONETARY del entorno local actual, un punto como separador decimal y una coma como
separador de millares.
Si añade L, los datos se formatean utilizando el separador de millares y el separador decimal con el
convenio MONETARY del entorno local actual. I y L se ignoran para las conversiones de entrada
mediante Iconv.
Comentarios
Si especifica MM sin ningún argumento, la conversión utiliza los separadores decimales y de millares y el
símbolo de moneda especificados en el convenio MONETARY del entorno local actual.
Sintaxis
MO [ 0C ]
Comentarios
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión M0 con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("2000", "MO")
X = 1024
X = Iconv("103104105", "MO0C")
X = "CDE"
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión M0 con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1024", "MO")
X = "2000"
X = Oconv("CDE", "MO0C")
X = "103104105"
MP
Empaqueta dos números decimales por byte para el almacenamiento y los desempaqueta para la salida.
Sintaxis
MP
Comentarios
Los signos + iniciales se omiten. Los signos - iniciales hacen que se almacene una D hexadecimal en la
mitad inferior del último dígito interno. Si hay un número de mitades empaquetadas impar, se añaden
cuatro bits iniciales 0. El rango de bytes de datos en el formato interno expresado en hexadecimal es de
00 a 99 y de 0D a 9D.
Esta conversión sólo acepta como entrada dígitos decimales, de 0 al 9, y los signos más y menos; de lo
contrario, la conversión falla.
Los números decimales empaquetados deben desempaquetarse para la salida o no se podrán mostrar.
MT
Sintaxis
MT [ H ] [
S ] [ separador]
MT sin opciones especifica que la hora está en formato de 24 horas, omitiendo los segundos, con un
separador de dos puntos entre horas y minutos, por ejemplo, 23:59.
separador es un carácter no numérico que especifica el separador utilizado entre las horas, los minutos y
los segundos en la salida.
Comentarios
En la entrada, MT especifica sólo que los datos son una hora, y las opciones H y S se ignoran. Si la fecha
de entrada no tiene minutos ni segundos, se supone que son 0. Para los formatos de 12 horas, utilice el
sufijo AM, A, PM o P para indicar que la hora es anterior o posterior al mediodía. Si se especifica una
hora superior a 12, se supone que se utiliza un reloj de 24 horas. 12:00 AM es la medianoche y 12:00 PM
es el mediodía. La hora se almacena como el número de segundos desde la medianoche. El valor de
medianoche es 0.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("02:46", "MT")
X = 9960
X = Iconv("02:46:40am", "MTHS")
X = 10000
X = Iconv("02:46am", "MTH")
X = 9960
X = Iconv("02.46", "MT.")
X = 9960
X = Iconv("02:46:40", "MTS")
X = 10000
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT con la función
Oconv:
Expresión de conversión
Valor interno
MUOC
Devuelve el valor de almacenamiento interno de una serie como series hexadecimales de cuatro dígitos.
Sintaxis
MUOC
Comentarios
En la salida, utilizando Oconv, la serie proporcionada se devuelve con cada carácter convertido en su
valor de almacenamiento interno hexadecimal de cuatro dígitos.
En la entrada, utilizando Iconv, la serie proporcionada se trata como grupos de cuatro dígitos
hexadecimales y se devuelve el valor de almacenamiento interno. Un grupo formado por menos de
cuatro dígitos se rellena con ceros a la izquierda.
Ejemplo
X = UniChar(222):UniChar(240):@FM
XInt = Oconv(X, ’MX0C’)
Y = Oconv(X, ’NLSISO8859-1’)
YExt = Oconv(Y, ’MX0C’)
Yint = OCONV(X, ’MU0C’)
MX
Convierte números hexadecimales en decimales o en un valor ASCII para el almacenamiento, o viceversa
para la salida.
Sintaxis
MX [ 0C ]
Comentarios
Los caracteres fuera de los rangos 0-9, A-F o a-f generan un error.
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("400", "MX")
X = 1024
X = Iconv("434445", "MX0C")
X = "CDE"
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1024", "MX")
X = "400"
X = Oconv("CDE", "MX0C")
X = "434445"
MY
Convierte caracteres ASCII en valores hexadecimales en la entrada, y viceversa en la salida.
Sintaxis
MY
Comentarios
Los caracteres fuera de los rangos 0-9, A-F o a-f generan un error.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("ABCD", "MY")
X = 41424344
X = Iconv("0123", "MY")
X = 30313233
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("41424344", "MY")
X = "ABCD"
X = Oconv("30313233", "MY")
X = "0123"
Sintaxis
NL
Ejemplo
El siguiente ejemplo muestra el efecto del código de conversión NL con las funciones Oconv e Iconv.
NLS
En la modalidad de soporte multilingüístico, convierte entre el juego de caracteres interno y el juego de
caracteres externo.
Sintaxis
NLS
nombrecorrelación
Comentarios
En la salida que se utiliza la función Oconv, el código de conversión NLS correlaciona una serie del
juego de caracteres interno con el juego de caracteres externo especificado en nombrecorrelación.
En la entrada que se utiliza la función Iconv, el código de conversión NLS supone que la serie
proporcionada está en el juego de caracteres especificado por nombrecorrelación, y la correlaciona con el
juego de caracteres interno. Si nombrecorrelación está establecido en Unicode, la serie proporcionada se
supone que está formada por caracteres Unicode de 2 bytes. Si hay un número impar de bytes en la serie,
el último byte se sustituye por el carácter de sustitución de Unicode y el valor devuelto por la función
Status se establece en 3.
NR
Convierte numerales árabes en numerales romanos en la salida, y viceversa en la entrada.
Sintaxis
NR
Romano Arábigo
i 1
v 5
x 10
l 50
c 100
p 500
m 1000
V 5000
X 10000
L 50000
C 100000
D 500000
L 1000000
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("mcmxcvii", "NR")
X = 1997
X = Iconv("MCMXCVmm", "NR")
X = 1997000
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv(1997, "NR")
X = "mcmxcvii"
X = Oconv(1997000, "NR")
X = "MCMXCVmm"
P
Extrae datos que coinciden con un patrón.
Sintaxis
P
(patrón) [ ; (patrón) ...
]
literal es una serie literal con la que deben coincidir los datos.
Comentarios
Si los datos no coinciden con ninguno de los patrones, se devuelve una serie vacía.
Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión P con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("123456789", "P(3N-3A-3X);(9N)")
X = "123456789"
X = Iconv("123-ABC-A7G", "P(3N-3A-3X);(9N)")
X = "123-ABC-A7G"
X = Iconv("123-45-6789", "P(3N-2N-4N)")
X = "123-45-6789"
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión P con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("123456789", "P(3N-3A-3X);(9N)")
X = "123456789"
X = Oconv("123-ABC-A7G", "P(3N-3A-3X);(9N)")
X = "123-ABC-A7G"
X = Oconv("ABC-123-A7G", "P(3N-3A-3X);(9N)")
X = ""
X = Oconv("123-45-6789", "P(3N-2N-4N)")
X = "123-45-6789"
X = Oconv("123-456-789", "P(3N-2N-4N)")
X = ""
X = Oconv("123-45-678A",
"P(3N-2N-4N)") X = ""
Sintaxis
Rn,m [ ; n,m ... ]
Comentarios
Si los datos no cumplen las especificaciones del rango, se devuelve una serie vacía.
Ejemplos
El siguiente ejemplo muestra el efecto del código de conversión R (Comprobación de rango) con la
función Iconv.
Expresión de conversión
Valor interno
X = Iconv("123", "R100,200")
X = 123
El siguiente ejemplo muestra el efecto del código de conversión R (Comprobación de rango) con la
función Oconv.
Expresión de conversión
Valor externo
X = Oconv(123, "R100,200")
X = 123
X = Oconv(223, "R100,200")
X = ""
X = Oconv(3.1E2, "R100,200;300,400")
X = 3.1E2
S
Genera códigos fonéticos que pueden utilizarse para comparar palabras basándose en cómo suenan.
Sintaxis
S
Comentarios
El código fonético está formado por la primera letra de la palabra seguida de un número. Las palabras
que suenan igual, por ejemplo, rayar y rallar, generan el mismo código fonético.
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión S con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("GREEN", "S")
X = "G650
X = Iconv("greene", "S")
X = "G650"
X = Iconv("GREENWOOD", "S"
X = "G653"
X = Iconv("GREENBAUM", "S")
X = "G651"
TI
En la modalidad de soporte multilingüístico, convierte las horas del formato interno al formato del
convenio del entorno local predeterminado.
Sintaxis
TI
Ejemplo
El siguiente ejemplo muestra el efecto del código de conversión TI con la función Oconv:
Internal.Time = TIME()International.Time = OCONV(Internal.Time,
→ "TI")
Cuando edita una etapa Transformer, puede convertir los datos utilizando una de las transformaciones
incorporadas que se proporcionan con InfoSphere DataStage. De manera alternativa, puede convertir los
datos utilizando sus propias transformaciones personalizadas. Las transformaciones personalizadas
permiten convertir los datos utilizando funciones o rutinas.
Para obtener más información sobre la edición de una etapa Transformer, consulte “Etapas Transformer”
en la página 108. Para obtener detalles sobre cómo grabar una subrutina escrita por el usuario o una
transformación personalizada, consulte Capítulo 6, “Programación en IBM InfoSphere DataStage”, en la
página 135. Para ver una lista completa de las funciones BASIC soportadas, consulte Capítulo 7,
“Programación BASIC”, en la página 147.
Transformaciones incorporadas
Puede ver las definiciones de las transformaciones incorporadas utilizando el cliente del Diseñador.
El uso de IBM InfoSphere DataStage en un entorno de soporte multilingüístico tiene implicaciones para
algunas de las transformaciones de datos y de tipo de datos. Si el soporte multilingüístico está habilitado,
deberá comprobar las descripciones de las transformaciones en el cliente del Diseñador antes de
utilizarlas, para asegurarse de que funcionan correctamente.
Transformaciones de serie
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
CAPITALS Serie Serie Built-in/String El primer carácter de cada
palabra del argumento se
sustituye por el equivalente
en mayúsculas, si procede.
Toda secuencia de caracteres
entre caracteres de espacio se
toma como una palabra, por
ejemplo: CAPITALS("monday
feb 14th") => "Monday Feb
14th"
DIGITS Serie Serie Built-in/String Devuelve una serie de la que
se han eliminado todos los
caracteres distintos a los
dígitos del 0 al 9, por
ejemplo:
DIGITS("123abc456") =>
"123456"
LETTERS Serie Serie Built-in/String Devuelve una serie de la que
se han eliminado todos los
caracteres excepto las letras,
por ejemplo:
LETTERS("123abc456") =>
"abc"
Transformaciones de fecha
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MONTH.FIRST MONTH.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día de un mes con el
formato MONTH.TAG
(AAAA-MM), por ejemplo:
MONTH.FIRST("1993-02") =>
9164
donde 9164 es la
representación interna del 1
de febrero de 1993.
MONTH.LAST("1993-02") =>
9191
donde 9191 es la
representación interna del 28
de febrero de 1993.
QUARTER.FIRST QUARTER.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día de un trimestre
con el formato
QUARTER.TAG (AAAAQn),
por ejemplo:
donde 9133 es la
representación interna del 1
de enero de 1993.
QUARTER.LAST QUARTER.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día de un trimestre
con el formato
QUARTER.TAG (AAAAQn),
por ejemplo:
QUARTER.LAST("1993Q2") =>
9222
donde 9222 es la
representación interna del 31
de marzo de 1993.
TIMESTAMP. Indicación de fecha Fecha Built-in/Dates Convierte el formato de
TO.DATE y hora indicación de fecha y hora
(AAAA-MM-DD HH:MM:SS)
en un formato de fecha
interna, por ejemplo:
TIMESTAMP.TO.DATE("1996-
12-05 13:46:21") => "10567"
TAG.TO.DATE DATE.TAG Fecha Built-in/Dates Convierte una serie con el
formato AAAA-MM-DD en
una fecha interna numérica,
por ejemplo:
TAG.TO.DATE("1993-02-14")
=> 9177
WEEK.FIRST("1993W06") =>
9171
donde 9171 es la
representación interna del 8
de febrero de 1993.
WEEK.LAST WEEK.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día (Domingo) de una
semana con el formato
WEEK.TAG (AAAAWnn), por
ejemplo:
WEEK.LAST("1993W06") =>
9177
donde 9177 es la
representación interna del 14
de febrero de 1993.
YEAR.FIRST YEAR.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día de un año con el
formato YEAR.TAG (AAAA),
por ejemplo:
donde 9133 es la
representación interna del 1
de enero de 1993.
YEAR.LAST YEAR.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día de un año con el
formato YEAR.TAG (AAAA),
por ejemplo:
donde 9497 es la
representación interna del 31
de diciembre de 1993.
TIMESTAMP.TO.TIME("1996-
12-05 13:46:21") =>
"49581"
donde 49581 es la
representación interna del 5
de diciembre de 1996, 1:46
p.m. y 21 segundos.
TIMESTAMP Fecha Indicación de fecha y Built-in/Dates Convierte el formato de fecha
hora interna en el formato
TIME-STAMP
(AAAA-MM-DD HH:MM:SS).
Por ejemplo:
TIMESTAMP("10567") =>
"1996-12- 05 00:00:00"
donde 10567 es la
representación interna del 5
de diciembre de 1996.
DATE.TAG Fecha DATE.TAG Built-in/Dates Convierte una fecha interna
numérica en una serie con el
formato DATE.TAG
(AAAA-MM-DD), por
ejemplo:
DATE.TAG(9177) =>
"1993-02-14"
TAG.TO.WEEK DATE.TAG WEEK.TAG Built-in/Dates Convierte una serie con el
formato DATE.TAG
(AAAA-MM-DD) al formato
WEEK.TAG (AAAAWnn), por
ejemplo:
TAG.TO.WEEK("1993-02-14")
=> "1993W06"
WEEK.TAG Fecha WEEK.TAG Built-in/Dates Convierte una fecha con
formato de fecha interna en
una serie WEEK.TAG
(AAAAWnn), por ejemplo:
WEEK.TAG(9177) =>
"1993W06"
MONTH.TAG Fecha MONTH.TAG Built-in/Dates Convierte una fecha interna
numérica en una serie con el
formato MONTH.TAG
(AAAA-MM), por ejemplo:
MONTH.TAG(9177) =>
"1993-02"
TAG.TO.MONTH("1993-02014")
=> "1993-02"
QUARTER.TAG Fecha QUARTER.TAG Built-in/Dates Convierte una fecha interna
numérica en una serie con el
formato QUARTER.TAG
(AAAAQn), por ejemplo:
QUARTER.TAG(9177) =>
"1993Q2"
TAG.TO. QUARTER DATE.TAG QUARTER.TAG Built-in/Dates Convierte una serie con el
formato DATE.TAG
(AAAA-MM-DD) al formato
QUARTER.TAG (AAAAQn),
por ejemplo:
TAG.TO.QUARTER("1993-02-
14") => "1993Q2"
MONTH.TO. MONTH.TAG QUARTER.TAG Built-in/Dates Convierte una serie con el
QUARTER formato MONTH.TAG
(AAAA-MM) al formato
QUARTER.TAG (AAAAQn),
por ejemplo:
MONTH.TO.QUARTER("1993-
02") => "1993Q1"
YEAR.TAG Fecha YEAR.TAG Built-in/Dates Convierte una fecha con
formato de fecha interna al
formato YEAR.TAG (AAAA),
por ejemplo:
TAG.TO.YEAR("1993-02-14")
=> "1993"
MONTH.TO.YEAR MONTH.TAG YEAR.TAG Built-in/Dates Convierte una serie con el
formato MONTH.TAG
(AAAA-MM) al formato
YEAR.TAG (AAAA), por
ejemplo:
MONTH.TO.YEAR("1993-02")
=> "1993"
QUARTER.TO.YEAR("1993Q2")
=> "1993"
DateCurrent - Serie sdk/date Devuelve la fecha/hora
DateTime actual con el formato
AAAA-MM-DD
HH:MM:SS.SSS.
DateCurrent - Serie sdk/date Devuelve la fecha/hora
GMTTime actual en GMT con el formato
AAAA-MM-DD
HH:MM:SS.SSS.
DateCurrent - Número sdk/date Devuelve la hora de Internet
SwatchTime o Swatch actual.
DateDaysSince - Serie sdk/date Convierte los días desde 1900
1900To TimeStamp al formato AAAAMMDD
HH:MM:SS:SSS.
DateDaysSince - Serie sdk/date Convierte los días desde 1970
1970To TimeStamp al formato AAAAMMDD
HH:MM:SS:SSS.
Las siguientes transformaciones aceptan series de fecha de entrada con uno de los formatos siguientes:
v Una fecha delimitada cualquiera que especifique Día Mes Año (por ejemplo, 4/19/1999, 4.19.1999, 4/19/99,
4.19.99)
v Fechas de mes alfa (por ejemplo, Abr 08 1999, Abr 08 99)
v Fechas no delimitadas con formato Año Mes Día (por ejemplo, 19990419, 990419)
v Fechas del calendario juliano (por ejemplo, 99126, 1999126)
DateGenericGetDay Serie Serie sdk/date/ Devuelve el valor Día de la
generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGeneric Serie Serie sdk/date/ Devuelve el valor Mes de la
GetMonth generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGenericGetTime Serie Serie sdk/date/ Devuelve el valor Hora de la
generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGeneric Serie Serie sdk/date/ Devuelve el valor Hora de la
GetTimeHour generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGenericGetTime Serie Serie sdk/date/ Devuelve el valor Minutos de
Minute generic la fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
Las siguientes transformaciones aceptan series de fecha de entrada delimitada con el formato [AA]AA MM DD
utilizando un delimitador cualquiera. Las series también pueden contener una entrada de hora con el formato
HH:MM:SS:SSS, HH:MM:SS o HH:MM.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Día de la
GetDay YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Mes de la
GetMonth YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Hora de la
GetTime YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Hora de la
GetTimeHour YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Minutos de
GetTimeMinute YearFirst la fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Segundos
GetTimeSecond YearFirst de la fecha proporcionada
con el formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Año de la
GetYear YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
Transformaciones numéricas
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
NumericIsSigned Serie Serie sdk/Numeric Devuelve 0 si la
entrada es no
numérica o cero, 1
para números
positivos y -1 para los
números negativos.
LinkCount
JobName
JobCompletionStatus
StartTimeEndTime
UtilityMessageToLog Serie - sdk/Utility Graba el mensaje
proporcionado por el
usuario en el registro
en el cliente del
Director.
UtilityPrintColumn Serie - sdk/Utility Graba un valor de
ValueToLog columna en el registro
en el cliente del
Director.
Rutinas incorporadas
Hay tres tipos de rutinas que se suministran con IBM InfoSphere DataStage:
v Subrutinas incorporadas anteriores/posteriores. Estas rutinas se almacenan en la carpeta Rutinas →
Incorporadas → Anteriores/posteriores en el árbol de repositorio. Se compilan y están listas para su uso
como una subrutina anterior o posterior a la etapa o como una rutina anterior o posterior al trabajo.
v Ejemplos de funciones de transformación. Estas rutinas se almacenan en la carpeta Rutinas →
Ejemplos → Funciones en el árbol de repositorio y se utilizan en las transformaciones incorporadas que
se proporcionan con InfoSphere DataStage. Puede copiar estas rutinas y utilizarlas como base para sus
propias funciones de transformación escritas por el usuario.
v Funciones de transformación utilizadas por las transformaciones SDK. Estas son las rutinas que
utilizan las transformaciones SDK del mismo tipo. Se almacenan en Rutina → sdk. El editor de
expresiones no ofrece estas rutinas y deberá utilizar la transformación que tenga prioridad en la rutina
(tal como se describe en “Transformaciones incorporadas” en la página 309).
Puede ver las definiciones de estas rutinas utilizando el cliente del Diseñador, pero no puede editarlas. Si
es necesario, puede copiarlas y renombrarlas, así como editar las copias para trabajar en ellas.
Estas rutinas aparecen en la lista de rutinas incorporadas disponibles cuando edita los campos Subrutina
anterior a la etapa o Subrutina posterior a la etapa en una etapa Aggregator, Transformer o
suplementaria, o los campos Subrutina anterior al trabajo o Subrutina posterior al trabajo en el
recuadro de diálogo Propiedades del trabajo.
También puede copiar estas rutinas y utilizar el código como base para sus propias subrutinas
anteriores/posteriores.
Si el soporte multilingüístico está habilitado, deberá estar informado sobre cualquier requisito de
correlación cuando utilice las rutinas ExecDOS y ExecSH (o ExecDOSSilent y ExecSHSilent). Si estas
rutinas utilizan datos en determinados juegos de caracteres, será su responsabilidad correlacionar los
datos desde o hacia Unicode.
Asimismo, como los almacenamientos intermedios de memoria caché de grabación generan filas hasta
que se llega al umbral, las filas en la memoria caché no se reflejan en la base de datos hasta que la
memoria caché se desecha. Esto supone un problema para los diseños de trabajo que utilizan el mismo
archivo hash para las actualizaciones y las búsquedas de referencia.
El almacenamiento centralizado en memoria caché compartida de disco del sistema, de aquí en adelante
denominado almacenamiento en memoria caché del sistema, reduce el uso de los recursos del sistema, al
implementar sólo una memoria caché que puede configurarse completamente y que da soporte a la
lectura y la grabación.
El release 6.0 introdujo una opción adicional denominada almacenamiento en memoria caché pública de
enlaces. Esta opción permite que varias secuencias de datos de un trabajo utilicen el mismo archivo de
memoria caché. El almacenamiento en memoria caché pública de enlaces se desarrolló para aprovechar el
motor paralelo de InfoSphere DataStage que maximiza la eficacia con un multiprocesador simétrico
(SMP) cuando utiliza un archivo de búsqueda.
Las funciones que dan soporte al almacenamiento en memoria caché de disco se describen en InfoSphere
DataStage Programmer's Guide.
En estos temas se describen los mandatos de usuario, así como las prestaciones que se ofrecen al
administrador de InfoSphere DataStage para ajustar varios valores de configuración del sistema para
maximizar el rendimiento basándose en la configuración de hardware y los pasos de InfoSphere
DataStage.
Funcionalidad
El almacenamiento en memoria caché de disco proporciona la funcionalidad y las ventajas siguientes:
v Da soporte a la actualización compartible o al acceso a archivos de grabación en una secuencia de
datos individual en un trabajo (almacenamiento en la memoria caché privada de enlaces)
v Da soporte a la actualización compartible o al acceso a archivos de grabación con
– varias secuencias de datos en un trabajo individual
– varios trabajos
Terminología
En este documento se utiliza la siguiente terminología:
Término
Significado
bloque
Un grupo de registros o filas. El motor del servidor pone los registros que ejecutan hash en el
mismo número de grupo en un bloque. El tamaño del bloque viene determinado por el valor
SEPARATION de CREATE.FILE.
almacenamiento intermedio de conjunto de bloques
Una unidad de memoria en los segmentos compartidos del disco con un tamaño de n k más el
tamaño de la estructura de cabecera del conjunto de bloques. n puede ser 4, 8, 16 o 32.
cadena libre de conjunto de bloques
La cadena de almacenamientos intermedios de conjuntos de bloques sin utilizar disponible en
alguno de los segmentos de disco compartido configurados.
memoria caché
Un subsistema en el que los datos que se utilizan con frecuencia están disponibles para un acceso
rápido.
daemon de memoria caché
Un proceso asíncrono en segundo plano que realiza las grabaciones de estado de grabación
diferida.
Para aumentar la eficacia de los procesos, puede procesar varias secuencias de datos con un solo archivo
de búsqueda común almacenado en memoria caché.
Nota: Los valores predeterminados sirven como un conjunto razonable de valores iniciales.
3. Asegúrese de que no haya conexiones activas del cliente de InfoSphere DataStage ni usuarios
interactivos.
4. Detenga el motor de servidor de la siguiente manera:
./bin/uv -admin -stop
Nota: No puede continuar en el paso 5 hasta que todas las aplicaciones de InfoSphere DataStage
hayan dejado de ejecutarse. Utilice el siguiente mandato para comprobar que todas las aplicaciones de
InfoSphere DataStage han dejado de ejecutarse:
./bin/uv -admin -info
Si todas las aplicaciones se han detenido, la salida es:
DSEngine, rev xxxx not currently running
5. Genere una nueva configuración del motor de la siguiente manera:
./bin/uv -admin -regen
6. Reinicie el motor de servidor de la siguiente manera:
./bin/uv -admin -start
Si recibe un error del sistema operativo de host indicando que no se han podido asignar los segmentos
de InfoSphere DataStage, revise la información sobre el kernel del sistema operativo y realice los cambios
necesarios en ellos.
Si desea asignar más de 128 megabytes de espacio para la memoria caché en un sistema AIX, siga estos
pasos:
1. Inicie una sesión como dsadm.
2. Utilice el siguiente mandato para cambiar el directorio actual al directorio de instalación de DSEngine:
cd ’cat /.dshome’
3. Edite el archivo uvconfig con un editor de texto como vi.
a. Cambiar DMEMOFF a 0x90000000
b. Cambiar PMEMOFF a 0xa0000000
Guarde el archivo uvconfig.
4. Asegúrese de que no haya conexiones activas del cliente de IBM InfoSphere DataStage ni usuarios
interactivos.
5. Detenga el motor de servidor de la siguiente manera:
Nota: No puede continuar en el paso 6 hasta que todas las aplicaciones de InfoSphere DataStage
hayan dejado de ejecutarse. Utilice el siguiente mandato para comprobar que todas las aplicaciones de
InfoSphere DataStage han dejado de ejecutarse:
./bin/uv -admin -info
Si todas las aplicaciones se han detenido, la salida es:
DSENGINE, rev xxxx not currently running
6. Genere una nueva configuración del motor de la siguiente manera:
./bin/uv -admin -regen
Si el mandato es satisfactorio, la salida es:
uvregen: reconfiguration complete, disk segment size is xxxxxxx
7. Añada los siguientes valores de entorno al archivo .dsenv:
LDR_CNTRL=MAXDATA=0x30000000;exportar LDR_CNTRL
8. Aplique los nuevos valores de entorno ejecutando
. ./dsenv
9. Reinicie el motor de servidor de la siguiente manera:
./bin/uv -admin -start
Nota: Estos valores pueden afectar a la cantidad de memoria utilizada para las etapas suplementarias
que hacen un uso intensivo de la memoria, y este tipo de etapas puede limitar la cantidad de
memoria disponible para la memoria caché.
Nota: Los valores predeterminados sirven como un conjunto razonable de valores iniciales.
3. Asegúrese de que no haya conexiones activas del cliente de InfoSphere DataStage ni usuarios
interactivos.
4. Detenga el motor de servidor de la siguiente manera:
a. Seleccione Inicio → Configuración → Panel de control → IBM InfoSphere Information Server.
Aparece el recuadro de diálogo Panel de control de InfoSphere DataStage.
b. Pulse Detener todos los servicios y pulse Sí como respuesta al mensaje de que se detendrán todos
los mensajes de los Servicios de InfoSphere DataStage.
c. Pulse Aceptar para salir del Panel de control.
Nota: No puede continuar en el paso 5 hasta que todas las aplicaciones de InfoSphere DataStage
hayan dejado de ejecutarse. Para comprobar que no se esté ejecutando ninguna aplicación de
Nota: Si recibe un error del sistema operativo de host indicando que no se han podido asignar los
segmentos de InfoSphere DataStage, revise la información sobre el kernel del sistema operativo y
realice los cambios necesarios en ellos.
Si se cumplen todas estas condiciones, las nuevas aplicaciones utilizan el almacenamiento en memoria
caché privada de enlaces. Los mensajes de registro de tiempo de ejecución hacen referencia al espacio
privado de enlaces.
Si se vuelve a compilar una aplicación existente, puede ejecutarse con un archivo de registro diferente.
Un trabajo con una secuencia individual funciona de la misma forma que con el release anterior, pero los
mensajes de registro de tiempo de ejecución ahora hacen referencia al espacio privado de enlaces.
Si alguna de las tres condiciones anteriores no se cumple, se utiliza el almacenamiento en memoria caché
privada de enlaces.
Si se cumplen todas estas condiciones, las nuevas aplicaciones utilizan el almacenamiento en memoria
caché pública de enlaces. Los mensajes de registro de tiempo de ejecución hacen referencia al espacio
público de enlaces.
Para obtener el estado de la memoria caché de disco, consulte “Obtención del estado” en la página 341.
El diseño de los segmentos de memoria caché de disco compartida permite un acceso de actualización
serializado y eficaz a la lista de bloques en la memoria caché para cada archivo (i-node y dispositivo).
Para utilizar alguno de estos mandatos, antes de ejecutar un trabajo o después de ejecutar un trabajo, cree
definiciones de rutinas anteriores al trabajo o posteriores al trabajo. Consulte la sección Capítulo 6,
“Programación en IBM InfoSphere DataStage”, en la página 135 para obtener información adicional.
Nota: El tamaño de bloque del archivo debe ser 1 KB, 2 KB, 4 KB, 8 KB, 16 KB o 32 KB. Este tamaño se
controla estableciendo la separación de archivos en 2, 4, 8, 16, 32 o 64, respectivamente.
Nota: El tamaño de bloque del archivo debe ser 1 KB, 2 KB, 4 KB, 8 KB, 16 KB o 32 KB. Este tamaño se
controla estableciendo la separación de archivos en 2, 4, 8, 16, 32 o 64, respectivamente.
Un proceso puede ser propietario de uno o varios de los siguientes semáforos: solicitud de daemon,
cadena libre de conjunto de bloques y cadena de archivos de memoria caché. Si es propietario de más de
uno, se generan las líneas correspondientes.
daemon request semaphore held by y
blockset freechain semaphore held by y
cache file chain semaphore held by y
Cuando se ejecuta este mandato, dos líneas muestran el estado general de la memoria caché. Por ejemplo,
11 61 61 50 32 23292
Si se especifica DETAIL, cuatro líneas adicionales proporcionan el estado detallado de la memoria caché
de disco:
16384 256 80 40 50
29 445 4473
Si un semáforo de entrada de archivos utilizado para este archivo de memoria caché está actualmente en
espera, se genera una línea con la siguiente información:
this cache file entry semaphore (x) held by y
Para cada entrada del conjunto de bloques, el significado de esta información es el siguiente:
Categoría
Significado
0xbaseblock
El número del bloque en hexadecimales (con el prefijo 0x).
inset El número de bloques en este conjunto.
mru El estado de sólo lectura o grabación diferida:
v WD para la lista de grabación diferida del archivo de memoria caché
v RO para la lista de sólo lectura del archivo de memoria caché
latched
Cuatro caracteres hexadecimales que muestran los valores de cierre (prefijo 0x), con 1 bit para
cada bloque cerrado en el conjunto de bloques actual de izquierda a derecha.
cntovf El número de procesos que hacen referencia a un grupo de desbordamiento en este conjunto de
bloques.
writedef
Cuatro caracteres hexadecimales que muestran los valores diferido (prefijo 0x), con 1 bit para
cada bloque en el conjunto de bloques actual de izquierda a derecha.
time La hora a la que se ha hecho referencia por última vez al conjunto de bloques.
El ejemplo anterior indica que el archivo público de enlace está utilizando 248 HEAPCHUNK de 128 K
cada uno y 1 HEAPCHUNK de 32 K
Cuando se ejecuta este mandato, se muestran un vuelco del bloque en hexadecimal y las claves de
registro. Si desea un bloque de desbordamiento de un archivo de tipo 30, especifique la opción OVER.30.
Después de dos líneas de cabecera, se muestran cada 64 bytes de datos en una línea, con todas las líneas
cero omitidas. Para cada clave, se genera una línea. La clave es un valor de hasta 511 bytes. El vuelco
termina cuando una clave tiene más de 511 bytes. xxx, yyy y zzz son decimales, a menos que empiecen
por 0[X|x], lo que indica que son hexadecimales.
Nota: Este mandato está disponible para el almacenamiento en la memoria caché pública de enlaces y el
almacenamiento en la memoria caché del sistema.
Nota: Debe haber iniciado una sesión en la cuenta dshome para poder cambiar el estado. Consulte
“Inicio de sesión en la cuenta dshome” en la página 348 para obtener más información sobre cómo iniciar
una sesión en la cuenta dshome.
El mandato es
CLEAR.FILE.CACHE
[[FILE nombre_archivo [GROUP zzz]]
[FORCEWRITE | FLUSHRO | CLOSE | CLEAR.STAT]
| ALL| DCFILE | ENTRY | ARRAY | FREECHAIN | DAEMON]
[USER x | SEMNO y]
[STOP {DAEMON}]
[ABORT] {DETAIL}
El archivo se desecha y se elimina de la memoria caché cuando el último usuario actual cierra el archivo.
Nota: Debe haber iniciado una sesión en la cuenta dshome. Consulte “Inicio de sesión en la cuenta
dshome” para obtener más información sobre cómo iniciar una sesión en la cuenta dshome.
El mandato es:
DAEMON.FILE.CACHE [[START x ] | STOP]
En UNIX:
En Windows:
En el indicador de mandatos, cambie al directorio del motor de servidor y emita el siguiente mandato:
C:\IBM\InformationServer\Server\DSEngine\bin\dssh
El almacenamiento en la memoria caché del sistema permite ejecutar simultáneamente varios trabajos o
etapas para compartir los mismos archivos del motor de servidor, ya sea como archivos de sólo lectura o
para grabar y actualizar archivos. El almacenamiento en la memoria caché del sistema no está diseñado
para utilizarse si sólo hay una etapa individual creando o leyendo el archivo.
Este tipo de almacenamiento en la memoria caché del sistema ofrece el máximo rendimiento, ya que se
difieren las grabaciones síncronas más costosas en el archivo de disco físico. A efectos de actualización
bajo demanda, no hay activo ningún daemon de caché de grabación aparte, y los bloques actualizados
sólo se graban en el disco cuando se excede la cuota de conjunto de bloques de un archivo o cuando se
ha cerrado la última referencia abierta al archivo. La actualización lenta es la actualización bajo demanda
aumentada por un daemon de grabador asíncrono aparte. El daemon de grabación no es necesario para
la actualización diferida. No obstante, cuando está activo, permite minimizar los límites de cuota de
conjunto de bloques y reducir la posibilidad de archivos dañados al mantener el archivo en un estado
más coherente.
Con el almacenamiento en la memoria caché de grabación diferida, los bloques diferidos reales de un
conjunto de bloques que se graban en un disco están determinados por un algoritmo de antigüedad de
utilizado menos recientemente. Aunque esta opción proporciona el máximo rendimiento general, si el
motor del servidor se cuelga, el archivo puede dañarse.
Este tipo de almacenamiento en la memoria caché del sistema tiene un rendimiento más lento que el
almacenamiento en la memoria caché de grabación diferida porque las grabaciones en el archivo de disco
El archivo uvconfig en el directorio de inicio de IBM InfoSphere DataStage tiene varios elementos
ajustables que se utilizan en la memoria caché de disco (consulte “Ajuste de la memoria caché pública de
enlaces y la memoria caché del sistema” en la página 349. Cualquier plataforma puede mantener un
subconjunto de un archivo o una tabla en la memoria caché con la liberación de los conjuntos de bloques
antiguos cuando se necesitan nuevos conjuntos de bloques. Cuando hay varios archivos de gran tamaño
en la memoria caché, sólo un pequeño subconjunto de los bloques de un archivo residirán en la memoria
caché, pero el administrador puede modificar los elementos ajustables para permitir el manejo eficaz de
un subconjunto pequeño. DCFLUSHPCT proporciona al administrador control sobre el algoritmo de
sustitución de conjuntos de bloques para evitar la inanición de sólo lectura. DCMAXPCT controla el
porcentaje máximo de la memoria caché que puede ocupar un archivo. La memoria caché de disco sabe
cuándo ningún proceso activo requiere acceso al bloque de un archivo y lo libera si es necesario.
El rendimiento óptimo se consigue cuando el tamaño de la memoria caché de disco compartida, que se
establece con el elemento ajustable DISKCACHE, se establece en un valor lo suficientemente alto para
contener todo el archivo o una gran proporción (90-95%) de los grupos referenciados. Si el tamaño de
DISKCACHE es inadecuadamente pequeño, se produce la hiperpaginación en la memoria caché de disco.
DCMODULUS tiene algún efecto en el tiempo de ejecución, especialmente para los archivos grandes.
Cuando este número disminuye, la longitud de las cadenas activas de los almacenamientos intermedios
de DCBLOCKSIZE aumenta, lo que supone un mayor tiempo para ejecutar una búsqueda secuencial de
una entrada. El establecimiento de DCMODULUS en 1024 es generalmente el óptimo para los archivos
grandes (de más de 75 mb). El inconveniente es que hay menos estructuras de archivo de memoria caché
de disco que entran en un almacenamiento intermedio de caché, lo que significa la eliminación de
algunos de la agrupación de almacenamientos intermedios disponibles.
El valor predeterminado de DCBLOCKSIZE es 16. Si es menor, la E/S física aumentará y las cadenas de
matrices tendrán una mayor longitud, lo que ralentiza el sistema. DCBLOCKSIZE debe ser mayor que 16
sólo si la plataforma puede manejar las solicitudes de E/S física ampliadas en una E/S en el subsistema
de disco. Una forma de reconocerlo es que la plataforma tenga matrices de discos.
Los bloques de memoria caché de disco se almacenan en n conjuntos de bloques (donde n se configura
como 4k, 8k, 16k o 32k, siendo 16k el valor predeterminado) para reducir el tiempo de búsqueda
secuencial y permitir la lectura previa de los bloques en el área del solicitado. Por este motivo, el tamaño
de separación de archivos está restringido a una potencia de 1024 bytes. Cada archivo será propietario de
m cadenas de conjuntos de bloques (donde m se configura como 64, 128, 256, 512 o 1024, siendo 256 el
valor predeterminado).
Los archivos de tipo 30 son realmente dos archivos: uno para los grupos primarios y el otro para los
bloques de desbordamiento. Por lo tanto, los dos archivos deben considerarse cuando se establece
DCMAXPCT.
Los módulos y las interfaces de usuario de los productos de IBM InfoSphere Information Server no son
totalmente accesibles. El programa de instalación instala los siguientes módulos y componentes del
producto:
v IBM InfoSphere Business Glossary
v IBM InfoSphere Business Glossary Anywhere
v IBM InfoSphere DataStage
v IBM InfoSphere FastTrack
v IBM InfoSphere Information Analyzer
v IBM InfoSphere Information Services Director
v IBM InfoSphere Metadata Workbench
v IBM InfoSphere QualityStage
Para obtener información sobre el estado de accesibilidad de los productos de IBM, consulte la
información de accesibilidad de productos de IBM en http://www.ibm.com/able/product_accessibility/
index.html.
IBM y la accesibilidad
Consulte el IBM Human Ability and Accessibility Center para obtener más información sobre el
compromiso de IBM con respecto a la accesibilidad.
El Information Center se instala como un servicio común con IBM InfoSphere Information Server. El
Information Center contiene ayuda para la mayoría de las interfaces del producto, así como
documentación completa correspondiente a todos los módulos de producto de la suite. Puede abrir el
Information Center desde el producto instalado o bien desde un navegador Web.
Puede utilizar los métodos siguientes para abrir el Information Center instalado.
v Pulse el enlace Ayuda de la parte superior derecha de la interfaz de cliente.
Nota: Desde IBM InfoSphere FastTrack e IBM InfoSphere Information Server Manager, la opción
principal Ayuda abre un sistema de ayuda local. Seleccione Ayuda > Abrir Info Center para abrir el
Information Center completo de la suite.
v Pulse la tecla F1. Generalmente, la tecla F1 abre el tema que describe el contexto actual de la interfaz
de cliente.
También encontrará un subconjunto del Information Center que se renueva periódicamente en el sitio
Web de IBM, en http://publib.boulder.ibm.com/infocenter/iisinfsv/v8r5/index.jsp.
IBM no ofrece representación, garantías ni contrae otros compromisos en relación a sitios Web no
pertenecientes a IBM o a recursos de terceros (incluido cualquier sitio Web de Lenovo) al que pueda
hacerse referencia en cualquier sitio de IBM, ser accesible o estar enlazado a él. Un enlace a un sitio Web
no IBM no implica que IBM se haga responsable del contenido o de la utilización de tal sitio Web o de su
propietario. Además, IBM no toma parte ni es responsable de ninguna transacción que el cliente pueda
establecer con terceros, aunque haya tenido conocimiento de ellos (o utilice un enlace con ellos) desde un
sitio de IBM. En consecuencia, el cliente tiene conocimiento y acepta que IBM no es responsable de la
disponibilidad de tales sitios o recursos externos, ni tampoco del contenido, servicios, productos u otros
materiales situados en dichos sitios o recursos o disponibles desde ellos.
Cuando acceda a un sitio Web no IBM, incluso a uno que pueda contener el logotipo de IBM, tenga en
cuenta que es independiente de IBM y que IBM no controla el contenido del mismo. Es responsabilidad
del cliente tomar precauciones para protegerse de los virus, gusanos, troyanos y otros programas
potencialmente destructivos y proteger la información según estime adecuado.
Avisos
Es posible que IBM no comercialice en otros países los productos, servicios o características que se
describen en este manual. Consulte al representante local de IBM para obtener información sobre los
productos y servicios que actualmente pueden adquirirse en su zona. Cualquier referencia a un producto,
programa o servicio de IBM no pretende afirmar ni implicar que sólo se pueda utilizar dicho producto,
programa o servicio de IBM. En su lugar se puede utilizar cualquier producto, programa o servicio
funcionalmente equivalente que no vulnere ninguno de los derechos de propiedad intelectual de IBM. Sin
embargo, es responsabilidad del usuario evaluar y verificar el funcionamiento de cualquier producto,
programa o servicio que no sea de IBM.
IBM puede tener patentes o solicitudes de patentes en tramitación que afecten al tema tratado en este
documento. La posesión de este documento no otorga ninguna licencia sobre dichas patentes. Puede
enviar consultas sobre licencias, por escrito, a la siguiente dirección:
Para formular consultas relacionadas con el juego de caracteres de doble byte (DBCS), póngase en
contacto con el departamento de la propiedad intelectual de IBM de su país o envíe las consultas, por
escrito, a la siguiente dirección:
El párrafo siguiente no es aplicable al Reino Unido ni a ningún país en donde tales disposiciones sean
incompatibles con la legislación local: INTERNATIONAL BUSINESS MACHINES CORPORATION
PROPORCIONA ESTA PUBLICACIÓN TAL CUAL, SIN GARANTÍA DE NINGUNA CLASE, NI
EXPLÍCITA NI IMPLÍCITA, INCLUIDAS, PERO SIN LIMITARSE A ELLAS, LAS GARANTÍAS
IMPLÍCITAS DE NO VULNERACIÓN DE DERECHOS, COMERCIALIZACIÓN O IDONEIDAD PARA
UN FIN DETERMINADO. Algunos estados no permiten la declaración de limitación de responsabilidad
de garantías expresas o implícitas en determinadas transacciones. Por consiguiente, es posible que esta
declaración no se aplique en su caso.
Esta información podría contener imprecisiones técnicas o errores tipográficos. La información de este
documento está sujeta a cambios periódicos; dichos cambios se incorporarán en nuevas ediciones de la
publicación. Es posible que IBM realice mejoras o efectúe cambios en el(los) producto(s) y/o el(los)
programa(s) descritos en esta publicación en cualquier momento sin previo aviso.
Las referencias hechas en esta publicación a sitios Web que no son de IBM se proporcionan sólo para la
comodidad del usuario y no constituyen un aval de esos sitios Web. La información contenida en estos
sitios Web no forma parte de la información del presente producto IBM, y el usuario es responsable de la
utilización de dichos sitios.
Los licenciatarios de este programa que deseen obtener información sobre él con el fin de habilitar: (i) el
intercambio de información entre programas creados de forma independiente y otros programas (incluido
éste) y (ii) el uso mutuo de la información intercambiada, deben ponerse en contacto con:
IBM Corporation
J46A/G4
555 Bailey Avenue
San José, CA 95141-1003 EE.UU.
Dicha información puede estar disponible, sujeta a los términos y condiciones apropiados, incluido en
algunos casos el pago de una tarifa.
El programa bajo licencia descrito en este documento y todo el material bajo licencia asociado a él los
proporciona IBM según los términos del Acuerdo de Cliente de IBM, el Acuerdo Internacional de
Programas Bajo Licencia de IBM o cualquier acuerdo equivalente entre el usuario e IBM.
Los datos de rendimiento contenidos en este documento se obtuvieron en un entorno controlado. Por
consiguiente, es posible que los resultados obtenidos en otros entornos operativos varíen de forma
significativa. Algunas mediciones pueden haberse realizado en sistemas experimentales y no es seguro
que estas mediciones sean las mismas en los sistemas disponibles comercialmente. Además, algunas
mediciones pueden haberse calculado mediante extrapolación. Los resultados reales pueden variar. Los
usuarios del presente manual deben verificar los datos aplicables para su entorno específico.
La información relacionada con productos ajenos a IBM se ha obtenido a partir de los proveedores de
dichos productos, los anuncios que han publicado u otras fuentes de dominio público. IBM no ha
probado dichos productos ni puede confirmar la precisión del rendimiento, la compatibilidad ni ninguna
otra afirmación sobre productos ajenos a IBM. Las preguntas sobre las prestaciones de productos que no
son de IBM deben dirigirse a los proveedores de esos productos.
Todas las declaraciones de intenciones de IBM están sujetas a cambio o cancelación sin previo aviso, y
sólo representan objetivos.
Esta información sólo tiene como objeto la planificación. La información de este documento está sujeta a
cambios antes de que los productos descritos estén disponibles.
Este manual contiene ejemplos de datos e informes que se utilizan en operaciones comerciales diarias.
Para ilustrarlos de la forma más completa posible, los ejemplos incluyen nombres de personas, empresas,
marcas y productos. Todos estos nombres son ficticios y cualquier similitud con nombres y direcciones
utilizados por una empresa real es totalmente fortuita.
LICENCIA DE COPYRIGHT:
Esta información contiene programas de aplicación de ejemplo en código fuente que ilustran técnicas de
programación en diferentes plataformas operativas. Puede copiar, modificar y distribuir estos programas
de ejemplo de cualquier forma, sin pagar a IBM, con la finalidad de desarrollar, utilizar o distribuir
programas de aplicación que se ajusten a la interfaz de programación de aplicaciones para la plataforma
operativa para la que se han escrito los programas de ejemplo. Estos ejemplos no se han probado
exhaustivamente bajo todas las condiciones. Por tanto, IBM no puede garantizar ni dar por sentada la
fiabilidad, la capacidad de mantenimiento ni el funcionamiento de dichos programas. Los programas de
ejemplo se proporcionan "tal como están", sin garantías de ningún tipo. IBM no se hace responsable de
los daños que se hayan podido causar debido al uso de los programas de ejemplo.
© (nombre de la empresa) (año). Partes de este código provienen de programas de ejemplo de IBM Corp.
© Copyright IBM Corp. _entrar el año o los años_. Reservados todos los derechos.
Si está visualizando esta información en copia software, es posible que las fotografías o las ilustraciones
en color no aparezcan.
Marcas registradas
IBM, el logotipo de IBM e ibm.com son marcas registradas de International Business Machines Corp. en
muchos países o regiones de alrededor del mundo. Otros nombres de productos y servicios pueden ser
marcas registradas de IBM u otras empresas. Encontrará una lista actualizada de las marcas registradas
de IBM en www.ibm.com/legal/copytrade.shtml.
Adobe es una marca registrada de Adobe Systems Incorporated en los Estados Unidos y/o en otros
países.
IT Infrastructure Library es una marca registrada de Central Computer and Telecommunications Agency,
que ahora forma parte del departamento de comercio (Office of Government Commerce) del gobierno de
los Estados Unidos de América.
Intel, el logotipo de Intel, Intel Inside, el logotipo de Intel Inside, Intel Centrino, el logotipo de Intel
Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium y Pentium son marcas registradas de Intel
Corporation o de sus subsidiarias en los Estados Unidos de América y en otros países.
Linux es una marca registrada de Linus Torvalds en los Estados Unidos y/o otros países.
ITIL es una marca registrada y una marca de comunidad registrada del departamento de comercio del
gobierno (Office of Government Commerce), y está registrada en la oficina de patentes y marcas
registradas (Patent and Trademark Office) de los Estados Unidos.
UNIX es una marca registrada de The Open Group en Estados Unidos y en otros países.
Cell Broadband Engine es una marca registrada de Sony Computer Entertainment, Inc. en los Estados
Unidos de América o en otros países y se utiliza con su licencia.
Java y todas las marcas basadas en Java son marcas registradas de Sun Microsystems, Inc. en los EE.UU.
y/o otros países.
El servicio postal de los Estados Unidos (United States Postal Service) es propietario de las siguientes
marcas registradas: CASS, CASS Certified, DPV, LACSLink, ZIP, ZIP + 4, ZIP Code, Post Office, Postal
Service, USPS y United States Postal Service. IBM Corporation tiene titularidad no exclusiva de licencias
de DPV y LACSLink de United States Postal Service.
Otros nombres de empresas, productos o servicios pueden ser marcas registradas o marcas de servicio de
otros.
La tabla siguiente indica los recursos de soporte al cliente, servicios de software, formación e información
sobre productos y soluciones.
Tabla 20. Recursos IBM
Recurso Descripción y ubicación
Portal de soporte de IBM Puede personalizar la información de soporte eligiendo
los productos y temas que le interesen en
www.ibm.com/support/entry/portal/Software/
Information_Management/
InfoSphere_Information_Server
Servicios de software Puede buscar información sobre servicios de software, de
tecnologías de la información y de consultoría
empresarial en el sitio de soluciones:
www.ibm.com/businesssolutions.
Mi IBM Puede gestionar enlaces a sitios web de IBM y a
información que satisfaga sus necesidades específicas de
soporte técnico creando una cuenta en el sitio Mi IBM:
www.ibm.com/account/.
Formación y certificación Puede obtener información acerca de servicios de
formación técnica diseñados para personas, empresas y
organizaciones públicas para adquirir, mantener y
optimizar sus conocimientos de TI en
http://www.ibm.com/software/sw-training/
Representantes de IBM Puede ponerse en contacto con un representante de IBM
para obtener información acerca de las soluciones en
www.ibm.com/connect/ibm/us/en/
Envío de comentarios
La tabla siguiente describe cómo enviar a IBM comentarios sobre los productos y la documentación de
los mismos.
Tabla 21. Envío de comentarios a IBM
Tipo de comentario Acción
Comentarios sobre productos Puede proporcionar comentarios generales sobre
productos mediante la encuesta de usabilidad, en el sitio
web www.ibm.com/software/data/info/consumability-
survey.
Índice 367
función Ln 247
función MatchField 251
M recuadro de diálogo Seleccionar desde
servidor 89, 140
función Mod 252 mandato dsjob recuadro de diálogo Sustitución de
función Neg 253 utilizar en etapa Command 64 expresiones 116
función Not 253 mandatos recuadros de diálogo
función Num 254 externo 2, 60, 65 Buscar 142
función Oconv 254 mandatos de servidor Buscar y sustituir 113
función Pwr 264 almacenar en memoria caché de edición de metadatos de columna 33
función REAL 266 disco 340 Guardar definición de tabla 93
función Right 267 mandatos externos, ejecutar 2, 60, 65 Opciones de creación de archivo 42
función Rnd 268 mandatos TCL, etapa Command 64 Rutina de servidor 138
función Seq 268 marcas registradas Seleccionar desde servidor 89
función SetLocale 268 lista de 359 Sustitución de expresiones 116
función Sin 274 menús de atajos en el Editor de recurso de coincidencia automática de
función SinH 274 transformador 110 columnas 115
función Soundex 270 múltiples filas, búsqueda 119 REDEFINES 37
función Space 270 reglas de prioridad, programación 137
función Sqrt 271 rendimiento
función SQuote 271 N almacenar en memoria caché de
función Status 271 Navegador de datos 30, 42, 48 disco 350, 352
función Str 272 nombre de rutina 138 estadísticas 10
función Tan 274 número de versión, rutina BASIC 138 etapa Sort 104, 105
función TanH 274 trabajo 5
función Time 273 representación de datos, etapas FTP
función TimeDate 274
función Trim 276
O Plug-in 82, 83
representación de datos ASCII, etapas
función TrimB 277 OCCURS paralelas 35 FTP Plug-in 82
función TrimF 277 operador If...Then...Else 244 representación de datos binaria, etapas
función UniChar 277 operadores de coincidencia de FTP Plug-in 82, 83
función UniSeq 277 patrón 263 restricciones 120
función UpCase 278 rutinas
función Xtd 281 consulte también rutinas BASIC 135
funciones ActiveX (OLE) P crear 135
funciones de programación 136, 139 paquetes de InfoSphere DataStage 2 probar 142
importación 146 programa de copia en masa, véase subrutinas anteriores y
funciones Bit 172 programa de utilidad BCP 1 posteriores 330
funciones de transformación programa de utilidad BCP (Programa de tipos 135
crear 140 copia en masa) rutinas BASIC
ejemplos 331 descripción 1 cómo guardar código 141
funciones orientadas a los bytes 173 programar en InfoSphere DataStage 135 copia 143
funciones trigonométricas 274 programas BASIC, etapa Command 64 crear 135, 140
punto de código 19 edición 143
puntos de interrupción 127 entrada de código 140
G name 138
número de versión 138
giros
columnas 95, 99 R probar 142
tipo 138
definición 95 recuadro de diálogo Buscar 142 visualizar 143
ejemplos 96 recuadro de diálogo Buscar y rutinas incorporadas 330
guardar código en rutinas BASIC 141 sustituir 113
recuadro de diálogo Editar metadatos de
columna 33
I recuadro de diálogo Examinar, véase S
recuadro de diálogo Seleccionar desde scripts Perl, etapa Command 60
importación
servidor 89 scripts UNIX, etapa Command 60
funciones ActiveX (OLE)
recuadro de diálogo Guardar definición secuencias de datos múltiples, almacenar
externas 146
de tabla 93 en memoria caché de disco 336
InfoSphere DataStage, programar en 135
recuadro de diálogo Opciones de creación sentencia * 169
de archivo 42 sentencia $Define 166
recuadro de diálogo Rutina sentencia $Include 168
J página Creador 138 sentencia $Undefine 168
juegos de caracteres 19 Página de códigos 139 sentencia Call 175
correlación entre interno y Página Dependencias 139 sentencia Case 176
externo 19 página General 138 sentencia CloseSeq 179
puntos de código 19 utilizar Buscar 142 sentencia Common 181
juegos de caracteres externos 19 utilizar Sustituir 142 sentencia Deffun 186
juegos de caracteres internos 19 recuadro de diálogo Rutina de sentencia Dimension 187
servidor 138 sentencia End 219
Índice 369
370 Guía del desarrollador de Server Job
Impreso en España
SC11-7827-03
Spine information:
IBM InfoSphere DataStage Versión 8 Release 5 Guía del desarrollador de Server Job