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.
- 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.
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.
3. Ejecutar el comando CPYFRMIMPF con los siguientes parámetros:
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.
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.
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.
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 - IBM i" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes IBM i - AS/400. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. NS iTech - Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |