ETL nástroje
All rights reserved Javlin 2010
March 2010
Bc. Jana Galajdová
• ETL – Extract-Transformation-Load.
• Získávání dat z provozních systémů podniků
(ekonomika, skladové hospodářství, výroba, odbyt
atd.), jejich následné zpracování a poskytnutí
aplikacím pro podporu rozhodování (decission
support systémy, datové sklady, business
ETL nástroje
All rights reserved Javlin 2010
support systémy, datové sklady, business
intelligence).
DWH
ETL nástrojZdrojové
systémy
• Data transformována mezi různými systémy
a datovými formáty.
• Flexibilita návrhu transformací, přenosu dat mezi
datovými formáty.
• Komerční nástroje (Informatica PowerCenter,
Cognos, Ab Initio, IBM Infosphere DataStage, SAS
ETL nástroje
All rights reserved Javlin 2010
Cognos, Ab Initio, IBM Infosphere DataStage, SAS
ETL Studio, Business Objects Data Integrator, SSIS).
• Open source (Clover ETL, Pentaho Data Integration,
Jasper, Talend).
• Vysoká produktivita – rychlý návrh transformační
procesu díky grafickému uživatelskému prostředí.
• Flexibilita - objektový přístup pro snadnou
modifikaci procesu.
• Výkon - vícevláknová architektura, využití
paralelizmu, nativní přístup ke zdrojovým a cílovým
ETL nástroje - výhody
All rights reserved Javlin 2010
paralelizmu, nativní přístup ke zdrojovým a cílovým
systémům.
• Otevřenost - technologie pro přístup k nejrůznějším
typům systémů.
• Podpora metadat - popisné informace o zdrojových
a cílových objektech, transformačních předpisech.
CloverETL
• Komerční open source.
• Postaveno na platfomě Java (SE/EE),
licencován pod LGPL licencí.
All rights reserved Javlin 2010
• Použití:
– samostatná aplikace,
– knihovna.
• CloverCTL se používá pro zpracování dat o velikosti
několika desítek MB až stovek GB.
CloverETL Designer
• Grafické rozhraní pro provádění transformací platforma
Eclipse.
All rights reserved Javlin 2010
• Základem transformační graf.
• Komponenty grafu:
– uzel – zde probíhá manipulace s daty,
– hrana - datové potrubí, zajišťuje přenos dat mezi
uzly, určují strukturu dat, která jimi tečou.
CloverETL Engine - koncepce
All rights reserved Javlin 2010
• Vlastnosti grafu:
– orientovaný, acyklický,
– musí obsahovat minimálně jeden uzel.
Uzel
– má 0..n vstupních portů, 0..n výstupních portů,
– provádí transformaci dat, neví o existenci
sousedů.
CloverETL Engine - koncepce
All rights reserved Javlin 2010
Hrany
– spojuje dva uzly (jednosměrně),
– spojení je vždy vedeno ze specifického portu uzlu
posílajícího záznam do specifického portu uzlu
záznam přijímající.
CloverETL Engine - koncepce
All rights reserved Javlin 2010
• Graf rozdělen do jednotlivých fází.
• Fáze:
– unikátní číslo,
– každý uzel musí patřit do nějaké fáze,
– graf musí mít minimálně jednu fázi,
– fáze vykonávány sekvenčně; jako první fáze s
CloverETL Engine - koncepce
All rights reserved Javlin 2010
– fáze vykonávány sekvenčně; jako první fáze s
nejnižším číslem,
– uzly v rámci fáze se vykonávají paralelně.
CloverETL transformuje strukturovaná i
semistrukturovaná data.
• Data
– sekvence jednotlivých záznamů,
– každý záznam sestaven z položek různých typů:
CloverETL Engine- koncepce
All rights reserved Javlin 2010
– každý záznam sestaven z položek různých typů:
řetězec, číslo, datum, boolean …
– typy záznamů (datového toku) popsány metadaty –
popis jejich vnitřní struktury.
CloverETL implementuje pipeline paralelismus:
– Jakmile uzel ukončí práci na datech
záznamu, je záznam okamžitě poslán ke
uzlu následujícímu.
– Využívána vyrovnávací paměť.
– Spotřebu paměti určuje topologie grafu,
CloverETL Engine- koncepce
All rights reserved Javlin 2010
– Spotřebu paměti určuje topologie grafu,
ne velikost zpracovávaných dat.
• Transformace je prováděna pomocí grafu, jež
obsahuje:
– Fáze
• Uzly
• Hrany
– Sekvence
CloverETL framework
All rights reserved Javlin 2010
– Sekvence
– Lookup tabulky
– Databázové spojení
– Metadata
Metadata popisují strukturu záznamů dat:
– jméno,
– typ záznamu (fix-len, delimited, mixed),
– další formátovací informace.
– Záznam složen z jednotlivých typů.
Pole:
CloverETL
All rights reserved Javlin 2010
Pole:
– jméno,
– typ,
– formát,
– rozsah,
- oddělovač, délka…
CloverETL - Transformační graf
• Ukázka transformačního grafu nástroje CloverETL
All rights reserved Opensys 2009All rights reserved Opensys 2009All rights reserved Opensys 2009All rights reserved Opensys 2009
• Transformační graf definován v XML souboru
Inicializace:
– inicializace uzlů,
– inicializace hran,
– inicializace dalších grafových objektů:
– databázové spojení,
– sekvence,
CloverETL – provedení transformace
All rights reserved Javlin 2010
– sekvence,
– analýza topologie grafu – musí být
acyklický,
– kontrola vstupních-výstupních portů.
Běh tranfromace:
– vytvoření ThreadManager,
– vytvoření a spuštění vlákna WatchDog():
• dispatcher, sleduje běh všech komponent,
uklízí nedokončené,
• report o průběhu transformace,
CloverETL – provedení transformace
All rights reserved Javlin 2010
• report o průběhu transformace,
• po zjištěné nečinnosti komponent se ukončí –
konec celého programu.
Vlákno WatchDog:
• WatchDog.call()
pro každou fázi:
– inicializace fáze – inicializace všech uzlů a hran
ve fázi,
CloverETL – provedení transformace
All rights reserved Javlin 2010
ve fázi,
– vytvoření vlákna pro každý uzel,
– sledování činnosti komponent,
– Cleanup.
• Transformační kód:
– transformace v jazyce Java
– CloverETL transformační jazyk
• Transformace v jazyce Java
– třída implementující rozhraní RecordTransform
CloverETL - transformace
All rights reserved Javlin 2010
– třída implementující rozhraní RecordTransform
– Metody:
• init(),
• transform(),
• finished(),
• setGraph()
CloverETL transformační jazyk (CTL)
• interní skriptovací jazyk,
• interpretovaný jazyk, syntax podobná jazyku C
nebo Java,
• poskytuje všechny běžné příkazy pro řízení toku
programu (if, case, for, ...), datové typy,
CloverETL - transformace
All rights reserved Javlin 2010
programu (if, case, for, ...), datové typy,
• zaměřen na manipulaci s daty, transformace mohou
být sestaveny mnohem rychleji než v Javě.
CloverETL – ukázka jazyka CTL
int key; // define global variable, will be used as counter for generating IDs
key=-1; // assign value to it
/* sample function, just to show how things work */
function sum(a,b){
return a+b;
} function transform()
{ $
0.CustomerID := $
All rights reserved Opensys 2009All rights reserved Opensys 2009All rights reserved Opensys 2009All rights reserved Opensys 2009
0.CustomerID := $
0.CustomerID;
$0.OrderKey := ++key;
$0.OrderID := $0.OrderID;
$0.OrderDate := $0.OrderDate;
$0.ShippedDate := sum($0.OrderDate,7); // we ship 1 week later :-)
$0.ShipVia := $0.ShipVia;
$0.ShipTo := $0.ShipName+$0.ShipAddress+$0.ShipCity+$0.ShipCountry;
}
• Možnost vytvoření vlastní transformační
komponenty:
– potomek třídy org.jetel.graph.Node,
– pro začlenění do systému nutný doprovodný
XML descriptor:
• komponenta není součást Engine, načítána z
CloverETL – vlastní komponenta
All rights reserved Javlin 2010
• komponenta není součást Engine, načítána z
předdefinovaného adresáře, kompilována
samostatně,
• XML destriptor – popis komponent pro provázání s
Engine.
CloverETL – vlastní komponenta
• plugin Descriptor
All rights reserved Javlin 2010
• http://www.cloveretl.com/
• http://wiki.cloveretl.org/
• Martin Schiller: Co se skrývá pod zkratkou ETL?,
http://www.systemonline.cz/clanky/co-se-skryva-
pod-zkratkou-etl.htm
Použitá literatura a zdroje
All rights reserved Javlin 2010