DAI-C8-EC: Eines ETL i Integració de Dades. Kettle

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Objectius

Unitat Didàctica: UD10. Eines ETL i Integració de Dades. Kettle

ETL. Amb informació de cens dels municipis de l'estat (informació oficial agafada del INE) haurem de fer un repositori de dades (warehouse). L'objectiu és doble:

  1. amb kettle, hauràs d'importar la informació disponible (fitxers CSV i Excel) al repositori.
  2. hauràs de definir amb Schema Workbench un cub multidimensional, i publicar-lo en un servidor Mondrian.

Desenvolupament

Kettle is an open source ETL­suite for Extracting data from various sources, Transforming it and Loading it into the data warehouse. Kettle consists of two sets of tools. Spoon and Pan are used to respectively create and execute transformations on data. Chef and Kitchen are used to organize transformations into jobs and execute them in a scheduled way.

Kettle is an acronym for Kettle E.T.T.L. Environment. Kettle is designed to help you with your ETTL needs, which include the Extraction, Transformation, Transportation and Loading of data.

Spoon is a graphical user interface that allows you to design transformations and jobs that can be run with the Kettle tools — Pan and Kitchen. Pan is a data transformation engine that performs a multitude of functions such as reading, manipulating, and writing data to and from various data sources. Kitchen is a program that executes jobs designed by Spoon in XML or in a database repository. Jobs are usually scheduled in batch mode to be run automatically at regular intervals.

Instal.lació

De SourceForge (http://sourceforge.net/projects/pentaho/files/Data Integration/) em descarrego la última versió estable: pdi-ce-3.2.0-stable.tar.gz (69 Mb)

Descomprimeixo a la carpeta /usr/local:

$ sudo tar xvzf pdi-ce-3.2.0-stable.tar.gz

i es crea la carpeta data-integration/

llegir README_FIRST.txt i README_LINUX.txt

To get started, look in the [docs/English] directory for the file [Spoon_3_0_0_User_Guide.pdf].
In it, you'll find an installation description and a user manual for the graphical editor Spoon.

sh spoon.sh

Mirar exemples a samples/

If you want support for the built-in browser in Linux, please install Mozilla XULRunner.

Abans de començar a treballar, crearem la base de dades municipis en el Postgres:

$ psql -h localhost -U postgres postgres
postgres# CREATE DATABASE municipis ENCODING 'UTF-8';
postgres=# CREATE USER municipi WITH ENCRYPTED PASSWORD 'municipi';
postgres=# grant all privileges on database municipis to municipi;
postgres=# \q
$ psql -h localhost -U municipi municipis
municipis=>

Ara ja podem arrencar l'aplicació Spoon, que és el punt de partida per començar a treballar amb PDI-Kettle.

sh spoon.sh

Configuració: creació d'un nou catàleg i connexió a la bd:

He creat el catàleg municipis de forma correcta, però ara necessito un login i un password.

User [joan] could not be loaded from repository: []
The user [joan] could not be found.

Solució: Login: admin; password: admin

Documentació:

The repository details are loaded from the file repositories.xml in the local directory or in the Kettle directory:

Note: The complete path and file name associated with repositories.xml file is displayed on the Spoon console.

INFO  28-04 10:48:35,941 - Spoon - Buscando catálogo
INFO  28-04 10:48:35,975 - RepositoriesMeta - Reading repositories XML file: /home/joan/.kettle/repositories.xml

Note: The default password for the administrator (Login: admin) is admin. Pentaho strongly recommends that you change this default password using the Repository Explorer or the Repository/Edit User menu.

Font/origen de la informació

Anem a buscar la llista de municipis de l'estat espanyol a la web de l'Institut Nacional d'Estadística (www.ine.es).

Localitzo el fitxer pobmun09.xls (Tamaño: 993 Kb.): Població de municipis i províncies per sexe

Les taules que crearé al PostgreSQL són:

COMUNITAT (cod_com,comunitat, abr_com)
PROVINCIA (cod_prov, provincia, com_com)
MUNICIPI (com_mun, municipi, cod_prov, numhab_h, numhab_d)

L'objectiu és fer un cub (cens), amb les dimensions municipi i sexe. Aquestes dues dimensions són agrupaments (?): municipi (comunitat, provincia, municipi i sexe (total, sexe). De manera que l'objectiu és aconseguir visualitzar en una taula JPivot aquestes dues dimensions i poder veure els habitants, desglossats o no per sexe, per als diferents municipis o agrupacions de municipis (províncies o comunitats).

script per crear les taules:

DROP TABLE MUNICIPI;
DROP TABLE PROVINCIA;
DROP TABLE COMUNITAT;

CREATE TABLE COMUNITAT(
cod_com INTEGER PRIMARY KEY,
comunitat VARCHAR(80),
abr_com VARCHAR(4)
);

CREATE TABLE PROVINCIA(
cod_prov INTEGER PRIMARY KEY,
provincia VARCHAR(30) NOT NULL,
cod_com INTEGER
);

CREATE TABLE MUNICIPI(
cod_mun INTEGER PRIMARY KEY,
municipi VARCHAR(120) NOT NULL,
cod_prov INTEGER,
numhab_h INTEGER,
numhab_d INTEGER
);

create view municipis2 as 
select cod_mun,municipi,provincia,comunitat,numhab_h,numhab_d
from municipi m, provincia p, comunitat c
where m.cod_prov=p.cod_prov and p.cod_com=c.cod_com;

COMMIT;

Nota: originalment s'havia creat la clau forània que relacionava la província amb la seva comunitat, i el municipi amb la seva provínica, però s'ha hagut de treure doncs donava problemes al fer la transformació amb spoon (es pot afegir les claus forànies a posteriori).

CREATE TABLE PROVINCIA(
...
cod_com INTEGER REFERENCES COMUNITAT
...

CREATE TABLE MUNICIPI(
...
cod_prov INTEGER REFERENCES PROVINCIA,
...

fitxer comunitats.csv:

cod_com;comunitat;abr_com
1;Catalunya;CAT
2;Aragón;ARG
3;Comunidad Valenciana;VAL
4;Illes Balears;IB
5;Navarra;NAV
6;La Rioja;RIO
7;Euskadi;EUZ
8;Cantabria;CAN
9;Asturias;AST
10;Galicia;GAL
11;Castilla León;CL
12;Madrid;MAD
13;Extremadura;EXT
14;Castilla la Mancha;CM
15;Murcia;MUR
16;Andalucía;AND
17;Islas Canarias;IC
18;Ceuta;CEU
19;Melilla;MEL

fitxer provincies.csv:

cod_prov;provincia;cod_com
1;Álava;7
2;Albacete;14
3;Alacant;3
4;Almería;16
5;Ávila;11
6;Badajoz;13
7;Balears;4
8;Barcelona;1
9;Burgos;11
10;Cáceres;13
11;Cádiz;16
12;Castelló;3
13;Ciudad Real;14
14;Córdoba;16
15;A Coruña;10
16;Cuenca;14
17;Girona;1
18;Granada;16
19;Guadalajara;14
20;Gipuzkoa;7
21;Huelva;16
22;Huesca;2
23;Jaén;16
24;León;11
25;Lleida;1
26;La Rioja;6
27;Lugo;10
28;Madrid;12
29;Málaga;16
30;Murcia;15
31;Navarra;5
32;Ourense;10
33;Asturias;9
34;Palencia;11
35;Las Palmas;17
36;Pontevedra;10
37;Salamanca;11
38;Santa Cruz de Tenerife;17
39;Cantabria;8
40;Segovia;11
41;Sevilla;16
42;Soria;11
43;Tarragona;1
44;Teruel;2
45;Toledo;14
46;València;3
47;Valladolid;11
48;Bizkaia;7
49;Zamora;11
50;Zaragoza;2
51;Ceuta;18
52;Melilla;19

Les dades dels municipis les agafo del fitxer pobmun09.xls. Aquest fitxer l'hauré de retocar per tal de què sigui parsejable: elimiar totes les files de tipus: Total Álava, etc. És el fitxer pobmun09_parsejable.xls. Són més de 8000 municipis, i la capçalera és: CPRO, PROVINCIA, CMUN, NOMBRE, POB09, VARONES, MUJERES.

ETL amb Spoon (Kettle)

El primer objectiu és transformar amb spoon les dades disponibles i omplir les taules COMUNITAT, PROVINCIA i MUNICIPI de la nostra base de dades relacional. (El segon objectiu serà definir el cub amb Schema Workbench i publicar-lo a un servidor Mondrian).

Volem omplir la taula COMUNITAT a partir de comunitats.csv. Passos a seguir:

Ara hem de mapejar el fitxer CSV amb la taula. En aquest cas la transformació és molt fàcil i directa: és camp a camp, que a més estan ordenats i la capçalera del CSV coincideix amb els camps de la taula. Per tant, més fàcil impossible. Normalment les transformacions requeriran una mica més d'esforç.

Com en qualsevol programa nou que has d'aprendre, el millor és llegir la Guia d'Usuari doncs hi ha uns quants procediments que no són obvis. El que cal fer ara és seleccionar els dos Passos (el CSV i la taula), quedaran marcats amb un requadre negre. I amb el botó sobre un d'ells (preferentment la taula), amb el botó dret apareix el menú contextual Nuevo Salto. Apareixerà una fletxa que va d'un pas a un altre, que representa la transformació que hem de realitzar.

Ara tornem a editar la taula comunitats, anem a la pestanya Database fields i cliquem sobre el botó Enter field mapping. Afegim el mapejat, que com hem comentat és obvi.

Guardem la transformació, i ja la podem executar (botó play). Deixem les opcions per defecte. Veurem que l'aplicació treballa una mica i ens fixem amb el resultat final (pestanya Logging):

2010/04/29 00:03:51 - comunitats - Iniciado despacho de la transformación [comunitats]
2010/04/29 00:03:51 - comunitats - Natural sort of steps executed in 0ms (2 time previous steps calculated)
2010/04/29 00:03:51 - comunitats - Esta transformación se puede repetir con fecha: 2010/04/29 00:03:51
2010/04/29 00:03:51 - taula comunitats.0 - Connected to database [municipis] (commit=1000)
2010/04/29 00:03:51 - comunitats csv.0 - Header row skipped in file '/home/joan/comunitats.csv'
2010/04/29 00:03:51 - comunitats csv.0 - Procesamiento finalizado (I=20, O=0, R=0, W=19, U=0, E=0
2010/04/29 00:03:51 - taula comunitats.0 - Procesamiento finalizado (I=0, O=19, R=19, W=19, U=0, E=0
2010/04/29 00:03:51 - Spoon - La transformación ha finalizado!!

La comprovació definitiva és fent una select a la taula comunitat.

El mateix farem per la taula PROVINCIA i el fitxer provincies.csv

En el cas de la taula MUNICIPI, el procediment és una mica diferent doncs el punt de partida (origen de les dades) és un fitxer Excel. No agafarem el fitxer que ens hem descarregat de www.ine.es (pobmun09.xls) sinó que utilitzarem el fitxer modificat: pobmun09_parsejable.xls. És habitual que l'origen de les dades necessiti algun retoc/modificació per evitar treball posterior. Aquests retocs els hem fet manualment, però amb un bon coneixement de l'eina també s'hagués pogut fer amb Kettle. Els canvis que hem fet són:

Ara els passos són:

CPRO, PROVINCIA, CMUN, NOMBRE, POB09, VARONES, MUJERES, CPRO2, CMUN2

Vull que els accents dels municipis s'exportin bé. En el spoon, dins la pestanya Contenido, ficar 8859-1, perquè aquesta és la codificació original que tenia en el Excel.

S'acaba de la següent manera

Table field	Stream field
cod_mun	        CMUN4
cod_prov	CPRO3
municipi	NOMBRE
numhab_h	VARONES
numhab_d	MUJERES

I es realitza la transformació de forma correcta. Efectivament, faig la select i veig els municipis amb els accents correcte.

Ja hem finalitzat el primer objectiu que és omplir un datawarehouse amb eines ETL. Ara sobre aquest datawarehouse haurem de definir un cub i publicar-lo a un servidor Mondrian.

Entrega

Recursos

Moodle

Durarda

2 hores



creat per Joan Quintana Compte, abril 2010

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines