Una situación así puede acabar con la paciencia de cualquiera. Cada cambio, por mínimo que sea nos obligará a esperar.... esperar... esperar....
¿Cómo evitarlo?
La respuesta es obvia. No cargando todas las filas del modelo. Sólo unas pocas. Las suficientes para probar si el script falla y que los objetos se visualicen correctamente.
Para cargar sólo unas cuantas filas existen 2 estrategias: usando FIRST y SAMPLE.
FIRST n carga las n primeras filas de la tabla
SAMPLE n (donde n está entre 0 y 1) carga n % filas aleatorias., ej: 0,5 carga el 50% (una de cada 2). 0.0001 carga 1 de cada 10.000... etc)
Independientemente de si usamos una estrategia u otra, conviene siempre crear una variable que guarde el nº de filas a cargar. De esta forma nos evitamos comentar todas las sentencias FIRST y SAMPLE en el script cuando no las queramos usar, pudiéndolas dejar descomentadas.
LET vNumFilas= 1000000000; //Un número más grande que el nº máx de registros) en el caso de usar FIRST
LET vNumFilas= 1; // En caso de SAMPLE esto cargará todas las filas.
Basta con modificar sólo el valor de la variable para obtener el nº de filas deseadas en el modelo.
Estrategia con FIRST.
El inconveniente es que no toma un número de registros homogéneo, si no sólo los n primeros registros.
Imaginemos una tabla con 10 millones de facturas. Con toda probabilidad estará ordenada por fecha. Si tomamos sólo las 1.000 primeras facturas es casi seguro que todas corresponderán al mismo mes, por lo que cualquier objeto calendario no se visualizará correctamente porque sólo mostrará ese mes y ese año.
Estrategia con SAMPLE
Nos permite obtener 1.000 registros de fechas variadas de la misma tabla de 10 Millones de facturas. basta con usar SAMPLE 0.0001 para quedarnos con una de cada 10.000.
ejemplo con SAMPLE.
Vamos a suponer que tenemos un modelo con varias tablas. tenemos una tabla de hechos con 15 millones de registros. Queremos cargar sólo 1 de cada 10.000. Del resto de tablas sólo nos interesan los registros que estén relacionados con la tabla de echos, por lo que usaremos un WHERE EXISTS en cada una de ellas.
Para no tener que comentar y descomentar los WHERE EXISTS y el SAMPLE cada vez que lo queramos usar, lo mejor es crear variables.
LET vNumFilasMuestra= 0.0001;
SAMPLE ($(vNumFilasMuestra))
Tabla_A:
LOAD %KeyB, //Campo que une con la tabla B
%KeyC, //Campo que une con la tabla C
campo1, campo2, campo3..... campoN
FROM A; //Sustituir A por una tabla, fichero qvd, excel... etc.
// establecemos una condición para cargar sólo las filas de la tabla B cargadas previamente en en la tabla_A
LET vCondicionWHERE = IF($(vNumFilasMuestra)<1,'WHERE EXISTS(%KeyB)';
Tabla_B:
LOAD %KeyB,
campo_b1, campo_b2, campo_b3..... campo_bN
FROM B //Sustituir B por una tabla, fichero qvd, excel... etc.
$(vCondicionWHERE)
; //La sentencia termina aquí, no después del FROM.
// establecemos una condición para cargar sólo las filas de la tabla C cargadas previamente en en la tabla_A
LET vCondicionWHERE = IF($(vNumFilasMuestra)<1,'WHERE EXISTS(%KeyC, IF(Zona=3, '& CHR(39)& 'Madrid' & CHR(39) & ', Zona)& ' & CHR(39) & '-' & CHR(39) & ' & Provincia)');
Tabla_C:
LOAD IF(Zona=3, 'Madrid', Zona)&'-'& Provincia AS %KeyC,
campo_c1, campo_c2, campo_c3..... campo_cN
FROM C //Sustituir C por una tabla, fichero qvd, excel... etc.
$(vCondicionWHERE)
; //La sentencia termina aquí, no después del FROM.
Observad que el campo clave %KeyC en la tabla C es un campo compuesto por otros 2, Zona y Provincia. Pero además se usa una condición para formar el campo.
La correspondiente condición WHERE sería:
WHERE EXISTS (KeyC, IF(Zona=3, 'Madrid', Zona) & '-' & Provincia)
Pero eso no se puede asignar así, tal cual, en una variable porque las comillas simples se interpretarían como el final de la cadena de texto y provocaría un error.
La forma de conseguirlo es sutituir en la variable vCondicionWHERE todas las comillas simples por su correspondiente código ASCII y tener mucho cuidado de dividir toda la cadena WHERE en partes más pequeñas que se van concatenando con '&'.
No hay comentarios:
Publicar un comentario