SyncSort: JOIN entre dos archivos con JCL

Esta es la segunda entrega de la colección de ejemplos de SyncSort. La primera está aquí,

Ahora veremos un ejemplo de mezcla (JOIN) de archivos (el llamado Matching). Esta es la segunda entrega de la colección de ejemplos de SyncSort.

Problema

Tengo la información de clientes en dos tablas separadas, una de datos básicos y otra de datos adicionales. Quiero volver a unir estas dos tablas, o mejor dicho, los dos archivos de descarga de cada tabla.

También aplica para dos archivos tipo MAESTRO-DETALLE.

El primer archivo tiene 556 bytes de ancho, el segundo 274. Por ahora, solo quiero juntarlos. La condición de juntado, la clave de JOIN es la propia clave en ambos archivos: El IDCLIENT que será un campo numérico de 8 posiciones al inicio de cada archivo.

Verdad que no deberíamos olvidar que los archivos previamente deberían estar ordenados para el match. En este caso, los archivos ya lo están.

Solución

¿Qué tenemos a disposición?Pues SyncSort opción JOIN.

Siguiente el método anterior, planteemos el algoritmo:

FILE1 JOIN: FILE1.ENTRADA.JOIN.D1%%ODATE
FILE2 JOIN: FILE2.ENTRADA.JOIN.D1%%ODATE
SALIDA SORT: FILE1.SALIDA.D1%%ODATE
JOIN KEY FILE1: POS 1,8
JOIN KEY FILE2: POS 1,8     
FORMATO SALIDA: TODO FILE1 + TODO FILE2
SORT: Ninguno en especial en la salida ni en las entradas.

Refinemos a la terminología SyncSort:

SORTJNF1=FILE1.ENTRADA.JOIN.D1%%ODATE
SORTJNF2=FILE2.ENTRADA.JOIN.D1%%ODATE
SORTOUT =FILE1.SALIDA.D1%%ODATE          
         DISP=(NEW,CATLG,DELETE),DCB=(RECFM=FB,LRECL=830)     
JOINKEYS FILES=F1,FIELDS=(1,8,A),SORTED                           
JOINKEYS FILES=F2,FIELDS=(1,8,A),SORTED                           
REFORMAT FIELDS=(F1:1,556,F2:1,274)                               
SORT FIELDS=COPY

Y listo. ¿Qué hicimos? Para usar JOIN hay ‘parámetros’ que llenar, SORTJNF1 y SORTFJNF2 son los archivos para el Match. SORTOUT es la salida. JOINKEYS son las llaves de JOIN. Y decimos “Del archivo 1 toma de la posición 1 a la 8 y de forma ascendente. Del archivo 2 toma la posición 1 a la 8 de forma ascendente”. El parámetro SORTED le dirá a SyncSort que no se preocupe por ordenar los archivos, pues ya lo están.

REFORMAT es la parte para indicar cómo será el registro en el archivo de salida. Se indica “Del archivo F1, saco esto, y esto, del F2, saco esto, esto y esto”. En este caso dice “Archivo 1: posición 1 a 556, Archivo 2: posición 1 a 274”.

Además, SORT FIELDS=COPY es decir “no, gracias, solo copia” y listo.

El STEP en un JOB JCL correctamente formado se vería así:

//STEP2 EXEC PGM=ICEMAN,COND=(4,LT)                              
//SORTJNF1 DD DSN=FILE1.ENTRADA.JOIN.D1%%ODATE,DISP=SHR
//SORTJNF2 DD DSN=FILE2.ENTRADA.JOIN.D1%%ODATE,DISP=SHR
//SORTOUT  DD DSN=FILE1.SALIDA.D1%%ODATE ,             
//            DISP=(NEW,CATLG,DELETE),UNIT=3390,                    
//            SPACE=(CYL,(1000,500),RLSE),                          
//            DCB=(LRECL=830,RECFM=FB,BLKSIZE=0,DSORG=PS)           
//SYSOUT   DD SYSOUT=*                                              
//SYSIN    DD *                                                     
  JOINKEYS FILES=F1,FIELDS=(1,8,A),SORTED                         
  JOINKEYS FILES=F2,FIELDS=(1,8,A),SORTED                         
  REFORMAT FIELDS=(F1:1,556,F2:1,274)                             
  SORT FIELDS=COPY                                                
  OUTFIL FILES=OUT,SAVE,BUILD=(1,830)                               
//* 

¡Solucionado!

Nos vemos en la red.

Anuncios

Un comentario sobre “SyncSort: JOIN entre dos archivos con JCL

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s