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:
No encontramos problema al hacer sampling del archivo en OWB, el wizard nos reconoce sin problema las tres columnas.
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.
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.
Ahora hagamos un cambio que generalmente nos sucede en ambientes reales, y es que tengamos la última columna vacía.
Salvamos el archivo y volvemos a hacer el query sobre la tabla externa y vemos que nos arroja un resultado diferente.
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.
Con este cambio, reemplazamos la external table y ejecutamos el mismo query y ya está:
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.