Error en cantidad datos censales migrados

Hola
Estamos haciendo pruebas de migración de G2 a G3.20.
Estoy migrando una segunda unidad académica, sobre una base que ya cuenta con los datos de otra.

Los postcontroles del módulo 20_Datos Censales da los siguientes errores.

[tr]
[td]tabla [/td][td]resultado [/td][td]cant_g2 [/td][td]cant_g3[/td]
[/tr][tr]
[td]mdp_datos_censales [/td][td]ERROR: la Cantidad de datos_censales no coinciden… [/td][td]9.018,00 [/td][td]9.019,00[/td]
[/tr][tr]
[td]mdp_datos_personales [/td][td]ERROR: la Cantidad de datos_personales no coinciden… [/td][td]9.018,00 [/td][td]9.020,00[/td]
[/tr][tr]
[td]mdp_datos_actividades [/td][td]ERROR: la Cantidad de datos_actividades no coinciden… [/td][td]9.018,00 [/td][td]9.020,00[/td]
[/tr][tr]
[td]mdp_datos_economicos [/td][td]ERROR: la Cantidad de datos_economicos no coinciden… [/td][td]9.018,00 [/td][td]9.020,00[/td]
[/tr]

Los precontroles no emitieron error o advertencia alguna.
El error sólo se da en posctrl_Datos_Censales01.
posctrl_Datos_Censales02 está todo OK.

No logro identificar cuáles son los casos para tratar de analizar qué es lo que puede estar sucediendo.
Podrían darme una mano?
Gracias!!

Iris

¿Que valores retornan estas tres consultas?

SELECT count(*)  FROM mdp_datos_censales; -- Esta es la consulta actual del pos-control

SELECT count(DISTINCT persona)  FROM mdp_datos_censales;

SELECT filas FROM mig._tablas_g3 where tabla='mdp_datos_censales';

¿Y estas tres relacionadas a la tabla de datos personales?

SELECT count(*) 
 FROM mdp_datos_personales  as mdp 
 JOIN mdp_datos_censales as mdc ON mdp.dato_censal = mdc.dato_censal;  -- esta es la consulta actual.

SELECT count(*) 
 FROM mdp_datos_personales  as mdp 
    JOIN mdp_datos_censales as mdc ON mdp.dato_censal = mdc.dato_censal
    JOIN mig._cnv_pk_personas as mcp ON mcp.persona = mdc.persona 
WHERE  mcp.migrar = 1 
      AND  mcp.migrar_datos_censales = 1;

SELECT filas FROM mig._tablas_g3 where tabla='q_datos_pers_cens';


Hola Alejandro

Estas son las cantidades que me retornan dicha consultas…

SELECT count(*)  FROM mdp_datos_censales; -- Esta es la consulta actual del pos-control

18604

SELECT count(DISTINCT persona)  FROM mdp_datos_censales;

18604

SELECT filas FROM mig._tablas_g3 where tabla='mdp_datos_censales';

9585

SELECT count(*)
 FROM mdp_datos_personales  as mdp
 JOIN mdp_datos_censales as mdc ON mdp.dato_censal = mdc.dato_censal;  -- esta es la consulta actual.

18604

SELECT count(*)
 FROM mdp_datos_personales  as mdp
    JOIN mdp_datos_censales as mdc ON mdp.dato_censal = mdc.dato_censal
    JOIN mig._cnv_pk_personas as mcp ON mcp.persona = mdc.persona
WHERE  mcp.migrar = 1
      AND  mcp.migrar_datos_censales = 1;

9018

SELECT filas FROM mig._tablas_g3 where tabla='q_datos_pers_cens';

9584

Gracias por la ayuda.

Iris

Hola de nuevo

Estuve siguiendo esto un poco más y observo que esta consulta está incluyendo al usuario Toba. (persona = 1 = Toba)

SELECT count(DISTINCT persona)  FROM mdp_datos_censales where persona <> 1;

La consulta anterior retorna 18603.

Con lo cual considero que parte del error es en la cantidad 18604.


SELECT count(*)
FROM mdp_datos_personales  as mdp
JOIN mdp_datos_censales as mdc ON mdp.dato_censal = mdc.dato_censal
where mdc.persona <> 1;

También retorna 18603.

Lo que me queda por identificar aún, es esta diferencia:


SELECT filas FROM mig._tablas_g3 where tabla='mdp_datos_censales';	--9585
SELECT filas FROM mig._tablas_g3 where tabla='q_datos_pers_cens'; 	--9584

Ya que aplicando ese cambio sigo obteniendo esto en los postcontroles del módulo 20_Datos Censales:

[tr]
[td]tabla [/td][td] resultado [/td][td] cant_g2 [/td][td] cant_g3[/td]
[/tr]
[tr]
[td]mdp_datos_personales [/td][td] ERROR: la Cantidad de datos_personales no coinciden… [/td][td] 9.018,00 [/td][td] 9.019,00[/td]
[/tr]
[tr]
[td]mdp_datos_actividades [/td][td] ERROR: la Cantidad de datos_actividades no coinciden… [/td][td] 9.018,00 [/td][td] 9.019,00[/td]
[/tr]
[tr]
[td]mdp_datos_economicos [/td][td] ERROR: la Cantidad de datos_economicos no coinciden… [/td][td] 9.018,00 [/td][td] 9.019,00[/td]
[/tr]

Agradeceré me ayuden a identificar ese caso que genera la diferencia.
Saludos

Iris

Cuanto dan estas dos consultas?

SELECT count(distinct msp.nro_inscripcion)
FROM   mig._cnv_pk_personas mcp, mig.sga_datos_cen_aux2 msp
LEFT JOIN mig.aca_usuarios_ag ag ON ag.unidad_academica = msp.unidad_academica AND  ag.nro_inscripcion = msp.nro_inscripcion
 WHERE mcp.migrar = 1 AND
   mcp.migrar_datos_censales = 1 AND
   mcp.unidad_academica = msp.unidad_academica AND
    mcp.nro_inscripcion = msp.nro_inscripcion;

Y esta misma sin el filtro de migrar los datos censales:

SELECT count(distinct msp.nro_inscripcion) 
FROM   mig._cnv_pk_personas mcp, mig.sga_datos_cen_aux2 msp
LEFT JOIN mig.aca_usuarios_ag ag ON ag.unidad_academica = msp.unidad_academica AND  ag.nro_inscripcion = msp.nro_inscripcion
 WHERE mcp.migrar = 1 AND
--   mcp.migrar_datos_censales = 1 AND
   mcp.unidad_academica = msp.unidad_academica AND
    mcp.nro_inscripcion = msp.nro_inscripcion;

Y estas otras de G3 que valores retornan:

SELECT count(*), count(distinct persona)
  FROM mdp_datos_personales  as mdp 
  JOIN mdp_datos_censales as mdc ON mdp.dato_censal = mdc.dato_censal;

SELECT filas FROM mig._tablas_g3 where tabla='q_datos_pers_cens';

Hola Aljandro

Las 2 primeras consultas dan 9018

Las de G3:

  1. 18604 18604
  2. 9584

Cuál puede ser la diferencia?
Gracias por la ayuda.

Saludos
Iris

Esta diferencia:

SELECT filas FROM mig._tablas_g3 where tabla='mdp_datos_censales';	--9585
SELECT filas FROM mig._tablas_g3 where tabla='q_datos_pers_cens'; 	--9584

Fijate si existe algun registro de dato censal que no se encuentre en la tabla mdp_datos_personales:

SELECT * 
FROM mdp_personas as p
JOIN mdp_datos_censales as dc ON dc.persona = p.persona
WHERE dc.dato_censal IN 
(SELECT dato_censal FROM mdp_datos_censales
EXCEPT 
SELECT dato_censal FROM mdp_datos_personales
)

Hola Alejandro

Fijate si existe algun registro de dato censal que no se encuentre en la tabla mdp_datos_personales:
Esa consulta no devuelve ningún registro....

Esta otra consulta tampoco devuelve ningún registro:


SELECT dato_censal FROM mdp_datos_personales
EXCEPT
SELECT dato_censal FROM mdp_datos_censales;

Pero esta otra si, devuelve 8 registros: ¿es correcto?


SELECT persona	FROM mdp_personas
EXCEPT 
SELECT persona	FROM mdp_datos_censales;

Iris

No es correcto si corresponden a alumnos, fijate si tienen registro en la tabla de alumnos:

select * from sga_alumnos where persona in (persona1, persona2, ..., persona8)

Hola Alejandro

No, esta consulta no devuelve ningún registro:


SELECT * FROM sga_alumnos
WHERE persona IN
	(SELECT persona	FROM mdp_personas
	EXCEPT
	SELECT persona	FROM mdp_datos_censales);

Aún me falta identificar el porqué de la diferencia en los postcontroles del módulo 20_Datos Censales.
Gracias por la orientación que puedan darme.
Saludos

Iris

Esto se da en una 2da/3er/… migracion, no es la primera porque veo que la tabla mig._tablas_g3 tiene registros con lo cual no es la primer migracion.
Puede ser que el registro de persona de “Toba” este dando esta diferencia porque no deberia considerarlo si es la primer migracion, y si considerarlo si es una 2da/3er/… migracion ya que en este caso ese dato del usuario de toba estará contabilizado en la tabla mig._tablas_g3 que es la que se registran datos antes de comenzar a migrar, datos que ya estan en la base de G3 por migracion previa.

Adjunto el archivo de controles.
Fiajte de crear la funcion en la base, reemplaza

SET search_path = ${pg_esquema};

por

SET search_path = negocio;

Luego crea la funcion y ejecutala y veamos que devuelve:

select * from mig.sp_pos_ctrl_datos_censales();

2


01_fx_pos_ctrl_datos_censales.sql (5.42 KB)

Hola Alejandro
Si, como te explicaba, es una 2da base la que estoy migrando.
Ya había tenido en cuenta no considerar el usuario toba.
Pero así y todo sigue habiendo la diferencia de 1 dato censal.

Esto es lo que retorna la ejecución de la función que me pasaste:

[tr]
[td]tabla[/td][td]resultado[/td][td]cant_g2[/td][td]cant_g3[/td]
[/tr][tr]
[td]mdp_datos_censales[/td][td]OK: Cantidad de datos_censales…[/td][td]9.018[/td][td]9.018[/td]
[/tr][tr]
[td]mdp_datos_personales[/td][td]ERROR: la Cantidad de datos_personales no coinciden…[/td][td]9.018[/td][td]9.019[/td]
[/tr][tr]
[td]mdp_datos_actividades[/td][td]ERROR: la Cantidad de datos_actividades no coinciden…[/td][td]9.018[/td][td]9.019[/td]
[/tr][tr]
[td]mdp_datos_economicos[/td][td]ERROR: la Cantidad de datos_economicos no coinciden…[/td][td]9.018[/td][td]9.019[/td]
[/tr]

Sigo sin identificar a cuál corresponde y el por qué.
Gracias por la paciencia!!
Saludos

Iris

Veamos que persona tiene dos registros en mdp_datos_personales, mdp_datos_economicos y mdp_datos_actividades


SELECT dc.persona, count(*)
    FROM mdp_datos_censales as dc 
    JOIN mdp_datos_personales as dp ON dp.dato_censal = dc.dato_censal
GROUP BY dc.persona
HAVING COUNT(*) > 1;

SELECT dc.persona, count(*)
    FROM mdp_datos_censales as dc 
    JOIN mdp_datos_actividades as da ON da.dato_censal = dc.dato_censal
GROUP BY dc.persona
HAVING COUNT(*) > 1;

SELECT dc.persona, count(*)
    FROM mdp_datos_censales as dc 
    JOIN mdp_datos_economicos as de ON de.dato_censal = dc.dato_censal
GROUP BY dc.persona
HAVING COUNT(*) > 1;

Hola Alejandro

Ninguna de las consultas devuelve algún registro… Todos los resultados son vacíos…
Estarán mal las cantidades iniciales en mig._tablas_g3?

Estoy por hacer una nueva prueba de migración. Querés que verifique algo antes de comenzar a migrar la 2da base?

Gracias!

Iris

Y estas consultas que devuelven?

SELECT dc.dato_censal, count(*)
    FROM mdp_datos_censales as dc
    JOIN mdp_datos_personales as dp ON dp.dato_censal = dc.dato_censal
GROUP BY dc.dato_censal
HAVING COUNT(*) > 1;

SELECT dc.dato_censal, count(*)
    FROM mdp_datos_censales as dc
    JOIN mdp_datos_actividades as da ON da.dato_censal = dc.dato_censal
GROUP BY dc.dato_censal
HAVING COUNT(*) > 1;

SELECT dc.dato_censal, count(*)
    FROM mdp_datos_censales as dc
    JOIN mdp_datos_economicos as de ON de.dato_censal = dc.dato_censal
GROUP BY dc.dato_censal
HAVING COUNT(*) > 1;

Puede ser que un dato censal este dos veces para una misma persona

Hola Alejandro

Sigo obteniendo todos resultados vacíos…
Es raro…
Alguna otra idea?
Gracias!

Iris

Si, creo que esta mal el insert que carga datos en la tabla mig._tablas_g3
Archivo \02_Modulos\01_TablasConversionPK\02_app_migracion.sql
Adjunto este archivo. Reemplazalo y vovlve a migrar hasta el modulo de datos censales.


02_app_migracion.sql (11.8 KB)

Hola Alajandro!!
Si, era eso!!!
Ahora todos los registros coinciden!!
9.018,00
Gracias por la ayuda!!
Saludos

Iris

Hola buen día!

Tengo un problema similar al mencionado en este post pero en mi caso son varios registros.

Pos_Controles_Datos_Censales01
mdp_datos_censales ERROR: la Cantidad de datos_censales no coinciden… 8.366,00 8.379,00
mdp_datos_personales ERROR: la Cantidad de datos_personales no coinciden… 8.366,00 8.379,00
mdp_datos_actividades ERROR: la Cantidad de datos_actividades no coinciden… 8.366,00 8.379,00
mdp_datos_economicos ERROR: la Cantidad de datos_economicos no coinciden… 8.366,00 8.379,00

Pos_Controles_Personas
mdp_personas_contactos ERROR: Cantidad de personas contactos no coinciden… 15.379,00 15.194,00

En nuestro caso nos encontramos en la versión 3.19.1, y ya tenemos 2 facultades en producción.

Como podría identificar los registros que faltan ?

Gracias!

En el primer caso, da que hay mas datos censales migrados que los que habia en G2.
Este script fue actualizado este año, seguramente no tienen la ultima version ya que estan con los scripts de la vesion 3.19.
Adjunto el script de la ultima version, vean de correrlo nuevamente.

1) Cantidad en G2
SELECT count(distinct msp.nro_inscripcion) 
 FROM mig._cnv_pk_personas as mcp, 
  JOIN mig.sga_datos_censales as msp ON mcp.unidad_academica = msp.unidad_academica AND mcp.nro_inscripcion = msp.nro_inscripcion
 WHERE mcp.migrar = 1
       AND mcp.migrar_datos_censales = 1; 

2) 
SELECT count(distinct msp.nro_inscripcion)  FROM mig.sga_datos_censales;

3) 
SELECT count(distinct msp.nro_inscripcion) 
 FROM mig._cnv_pk_personas as mcp, 
  JOIN mig.sga_datos_censales as msp ON mcp.unidad_academica = msp.unidad_academica AND mcp.nro_inscripcion = msp.nro_inscripcion
 WHERE mcp.migrar = 1; 

	   	
4) Cantidad en G3
SELECT count(*) , count(distinct persona)   FROM mdp_datos_censales  WHERE persona <> 1;

5) Registros ya existentes en la base de G3
SELECT filas  FROM mig._tablas_g3 where tabla = 'mdp_datos_censales';

02_fx_pos_ctrl_datos_censales.sql (4.44 KB)