Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días, necesito conseguir lo siguiente:
Tabla_1 - Movimientos Tabla_2 - Reclasificaciones
id_objeto, nombre, caracteristica_a, caracteristica_b id_objeto, caracteristica_a, caracteristica_b
1 objeto1 verde grande 1 verde mediano
2 objeto2 verde mediano 3 rojo grande
3 objeto3 rojo pequeño
quisiera unir estas 2 tablas para obtener el siguiente resultado:
Tabla_3 Movimientos Reclasificados
id_objeto, nombre, caracteristica_a , caracteristica_b
1 objeto1 verde mediano --> como lo encuentro en tabla2 muevo todos sus valores
2 objeto2 verde mediano --> como NO lo encuentro en tabla2 mantengo valores tabla1
3 objeto3 rojo grande -->como lo encuentro en tabla2 muevo todos sus valores.
muchas gracias
correcto, he reducido bastante el tiempo de carga
Hola,
Hay un foro dedicado para consultas en español: https://community.qlik.com/t5/Espa%C3%B1ol/gh-p/spanish-group
Para hacer esto podrías usar Tabla_2 como una tabla de mapeo:
mapReclasificaciones:
Mapping LOAD
id_objeto &'_'& caracteristica_a, // Se unen los campos en una clave
caracteristica_b
Inline [
id_objeto, caracteristica_a, caracteristica_b
1, verde, mediano
3, rojo, grande
];
Y usar la tabla de mapeo al cargar los datos de Movimientos, si encuentra la clave pondrá el valor correspondiente al mapeo, si no cogerá el valor del 3er parámetro.
MovimientosReclasificados:
LOAD
id_objeto,
nombre,
caracteristica_a,
ApplyMap(mapReclasificaciones', id_objeto &'_'& caracteristica_a, caracteristica_b) as caracteristica_b
Resident Movimientos;
Saludos.
Muchas Gracias Ruben.
Si, eso es como lo estoy haciendo ahora, pero son muchas características y muchos registros (millones) y le cuesta un buen rato.
y estaba buscando otra forma, con joins, de que fuera mas rápido el proceso, pero he intentado varias estrategias y no acabo de conseguirlo con ningúna.
Para acelerar el proceso podría ser cargando usando exists() para primero cargar los que haya que modificaar y luego los que no de forma optimizada, para esto faltaría confirmar si id_objeto es una clave única.
La idea sería:
// Carga tabla mapeo
...
// Carga campo con los id_objeto reclasificado
chkid_objeto:
LOAD id_objeto from [origenreclasificaciones]
// Carga filas a reclasificar
tmpMovimientosReclasificar:
LOAD * from [qvd] where exists(id_objeto);
DROP table chkid_objeto;
// Aplica el mapping sobre la tabla cargada del paso anterior.
MovimientosReclasificados:
LOAD id_objeto, caracteristica_a ,applymap... as caracteristica_b Resident tmpMovimientosReclasificar;
DROP Table tmpMovimientosReclasificar;
// Añade el resto de filas a la tabla de antes
Concatenate (MovimientosReclasificados)
LOAD id_objeto, caracteristica_a, caracteristica_b from [qvd] where not exists(id_objeto);
La otra opción para acelerar las cargas es buscar la forma de hacer cargas incrementales para no tener que procesar todos los datos con cada carga.
Si, puede ser buena idea, lo preparare a ver si se gana tiempo.
correcto, he reducido bastante el tiempo de carga