Error en cantidad datos censales migrados

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)

Hola Alejandro! gracias por tu respuesta, no veo cambios en el script que me pasaste con el que esta actualmente en en la versión 3.19.1, cambio algo ? Por otro lado el error que me da es en datos censales pos controles 01 y vos me pasaste del 02, te lo comento por si te confundiste.
Te comparto las salidas obtenidas de las consultas que me enviaste:

  1. Cantidad en G2
    8366

8766

8366

  1. Cantidad en G3
    37712 37712

  2. Registros ya existentes en la base de G3
    29333

Por lo que entiendo se resta lo que hay en g3 menos lo que había en g3 y se compara con lo que habia en g2 no?
En cuyo caso me da

g3 = 37712 - 29333 = 8379
g2 = 8366

Lo cual es la salida que me da el migrador actualmente con el respectivo error por las diferencias

Puede ser que en G2, haya registros de personas que no tienen datos censales:

¿Que retorna esta query?

SELECT COUNT(*) FROM mig.sga_personas WHERE NOT EXISTS (SELECT 1 FROM mig.sga_datos_censales as dc WHERE dc.persona = mig.sga_personas.persona)

Tuve que cambiar la columna persona de la consulta que me enviaste por “nro_inscripcion” porque en g2 no esta esa columna en la tabla mig.sga_personas


SELECT COUNT(*) 
FROM mig.sga_personas 
WHERE NOT EXISTS (
    SELECT 1 
    FROM mig.sga_datos_censales as dc
    WHERE dc.nro_inscripcion = mig.sga_personas.nro_inscripcion
)

La consulta devolvio 0

Adjunto los archivos de controles de migracion de datos censales, son los ultimos publicados. Version 3.20.x
Estan en la carpeta \02_Modulos\20_Datos Censales\03_Pos_Controles
Por favor proba con estos y envianos el resultado.


01_fx_pos_ctrl_datos_censales.sql (5.42 KB)

02_fx_pos_ctrl_datos_censales.sql (4.44 KB)

Hola Alejandro,luego de correr los scripts que me pasaste se mantienen las mismas salidas que en la respuesta #18

Por favor corre estas querys… fijate si alguna devuelve datos, en particular la primera porque es la que veremos si hay personas con registro de datos censales que no estan en Guarani 2. Es raro porque no se podrian inventar datos censales. Seguramente esta mal la query en el pos-control

-- Query 1. Datos censales de personas en G3 que no estan en G2
SELECT mp.unidad_academica, mp.nro_inscripcion
  FROM mig._cnv_pk_personas as mp
  JOIN mdp_personas as p ON p.persona = mp.persona 
  JOIN mdp_datos_censales as dc ON dc.persona = p.persona
EXCEPT
SELECT unidad_academica, nro_inscripcion
  FROM mig.sga_datos_censales;

-- Query 2. Datos censales de personas en G2 que no existen en G3.
SELECT DISTINCT unidad_academica, nro_inscripcion
  FROM mig.sga_datos_censales
EXCEPT  
SELECT mp.unidad_academica, mp.nro_inscripcion
  FROM mig._cnv_pk_personas as mp
  JOIN mdp_personas as p ON p.persona = mp.persona 
  JOIN mdp_datos_censales as dc ON dc.persona = p.persona;

Hola Alejandro, perdón por la tardanza, ninguna de las dos consultas me devolvió resultados.
Es raro la verdad, pero si, no creo que el migrador invente datos, debe ser un problema de como se están controlado los post controles