En algunas ocasiones es necesario crear una tabla vacía,
sólo con la definición de los campos, para que un proceso posterior introduzca
los registros.
El caso más común, aunque no el único, es que un proceso
que se va a ejecutar n-veces introduzca datos en cada ciclo. Si cada ciclo
introduce datos sólo en una tabla, entonces basta con nombrar la tabla en cada
iteración y el CONCATENATE implícito
de Qlik irá introduciendo los datos correctamente.
Ejemplo:
FOR each File in filelist(urlQVD)
Nombre_Tabla:
LOAD
* From [$(File)] (qvd);
NEXT File
En cambio, si hay más de una tabla, entonces no podemos
hacerlo así porque intentaría concatenar los datos en la última tabla cargada.
La única forma sería nombrando la tabla en el CONCATENATE,
pero al no existir previamente, obtendríamos un error. El siguiente ejemplo no funcionaría:
FOR each
File in
filelist(urlQVD)
Concatenate(Nombre_Tabla1);
LOAD * From [$(File)] (qvd);
Concatenate(Nombre_Tabla2);
LOAD * From [$(File)] (qvd);
NEXT File
En este caso hay que crear previamente una tabla vacía y lo podemos hacer de 4 formas:
1.- Insertando una línea en blanco inventada:
Nombre_Tabla:
LOAD
‘ ‘ AS campo1,
‘ ‘ AS campo2,
‘ ‘ AS campo3
AUTOGENERATE(0);
Mucho ojo porque si ponemos AUTOGENERATE(1) creará una tabla con una fila en blanco que quizá luego nos de problemas. Con AUTOGENERATE(0) crea sólo la estructura de las tablas, sin ninguna fila.
2.- Con un Inline
Nombre_Tabla:
LOAD * INLINE [campo1, campo2, campo3];
3.- Con una sentencia SQL que no devuelva ninguna línea.
(Observese la condición imposible WHERE 2=1)
Nombre_Tabla:
LOAD *;
SQL SELECT `campo1`,
`campo2`
FROM nombre_tabla
WHERE 2=1
;
El problema de hacerlo de cualquiera de estas tres formas forma es que se debe conocer de antemano los nombres de todos los campos que se van a cargar posteriormente. Si por algún motivo, pasado un tiempo, se decide añadir algún campo más en el LOAD que carga los datos, estamos obligados a ir a esta declaración y añadir el campo exactamente igual. Cualquier error en el nombre (mayúsculas por minúsculas... etc) provocará que el campo este vacío en el modelo de datos, lo que nos dará un montón de quebraderos de cabeza intentando descubrir por qué está vacío.
Existe una cuarta opción que soluciona esto:
4.- Creando una tabla con una sola columna vacía que después se borrará
NOCONCATENATE
Nombre_Tabla:
LOAD ‘‘ AS dummy
AUTOGENERATE(0);
.
<mi script>.
.
DROP FIELD dummy;
NOCONCATENATE es obligatorio porque si se crean varias tablas seguidas con este sistema, las concatenaría todas en una sola.
Esto crea una tabla con una sola columna, que no nos sirve para nada, y sin ninguna fila¨.
Cuando después se añadan los datos verdaderos, cada fila añadida tendrá al principio esta columna "dummy" vacía.
Al final del script no olvidar borrar esta columna, porque si no se crearán un montón de tablas de síntesis.
Si alguna tabla creada por este método no se ha rellenado, cuando se borre el campo "dummy" se borrará también la tabla.
Nota: Recordar borrar el campo antes de exportar la tabla!!!
No hay comentarios:
Publicar un comentario