Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
DAMARQLIK
Contributor III
Contributor III

Unir 2 tablas sustituyendo valores de la segunda tabla cuando existan

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

Labels (4)
1 Solution

Accepted Solutions
DAMARQLIK
Contributor III
Contributor III
Author

correcto, he reducido bastante el tiempo de carga

View solution in original post

5 Replies
rubenmarin

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.

DAMARQLIK
Contributor III
Contributor III
Author

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.

 

rubenmarin

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.

DAMARQLIK
Contributor III
Contributor III
Author

Si, puede ser buena idea, lo preparare a ver si se gana tiempo. 

DAMARQLIK
Contributor III
Contributor III
Author

correcto, he reducido bastante el tiempo de carga