Archivo de la categoría ‘DBA’

Migrando datos con Kettle Parte 1

Miércoles, 15 de Julio de 2009

Les voy a mostrar una excelente herramienta de ETL (Extract, Transform & Load) que es el Kettle.
El ETL, como lo dice su nombre es el proceso de extraer archivos desde una determinada fuente, transformarlos y cargarlos en el destino.
Me toco lidiar con unos archivos que no se bien como se llaman, creo que son serializados. Consisten en que los datos de una fila estan almacenados unos a continuacion de otros, cuando los vi por primera vez me dije WTF!!!! pero un par de programadores de antaño (25 años de programacion) me dijeron que era muy comun en su epoca…..pero ahora un CSV no es ciencia, ademas que hay que andar con un archivo extra con la definicion de los datos..pero bueh.

Particularmente lo utilice para mover datos entre distintas bases de datos, levantar archivos csv,xls o los anteriormente serializados.
Kettle soporta una multitud de combinaciones pero voy a mostrar las mas sencillas.

Escenario:

Nos envian un archivo de texto plano (.txt), serializado y lo vamos a levantar a una tabla en una base de datos PostgreSQL.

Si alguien necesita el archivo no tiene mas que pedirlo :)

Preparamos el escenario

  • Creamos una carpeta en la cual descargamos el archivo, para eso se crea una carpeta llamada “entrada”.
  • Creamos una carpeta en la cual guardaremos los archivos convertidos.

Se crea una carpeta llamada “salida”

1) Obtener el kettle desde el sitio oficial:
http://downloads.sourceforge.net/pentaho/Kettle-3.0.0.GA.zip
2) Se lo descomprime en la carpeta que uno desee.

pelin@pasargada:~/Documentos$ ls *.zip
Kettle-3.0.3.GA-0569.zip
pelin@pasargada:~/Documentos$ unzip Kettle-3.0.3.GA-0569.zip
Archive: Kettle-3.0.3.GA-0569.zip creating:
inflating: META-INF/MANIFEST.MF
...........
...........
inflating: ui/laf.properties
inflating: ui/menubar.properties
inflating: ui/menubar.xul
inflating: ui/menus.xul
pelin@pasargada:~/Documentos$

3) Hacemos ejecutable al script

pelin@pasargada:~/Documentos/kettle$ chmod +x spoon.sh
pelin@pasargada:~/Documentos/kettle$ ls -l spoon.*
-rw-r--r-- 1 pelin pelin 4286 2008-04-25 12:30 spoon.ico
-rw-r--r-- 1 pelin pelin 2661 2008-04-25 12:30 spoon.png
-rwxr-xr-x 1 pelin pelin 3428 2008-04-25 12:30 spoon.sh

y lo lanzamos ejecutando

pelin@pasargada:~/Documentos/kettle$ sh spoon.sh &
[1] 14591
pelin@pasargada:~/Documentos/kettle$

4) Se abre la pantalla de inicio


Se tienen dos opciones:
a) Crear un repositorio asi todas las tareas se almancenan en un base de datos
b) Sin repositorio, donde cada tarea o trabajo se guardan como archivos.

Ahora vamos a utilizarlo sin catalogo.

Seleccionar “Sin Catalogo”

5) Pantalla principal

6) Tenemos dos opciones de tareas a realizar:
a) Transformacion: Es una operacion unitaria.
b) Trabajo: Es una transformacion o serie de transformaciones que se realizan en secuencia.

7) Se hace click en Nuevo -> Transformacion

Bajo

Objetos Principales -> Entrada se encuentran las opciones disponibles para transformaciones.

imagen1

imagen1

8 ) Entrada

“Entrada > Entrada Fichero de Texto” y se lo arrastra al area de trabajo.

Doble click sobre el icono en el area de trabajo o boton derecho y click en “Editar Paso”

a) Verifico que los archivos de entrada se encuentren en la carpeta correspondiente:

pelin@pleyade:/opt/migracion$ ls entrada/
drogas.txt  formas.txt

b) Solapa Fichero:

Puedo cambiar el nombre de Paso, debo seleccionar el archivo a levantar

spoon21

c) Solapa Contenido

Tipo de Fichero: Fixed

Separador de campos: dejar en blanco

Separador de texto: dejar en blanco

Codificacion: ISO-8859-1 (permite ver acentos y demas caracteres)

d) Solapa Campos

Click en “Traer Campos”

Como los campos son de longitud fija, selecciono con un click hasta donde llega el primer campo. En caso que tuviera mas campos repito el proceso marcando cada uno de los campos.

spoon3

e) Click en Next y se despliega la siguiente pantalla que permite ingresar los nombres de los campos

spoon4

f) Click en Finish

y en previsualizar para ver los datos

spoon5

g) Click en Ok para terminar con la entrada

9) Salida

Seleccionamos

Objetos principales > Salida > Salida Tabla

la cual arrastramos al area de trabajo.

Doble click o boton derecho Editar Paso nos permite la configuracion adecuada para la conexion a la base de datos:

a) en Conexion click en Nuevo y seleccionar la base de datos, en este caso es una DB PostgreSQL

spoon6

b) Una vez probada la conexion, y que esta sea exitosa; hacemos click en OK.

nos tiene que quedar como la imagen siguiente

spoon7

c)  Click en SQL y nos despliega la consulta que se va a realizar

spoon8

Haciendo click en Ejecutar nos creara las tablas  en la Base de datos seleccionada.

d) Una vez creadas las tablas modificamos la salida para que quede de la siguiente manera

spoon11

e) Terminamos con la salida

10) Seleccionar Transformaciones > Saltos para indicar el sentido de la transformacion

spoon9

11) Estado Final antes de la trasnformacion

spoon10

12) Para terminar ejecutamos la transformacion

click en Ejecutar > Ejecucion Local > Ejecutar

spoon12

13) Para verificar hacemos una consulta desde un cliente de PostgreSQL

spoon13

14) Guardado

Posteriormente podemos guardarla transformacion para poder utilizarla mas adelante, aunque recomiendo que guarden en forma periodica mientras esten configurando la transforacion ya que suele tener fallos inexplicables debido a java.

15) En un post siguiente voy a mostrar la realizacion de un trabajo.