|
Resumen ejecutivo
e Introducción
El mandato 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 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 CPYFRMIMPF
puede tomar archivos ASCII del Integrated File System ( Ver Tip
nro 24 - 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 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 ( Ver Tip nro 13
- 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, esto es extremadamente rápido y simple. Los tiempos
de ejecución del 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 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 mandato 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:

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.
|
|