¿Como bajarse la lista de Tascón por Internet? (III)
Nada. Mi sueño mojado de trabajar directamente con los archivos .dbf no se va a dar, ya que los manejadores de JDBC que consegui son totalmente inútiles. Pero por otro lado les voy a mostrar como convertir los datos de el formato DBF a CSV y de allí los montamos en cualquier base de datos.
Lo que si conseguí fue una serie de clases en Java que (aunque con una funcionalidad muy limitada) me permitieron exportar los datos de cada archivo DBF a CVS:
Bueno, ya está listo. Ahora ya podemos desempolvar el SQL un poco y podemos empezar a preguntar cosas sobre la lista de Tascón. Haciendo un poco de ingenieria reversa, encontramos que estas son las tablas:
Ya casi se me olvidaba, los indices usados en las consultas; Estos son algunos de los indices creados para agilizar las búsquedas, tal y como están en los archivos DBF:
¿Que viene después? Bueno, estoy cargando los datos, limpiandolos un poco antes de empezar a correr algunos comandos en SQL. El código (SQL y Java) lo pondré en SF.net dentro de poco, más no los datos.
Pero, por hacerlo a las patadas resulta que el programa nunca termina; Es decir, corre pero tar varias horas en escribir los contenidos de la base de datos principal. No entiendo, así que por ahora lo estoy depurando a ver en donde estoy gastando tiempo (tengo varias ideas, pero prefiero que una herramienta me muestre el desastre en toda su extensión por ahora):
Buscar en Technorati: Luis Tascon
Lo que si conseguí fue una serie de clases en Java que (aunque con una funcionalidad muy limitada) me permitieron exportar los datos de cada archivo DBF a CVS:
java -cp /home/josevnz/sf/kodegeek/eclipse:/home/josevnz/sf/kodegeek/lib/javadbf-0.4.0.jar:. com.kodegeek.blog.santaines.ExportSantaInesTables /home/josevnz/.wine/drive_c/MaiSanta/PATRIOT.DBF > /home/josevnz/patriota.txtEn el proceso de exportación me di cuenta que la carga de datos fué hecha quizas de manera apresurada, ya que todos los campos de tipo de cadena de caracteres tenian espacios en blanco. Hubo tambien un intento de desnormalización ya que los datos de los fallecidos y votantes normales están divididos en dos tablas, pero las columnas son exactamente iguales (problemas de desempeño quizas teniendo ambos tipos juntos). Todo esto me hace pensar que los archivos DBF que vienen con la aplicación no son más que un vaciado de otra base de datos que existe en algún lado. Por ejemplo, si revizan el sitio de el diputado Luis Tascón, veran que utiliza PHP y Apache (cambió de IIS a Apache en el 2003). Dudo que detrás de esa configuración el haya tenido una base de datos Microsoft, así que quizas la base de datos original fué MySQL o quizas PostgreSQL. Eso nunca se sabrá :)
Bueno, ya está listo. Ahora ya podemos desempolvar el SQL un poco y podemos empezar a preguntar cosas sobre la lista de Tascón. Haciendo un poco de ingenieria reversa, encontramos que estas son las tablas:
-- This tables are using PostgreSQL specific syntaxComo puede ver, la cantidad de información es bastante detallada. Ninguna de las tablas tenía una clave compuesta. En vez de eso, utilizaron una secuencia numérica, en una columna la cual no pude exportar llamada '_row_id'. Como todo buen conjunto de datos, mucha información estaba incompleta, con formato pobre (nada que ver con la aplicación, es como los datos vienen en el mundo real).
-- To create the database, just to: createdb -U postgres santaines
-- And then load the tables: \copy centros from 'dir/file.txt' with delimiter ;
-- List of voting centers
CREATE TABLE CENTROS (
CENTRO INTEGER,
NOMBRE VARCHAR(52),
DIRECCION VARCHAR(150),
ESTADO VARCHAR(50),
MUNICIPIO VARCHAR(40),
PARROQUIA VARCHAR(50),
COD_EDO INTEGER,
COD_MUN INTEGER,
COD_PAR INTEGER,
CLAVE VARCHAR(7),
VOTANTES BIGINT,
NO INTEGER,
SI INTEGER,
EXTRANGE INTEGER,
NNO NUMERIC(6,2),
NSI NUMERIC(6,2)
);
-- Information about deceseaced people registered for voting (aprox. 2 Million)
-- Denormalized on purpose, it has the same fields as the 'REP' tables
CREATE TABLE FALLECID (
CEDULA BIGINT,
NACIONALI VARCHAR(10),
NOMBRE VARCHAR(41),
CENTRO INTEGER,
DIRECCION VARCHAR(151),
FECHA_NAC DATE,
OPOSITOR SMALLINT,
TELEFONO VARCHAR(13),
ABSTENCION BOOLEAN,
FIRMA_VALI BOOLEAN,
FIRMA_RECH BOOLEAN,
FALLECIDO BOOLEAN,
MISION_PAT BOOLEAN,
MISION_RIB BOOLEAN,
MISION_VUE BOOLEAN,
CONTRA_OPO BOOLEAN
);
-- List of goverment supporters. Yeah, a table with one column, poor design...
CREATE TABLE PATRIOT (
CEDULA BIGINT PRIMARY KEY
);
-- Information about voters. It doesn't include deceased people.
-- Aprox 10 million. Denormalizaed on purpose?
CREATE TABLE REP (
CEDULA BIGINT,
NACIONALI VARCHAR(10),
NOMBRE VARCHAR(41),
CENTRO INTEGER,
DIRECCION VARCHAR(150),
FECHA_NAC DATE,
OPOSITOR SMALLINT,
TELEFONO VARCHAR(13),
ABSTENCION BOOLEAN,
FIRMA_VALI BOOLEAN,
FIRMA_RECH BOOLEAN,
FALLECIDO BOOLEAN,
MISION_PAT BOOLEAN,
MISION_RIB BOOLEAN,
MISION_VUE BOOLEAN,
CONTRA_OPO BOOLEAN
);
Ya casi se me olvidaba, los indices usados en las consultas; Estos son algunos de los indices creados para agilizar las búsquedas, tal y como están en los archivos DBF:
CREATE INDEX CENTRO_IDX ON CENTROS(CENTRO);
CREATE INDEX REGION_IDX ON CENTROS(ESTADO, MUNICIPIO, PARROQUIA);
CREATE INDEX FALLECIDO_IDX ON FALLECID(CEDULA);
CREATE INDEX PATRIOT_IDX ON PATRIOT(CEDULA);
CREATE INDEX REP_IDX ON REP(CEDULA);
CREATE INDEX REPCENTRO_IDX ON REP(CENTRO);
¿Que viene después? Bueno, estoy cargando los datos, limpiandolos un poco antes de empezar a correr algunos comandos en SQL. El código (SQL y Java) lo pondré en SF.net dentro de poco, más no los datos.
Pero, por hacerlo a las patadas resulta que el programa nunca termina; Es decir, corre pero tar varias horas en escribir los contenidos de la base de datos principal. No entiendo, así que por ahora lo estoy depurando a ver en donde estoy gastando tiempo (tengo varias ideas, pero prefiero que una herramienta me muestre el desastre en toda su extensión por ahora):
java -Xrunhprof:cpu=samples,heap=all,format=a,file=santaines-profile.log -cp /home/josevnz/sf/kodegeek/eclipse:/home/josevnz/sf/kodegeek/lib/javadbf-0.4.0.jar:. com.kodegeek.blog.santaines.ExportSantaInesTables /home/josevnz/.wine/drive_c/MaiSanta/repdbf.dbf > $HOME/repdbf.txtEn fin, ya veremos como se mueve esto. Por ahora voy a terminar de exportar los datos.
Buscar en Technorati: Luis Tascon



1 Comentarios:
Creo tienes una confusion en cuanto al nombre del producto que estas analizando: Entiendo que lo que esta circulando es el programa "maisanta" que corresponde a una base datos de todos los votantes, donde se puede obtener informacion como por ejemplo donde voto, si es abtesionista, si paticipa en la misiones, etc y la otra es la celebre lista de Luis Tascon, que se referia al revocatorio.
Hecha la aclaratoria, te digo que estas haciendo un buen analisis y segun los entendidos en de Venezuela en la materia, indudablemente se trata de un buen producto, lastima que sea utilizado con esos fines inconfesables de los afectos al gobierno socialista y comunista (y gerenciado por incapaces intelectuales)
Enlaces a este articulo:
Crear un vínculo
<< Regresar