Lea en AS/400 System i . . .

Aprovechando las posibilidades del WRKACTJOB a través de sus parámetros

Obtenga una salida diferente de la habitual al ejecutar el comando WRKACTJOB, aprovechando lo ofrecido por algunos parámetros interesantes que posibilitan entre otras acciones la de renovar automáticamente la pantalla resultante.

FaceBookTwitterGoogle+

Cómo cargar datos a tablas DB2/400 desde otros entornos con el comando CPYFRMIMPF

Aprenda a cargar datos en tablas de DB2 UDB (DB2/400) desde otros entornos usando el comando CPYFRMIMPF

El comando CPYFRMIMPF (Copy From Import File) es un potente y elegante comando del CL/400 que permite introducir datos en las tablas físicas del DB2/400 (DB UDB) desde archivos planos, tanto ASCII como EBCDIC, en forma relativamente inteligente, esto es, ejecutando validaciones, "parseando" y convirtiendo los campos, y generando un registro de errores. A través de este comando es posible entre otras cosas , "importar" datos desde archivos generados en otras plataformas, por ejemplo, desde SQL Server, Access, Excel, FoxPro, mejorando la mayoría de las herramientas anteriores.

A diferencia del CPYF (Copy File), que puede generar tablas DB2/400 desde archivos físicos de fuente (*FILE PF-SRC), el comando CPYFRMIMPF puede tomar archivos ASCII del Integrated File System ( Recomendado: Ver Tip Qué es el IFS y cómo accederlo), admitiendo muchas variantes de formato para el separador de campos, el delimitador de strings y el fin de registro. Esto lo hace compatible con casi cualquier herramienta de PC, ya que abarca los típicos formatos .csv (comma separated values) o .txt.

A diferencia de los File-Transfer o el FTP, el comando CPYFRMIMPF actúa dentro del mismo sistema, es decir, tomando los datos del IFS. Este comando tiene utilidad real cuando se utiliza en combinación con NetServer, es decir, cuando el AS/400 se usa como servidor de disco y se definen carpetas de archivos o unidades lógicas (F:, G:) en el AS/400 ( Recomendado: Ver Tip Aproveche lo que ya tiene: FILE SERVING con NETSERVER/400). Los archivos a copiar deben copiarse al IFS a través de Netserver o bien generarse directamente allí dentro. En uno u otro caso, ésto es extremadamente rápido y simple. Los tiempos de ejecución del comando CPYFRMIMPF son notablemente más eficientes que los de cualquier variante tipo SQL, ODBC o File Transfer.

Existe el mandato asociado llamado CPYTOIMPF que permite realizar el mismo proceso en sentido inverso, es decir, exportar datos desde el DB2/400 en formato delimitado por comas o similar hacia otras bases de datos, data warehouses, etc.

Si bien el CPYFRMIMPF ofrece varias formas de explotación, en el presente tip se analizarán los parámetros básicos a utilizar para poder realizar una copia exitosa.

Archivo origen y archivo destino de la copia

Antes de comenzar con el proceso de importación, es necesario comprender algunos conceptos que se utilizarán en el resto del tip.

  • Archivo origen o from file: es el archivo que contendrá los registros a importarse. Este archivo puede ser un stream file (parámetro FROMSTMF) o un *FILE PF-DTA (parámetro FROMFILE). En el caso de ser un stream file (lo que cubrirá este tip) el mismo puede generarse a través de las facilidades de exportación de los distintos productos de software de PC (Access, Excel, Foxpro, etc). El formato comunmente usado es el denominado .csv (comma separated values), donde el carácter "," actúa como separador de campos. Existe también la opción de generar archivos .txt, donde además se selecciona el tabulador como separador de campos. Para que la importación resulte satisfactoria es necesario tener conocimiento de la información almacenada dentro de las tablas y de su formato. Por ejemplo: datos núméricos o alfanuméricos, valores enteros o con decimales, fechas, horas, longitudes de los campos, cuál es el carácter separador de decimales, etc.
Otros tipos de archivo origen soportados: archivos físico de fuentes, archivos DDM, archivos físicos distribuídos, archivos físicos descriptos por programas, archivos lógicos de formato simple, archivo de cinta. Para cada uno de ellos, las especificaciones del comando pueden ser variadas.
  • Archivo destino o tofile: es el archivo de base de datos (objeto de tipo *FILE) que recibirá los registros a copiar. Este archivo debe existir antes de la ejecución del comando. Puede crearse a partir de la definición de un fuente DDS o a través de las facilidades de creación de tablas del Operations Navigator. La tabla creada deberá tener un formato acorde a los datos que recibirá. Es importante destacar que, si el archivo destino tiene restricciones referenciales y triggers definidos sobre él, éstos actuarán de acuerdo a las restricciones ya establecidas, en el momento que la copia se realice. Observar su incidencia en la performance.
Otros tipos de archivo destino soportados: archivos físico de fuentes, archivos DDM, archivos físicos distribuídos, archivos físicos descriptos por programas, archivos físicos descriptos en forma externa.

En la próxima sección se analizará un ejemplo de importación de archivo con el comando CPYFRMIMPF.

Utilización del comando CPYFRMIMPF

Los siguientes son los pasos necesarios para realizar una importación de datos a una tabla del DB2/400 utilizando CPYFRMIMPF:


1. Generar un archivo con la herramienta de PC deseada que contendrá los datos a importar al AS/400. De acuerdo al separador de campos que se haya determinado usar ("," o tabulaciones), se generan archivos con extensión .csv o .txt respectivamente. Si la información de un determinado campo incluye el caracter " , ", deberá seleccionarse .txt con tabulaciones para que la interpretación de campos sea correcta. Otra consideración es cuál es el delimitador de strings que se utiliza. Existen productos que establecen el uso de las comillas (") como delimitador de campos de caracteres por default, pero se pueden seleccionar otros delimitadores.

Tener en cuenta además que el comando CPYFRMIMPF exige que el archivo origen esté almacenado en el IFS (Integrated File System). En el momento de su generación, se puede almacenar en el disco de la PC y luego transferirlo al IFS, o salvarlo directamente en un directorio compartido del IFS. Estas posibilidades están naturalmente presentes cuando se trabaja con NetServer. También es posible realizar la transferencia con cualquier otra herramienta de file transfer.

2. Crear el archivo destino de la copia. Este archivo es un *FILE PF-DTA, que puede crearse a partir de la definición de un fuente DDS o a través de las facilidades de creación de tablas del Operations Navigator. Recordar que la tabla creada deberá tener un formato acorde a los datos que recibirá.

3. Ejecutar el comando CPYFRMIMPF con los siguientes parámetros:

codigo-copiar-archivo-importacion-AS400

Observaciones:

A) Archivo continuo origen: permite especificar el path del IFS donde el archivo a importar está localizado. Este parámetro es excluyente con el parámetro Desde Archivo (palabra clave FROMFILE).

B) A archivo de base de datos: nombre del archivo destino que contendra los registros a importar. Es el objeto *FILE PF-DTA creado en el paso 2 de este procedimiento. Este parámetro es excluyente con el parámetro Desde archivo (palabra clave FROMFILE). En la sección anterior existen otras posibilidades para este parámetro. También es posible especificar el miembro que contendrá los nuevos registros; en caso de no existir, es automáticamente creado.

Observar el parámetro Sustituir o añadir registros. El valor *REPLACE "pisa" los registros existentes en el miembro seleccionado. La opción *ADD agrega directamente los datos al final de los ya existentes. Con *UPDADD, agrega los nuevos registros, y actualiza los ya existentes.

C) Delimitador de registro: especifica el delimitador de registro que se usó en el archivo origen. Comúnmente se utiliza *CRLF.

D) Delimitador de serie: indica, en el archivo origen, cuál es el delimitador que se utiliza para los campos de caracteres. Esto es dependiente de cómo se haya generado el archivo origen. Este parámetro fue establecido en *NONE, porque los campos de caracteres no fueron generados con delimitadores.

E) Delimitador de campo: establece el delimitador de campo que se utilizó en el archivo origen. Este valor se usa para determinar dónde finaliza un campo y comienza el próximo. El delimitador default es la " , " (válido si el archivo origen tiene extensión .csv). Para el caso de los .txt, el delimitador es el tabulador (valor *TAB). Si el software de PC con el cual se realiza la generación del archivo origen acepta otros caracteres como separadores de campos, éste deberá ingresarse aquí.
El parámetro Formato reg arch importación con el valor *DLM, produce la aparición de los parámetros: Delimitador de serie y Delimitador de campo. *DLM indica que el archivo origen contiene caracteres delimitadores que deberán interpretarse para que la importación sea exitosa.

F) Sustituir valores nulos: especifica si los valores nulos de los campos serán reemplazados en el archivo destino cuando se copian los registros. El valor *NO indica que los valores nulos no serán reemplazados. Si se detecta un valor nulo, cuando graba un nuevo registro, un mensaje de error es enviado y la operación de copia falla. Si el valor para este parámetro es *FLDDFT, se almacena en el campo el valor default establecido basado en el tipo de campo o el valor default definido en las DDS's. *FLDDFT es necesario cuando se especificó, en el momento de crear el archivo destino, que los campos deben contener valores.
En el paso F) terminan las observaciones sobre la pantalla del comando presentada previamente.

4. Una vez que se presionó "Intro" y la operación de copia comienza, aparece un mensaje de estado que avisa que se están copiando los registros. Cuando el archivo origen es un stream file ubicado en el IFS, durante el proceso de copia será creado un archivo físico temporario para contener la información del archivo origen. Este archivo temporario será creado con el nombre QACPxxxxxx en la biblioteca QRECOVERY, donde xxxxxx es un nombre generado por el sistema. La información será copiada desde el archivo temporario al archivo destino. Luego que la copia finaliza, el archivo temporario es automáticamente eliminado por el sistema.

El mensaje de escape CPF2817 es enviado ante diversas condiciones de error que pueden ocurrir durante la copia. Presionar ayuda sobre el mismo y observar el código de razón que informa, con más precisión, los motivos de la falla.

También, con respecto al manejo de errores, es importante observar los parámetros Errores permitidos y Archivo de registro errores. El primero de ellos especifica el número máximo de errores recuperables de lectura y grabación sobre el archivo destino que se toleran durante la copia. Si el valor para este parámetro es "0", no se permiten errores durante la ejecución del comando. El valor *NOMAX establece que la operación de copia continúe, independientemente de la cantidad de errores que se produzcan.

El parámetro Archivo de registro de errores, se puede utilizar para especificar el nombre de un archivo físico de fuentes (*FILE PF-SRC) donde se almacenará el log de errores de la copia. Los registros que no se copiaron debido a algún inconveniente, se almacenarán en este archivo. De esta manera, fácilmente se puede determinar cuáles registros no se copiaron y corregirlos manualmente o procesarlos con alguna herramienta.

5. Verificar con QUERY/400 o simplemente DSPPFM que los registros copiados están almacenados en el archivo destino, y que la interpretación de los campos se realizó correctamente.


Consideraciones de Performance

Para mejorar la performance de la copia tener en cuenta lo siguiente:

  • Suprimir cualquier archivo lógico conectado con el archivo destino antes de realizar la ejecución del comando CPYFRMIMPF.
  • Remover todas las restricciones y triggers que pudiera tener el archivo destino antes de realizar la ejecución del comando CPYFRMIMPF.
  • Asegurarse que los registros del archivo origen se van a copiar correctamente, intentando primero hacer una copia de algunos pocos registros, usando el parámetro Copiar desde número registro (palabra clave FROMRCD) y la opción número de registros, antes de copiar todos los registros.
  • Usar el parámetro ERRLVL(*NOMAX) después de asegurarse que los datos se van a copiar correctamente.
  • Una importante característica del comando CPYFRMIMPF es la habilidad de copiar la información del archivo origen en paralelo. Para lograr ésto se necesita usar el comando CHGQRYA (Change Query Attributes). El número de tareas usado para realizar la copia está determinado por el parámetro Grado de proceso en paralelo (palabra clave DEGREE) de este comando y además tiene que estar instalada la opción del sistema DB2 Symmetric Multiprocesing para OS/400.


Para tener en cuenta...

  • En V4R2 del OS/400, el comando CPYFRMIMPF está presente, pero con posibilidades limitadas. Tampoco está incluido en la lista de comandos relacionados con "copiar" (GO CMDCPY).
  • El comando CPYFRMIMPF puede ejecutarse en forma batch y también incluirse dentro de programas CL. Esto brinda la posibilidad de automatizar el proceso de copia y además planificarla.
  • Si el parámetro Formato reg arch importación está establecido en *FIXED y la información está en columnas fijas en cada registro (no se usan delimitadores), la descripción del formato de los datos debe estar contenida en el miembro de archivo identificado por el parámetro Archivo de definición de campos (palabra clave FLDDFNFILE).
  • El comando CPYFRMIMPF posee un grupo de parámetros que dan la posibilidad de especificar, en el archivo origen, cuál es el caracter que se utilizó como punto decimal, cuál es el formato de fecha y su separador, el formato de hora para los campos hora y su separador.
  • Si en el parámetro Sustituir o añadir registros se especifica *ADD o *UPDADD y el archivo destino no contiene registros, la operación se completa normalmente. Si, en cambio, se especifica *REPLACE y el archivo destino no contiene registros, la operación de copia finaliza de forma anómala.

Copyright  2002 Teknoda S.A .

IMPORTANTE:
“Notas técnicas de AS/400" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes AS/400. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas AS400, envíe un mensaje desde esa direcciónletter400@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

AS400 , iSeries y System i son marcas registradas de IBM. IBM no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA


 

Comentarios  

0 #1 luisfeuer 14-10-2016 11:48
muy interesante
Citar

Escribir un comentario


Código de seguridad
Refescar

Lea en AS/400 Tips . . .

Infografía comparativa Comandos de SAVE RESTORE del AS400

save_restore_thumbnail

Conozca y diferencie visualmente qué partes del almacenamiento resguarda y restaura cada comando y cada opción del Menú Salvar y Restaurar. PUEDE DESCARGAR UN FORMATO POSTER PARA IMPRESION.

Para lograr un entendimiento conceptual es de suma utilidad contar con una ayuda gráfica, que  permita diferenciarlos a primera vista. Nuestro equipo de especialistas ha desarrollado el "Infographics" que presentamos con este tip. Por supuesto, el mismo debe complementarse con la información detallada de los innumerables parámetros de cada comando, pero es un útil marco de referencia  para recordar el área de injerencia de cada comando.

LEER ESTE ARTICULO >>>>>

 

 

 

Copyright © 2017 Teknoda tips - Tecnologia SAP Netweaver - IBM AS400 - System i - iSeries. Todos los derechos reservados.