14 de mayo de 2012

Ficheros de texto a bases de datos SQL. Un caso práctico

Nuestra tarea es seleccionar algunas de esas columnas que se pueden encontrar separadas por un "pipe" para crear una tabla en una base de datos tipo SQL (SQLite, MySQL, Postgres, etc.) Es de suponer que cuando dicho fichero* tiene miles de registros la tarea se complica. Para ello vamos a utilizar tres herramientas super potentes: Awk, nl y SQLiteManager, las cuales son muy fáciles de usar.

1. Antecedentes

Tenemos creada nuestra tabla en la base de datos. Primero vamos a examinar cuáles columnas del fichero de texto corresponden con los campos de nuestra tabla. A cada uno de esos campos lo vamos a asociar con un número. Por ejemplo, si nuestro fichero tiene 20 columnas y estas están separadas por un pipe (|). En realidad se pueden separar por otro FS (field separator) como una coma, o un espacio. En este ejemplo, utilizamos el pipe. y a nosotros solo nos interesan las columnas 1, 2, 3, 4, 5, 7, 8, 10, 11 y 14 la selección sería:

$1 "," $2 "," $3 "," $4 "," $5 "," $7 "," $8 "," $10 "," $11 "," $14. 

2. Just Testing

Hagamos una prueba: Abrimos la terminal y escribimos el comando:

awk -F"|" '{ print $1 "," $2 "," $3 "," $4 "," $5 "," $7 "," $8 "," $10 "," $11 "," $14 }' foo.txt

Aquí notamos que el separador de campos, Field Separator (FS), es un pipe; enseguida es necesario abrir unas comillas simples y dentro un par de llaves que es donde insertaremos la acción a ejecutar. Dentro de las llaves le damos un "print" a las columnas a imprimir las cuales irán separadas por unas comillas y dentro unas comas. Fuera de las comillas simples, el siguiente argumento del comando awk es el fichero de texto que deseamos transformar. 

OJO: Antes de darle "enter" es necesario considerar el tamaño del fichero. Si es de varios MB sería conveniente tener una versión reducida para ir experimentando con las salidas generadas y verificar lo que realmente requerimos.

3. La papa

Una vez que ya tenemos el resultado esperado, simplemente rederigimos la salida del comando: al fichero correspondiente:

awk -F"|" '{ print $1 "," $2 "," $3 "," $4 "," $5 "," $7 "," $8 "," $10 "," $11 "," $14 }' foo.txt > foo.csv

Ademas hay que señalar que nuestra tabla va indexada y el fichero de texto original no incluye ningún campo del tipo id... Estelo vamos a agregar con nl:

nl -s, foo.csv > foo2.csv

A continuación vamos a crear una base de datos en sqlite3, luego crearemos la tabla correspondiente y posteriormente la poblaremos con el contenido de "foo2.csv"

a) Crear db: sqlite3 codigos_postales.db

b) Crear la tabla con un script SQL: 

sqlite> .read createTable.sql

sqlite> .table <- Verificamos la tabla "foo" recién creada

4. SQLiteManager

Hasta ahora únicamente hemos trabajado con la terminal. Llego la hora de abrir el Firefox e instalarle un plugin super-recomendado: SQLiteManager (Así como hay un phpMyAdmin para MySQL, hay un SQLiteManager para el SQLite Instálenlo... no se arrepentirán ;-)

SQLite Manager-Plugin del Firefox

Desde ahí haremos la importación de nuestro csv y poblaremos la tabla. En la imagen se presenta la tabla cp en la base de datos códigos, también podremos hacer queries y otras operaciones.

Con el Asistente de importación la tarea se facilita aún más:

Asistente de importación del SQLite Manager

Y listo, unas cuantas consultas:

Un query de prueba

5. Importación de bases de datos

Un último comentario: Para MySQL hay un script en Bash, mysql2sqlite.sh,que permite la importación de una base de datos de MySQL a SQLite el cual hace uso extensivo del Awk para lograr la importación. Un ejemplo de uso sería:

./mysql2sqlite.sh -u root -p'tupasswd' foo | sqlite3 database.sqlite

Aunque el ejemplo está hecho en SQLite, la importación a otros RDBM como MySQL es casi igual de fácil. Se pueden utilizar herramientas como el phpMyAdmin o algunos otras utilerías. Es el mismo caso para PostgreSQL u Oracle. 

Notas

*Por el momento no vamos a tratar hojas de cálculo Excel. Eso lo vere en un post  de cómo utilizar módulos, como el Spreadsheet::ParseExcel en Perl para crear scripts que nos permitan la conversión xls->csv. 

Dónde leer más de esto:

IBM developerWorks

LinuxJournal

Awk Guide <- En particular este es una de los mejores y más completas guías para el Awk

SQLite Guía breve <- Breve guía de opciones para la línea de comandos de sqlite3 

SQLite Manager-Plugin del Firefox <- SQLite Manager Excelente plugin para el Firefox y que permite importar ficheros csv con múltiples formatos

https://github.com/lazierthanthou <- Repo del desarrollador de SQLiteManger. 

13 de mayo de 2012

Y lo mandaron hasta al baño a esconderse

Recopilación de los vídeos de EPN en la Ibero. Muy bueno el de Hitler también:

En este video se muestra como EPN termino por encender aún más los ánimos:

Este es como una "recopilación"
http://youtu.be/xlqS1abNCkw

En este video deberías de ver su cara:
http://youtu.be/yMxzGaXq06E (checa el minuto1:04)….. "Y allá afuera hay salidas para salir"

Nuevamente uno de Hitler:

Un poco de humor:
Esto viene del Proceso:

Ante el desconocimiento del término por parte del candidato presidencial, quien es abogado de profesión, el alumno explicó que anomia es un estado que surge cuando las reglas sociales se han degradado o se han eliminado y ya no son respetadas por una comunidad.

La ignorancia de Peña Nieto respecto del término provocó severas críticas y burlas por parte de los tuiteros.

@Mexico_Chingon: Jajaja!! Le preguntan en la Ibero sobre las Anomias ? Dice epn que si no son las de Guanajuato? #EPNlaIberoNOtequiere

@Patriciomonero: "Anomia. Circunstancias que permiten que, en un país en el que las leyes no se aplican, hasta un delincuente pueda ser candidato".

@xjesus: "Que el público común no sepa que es 'anomia' es pasable, que un licenciado en Derecho como EPN no sepa es para quitarle el título", opinaron.

La salida del candidato priista del campus universitario no fue mejor de lo que ya había aguantado a los estudiantes de la Ibero, pues quedó atrapado en un baño de la institución porque una turba de alumnos inconformes lo siguió.


28 de diciembre de 2011

Capítulos de la Serie Cosmos de Carl Sagan (Español)


Esta es una de mis series favoritas. Desde acá va la colección de todos los enlaces a los capítulos que conforman esta excepcional obra de difusión y cultura. Espero disfruten de esta recopilación


COSMOS-CARL SAGAN


Capítulo 1: En la Orilla del Oceano Cósmico
1.1 Parte 1
1.2 Parte 2
1.3 Parte 3

Capítulo 2: Una voz en la fuga cósmica
2.1 Parte 1
2.2 Parte 2
2.3 Parte 3

Capítulo 3: La armonía de los mundos
3.1 Parte 1
3.2 Parte 2
3.3 Parte 3

Capítulo 4: Cielo e Infierno
4.1 Parte 1
4.2 Parte 2
4.3 Parte 3

Capítulo 5: Blues para un Planeta
5.1 Parte 1
5.2 Parte 2
5.3 Parte 3

Capítulo 6: Historia de Viajeros
6.1 Parte 1
6.2 Parte 2
6.3 Parte 3

Capítulo 7: El espinazo de la noche
7.1 Parte 1
7.2 Parte 2
7.3 Parte 3

Capítulo 8: Viajes a través del espacio y el tiempo
8.1 Parte 1
8.2 Parte 2
8.3 Parte 3

Capítulo 9: La vida de las Estrellas
9.1 Parte 1
9.2 Parte 2
9.3 Parte 3

Capítulo 10: Al filo de la eternidad
10.1 Parte 1
10.2 Parte 2
10.3 Parte 3

Capítulo 11: La persistencia de la memoria
11.1 Parte 1
11.2 Parte 2
11.3 Parte 3

Capítulo 12: Enciclopedia Galáctica
12.1 Parte 1
12.2 Parte 2
12.3 Parte 3

Capítulo 13: Quién habla en nombre de la Tierra
13.1 Parte 1
13.2 Parte 2
13.3 Parte 3

Biografía de Carl Sagan
1 Parte 1
2 Parte 2



26 de diciembre de 2011

Publicando en el Blog desde ScribeFire

Me encuentro en fase de pruebas de software para la publicación de Posts en el Blogger y me he encontrado con este complemento para el Firefox llamado ScribeFire. Además de tener soporte para Blogger también puedes publicar en WordPress, Posterous. Por si fuera poco este complemento también funciona en otros navegadores como Safari, Opera y Google Chrome.

Hola Mundo otra vez!!!


Acá vamos de regreso a las andadas...