jueves, 30 de octubre de 2008

Carga de archivo plano csv con OWB

En este post compartimos una solución a un problema que surge al intentar cargar archivos planos con Oracle Warehouse Builder usando external table.

Si intentamos cargar un archivo simple con el formato:

image

No encontramos problema al hacer sampling del archivo en OWB, el wizard nos reconoce sin problema las tres columnas.

image

Luego creamos el external table sobre el archivo importado, también sin problema. Configuramos los archivos de Log para que sepamos qué sucede cuando SQL Loader hace la carga del archivo.

image

Al hacer deploy de la external table, ya deberíamos poder hacer un query sobre la tabla externa para visualizar los datos que contiene el archivo y efectivamente lo podemos hacer.

image

Ahora hagamos un cambio que generalmente nos sucede en ambientes reales, y es que tengamos la última columna vacía.

image

Salvamos el archivo y volvemos a hacer el query sobre la tabla externa y vemos que nos arroja un resultado diferente.

image

Revisamos el log de la tabla externa y vemos el mensaje:

KUP-04021: field formatting error for field COLUMNA3
KUP-04023: field start is after end of record
KUP-04101: record 2 rejected in file E:\pruebas\prueba1.csv
KUP-04021: field formatting error for field COLUMNA3
KUP-04023: field start is after end of record
KUP-04101: record 3 rejected in file E:\pruebas\prueba1.csv

Probamos varias soluciones temporales que funcionaron como colocar un separador de columna al final del archivo, colocar una columna no vacía al final del archivo, entre otras.

Sin embargo la solución afortunadamente es mucho más sencilla y es marcar el check de "Load Nulls when Missing Values" en la ventana de configuración del external table.

image

Con este cambio, reemplazamos la external table y ejecutamos el mismo query y ya está:

image

Nos trae todos los registros aunque la última columna venga vacía.

Saludos.

Nota: Post aportado en conjunto por Pedro Gómez y Darío Valderrama, sales consultants de Oracle Direct.