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