Was ist Tal­end? Tal­end als Data Inte­gra­tion Tool

Tal­end bie­tet mit Open Stu­dio for Data Inte­gra­tion (Open-Source-Ver­sion) und Tal­end Enter­prise Data Inte­gra­tion (Enter­prise-Ver­sion) zwei Tools zur Daten­in­te­gra­tion an. Die freie Vari­ante eig­net sich für kleine Pro­jekte mit gerin­ge­ren Ansprü­chen an die Inte­gra­ti­ons­lö­sung oder dem Wunsch eige­nen Code zu ent­wi­ckeln. Die Enter­prise-Ver­sion bringt zusätz­li­che Kom­po­nen­ten und mehr Kon­nek­to­ren mit, Deploy­ments kön­nen auto­ma­ti­siert aus­ge­führt wer­den und mit dem Tal­end Admi­nis­tra­tion Cen­ter gibt es die Mög­lich­keit die Aus­füh­rung der Tal­end Jobs zu pla­nen und zu über­wa­chen.  Für grö­ßere Unter­neh­men bie­tet sich eine zusätz­li­che Ver­wen­dung von Tal­end Big Data Inte­gra­tion an, wel­ches zusätz­li­che Kom­po­nen­ten zur Ver­ar­bei­tung von Big Data wie Map­Re­duce, Hadoop, HBase und Hive mit­bringt. Mit Tal­end Data Fabric steht eine ein­heit­li­che Cloud­platt­form zur Ver­fü­gung die Data Inte­gra­tion, Big Data Inte­gra­tion und zusätz­li­che Tal­end Ser­vices umfasst.

Im Gegen­satz zu ande­ren ETL-Tools unter­schei­det sich Tal­end von den übli­chen Soft­ware-Lösun­gen, da keine Meta­da­ten, die sich nur mit einem pro­prie­tä­ren Sys­tem aus­füh­ren las­sen, gene­riert wer­den, son­dern nati­ver Java-Code, wel­cher ledig­lich einen Java-Com­pi­ler zum Aus­füh­ren vor­aus­setzt. Die große Stärke von Tal­end liegt darin, dass im Gegen­satz zu ande­rer Daten­in­te­gra­ti­ons­soft­ware, das Erstel­len von eige­nen spe­zi­fi­schen Objek­ten mit Java und die Inte­gra­tion in Tal­end ohne Pro­bleme mög­lich sind. In die­sem Blog-Bei­trag soll gezeigt wer­den, wie eine Stan­dard­auf­gabe in ETL-Pro­zes­sen, der Self-Join, wel­cher nicht durch ein Stan­dard­ver­fah­ren in Tal­end vor­ge­se­hen ist, umge­setzt wer­den kann.

Der Self-Join

Eine der häu­figs­ten Auf­ga­ben in der Daten­ver­ar­bei­tung ist das Ver­knüp­fen von Infor­ma­tio­nen aus meh­re­ren Tabel­len – ein Pro­zess der als Join bezeich­net wird. In der Regel wer­den dabei Daten aus unter­schied­li­chen Tabel­len kom­bi­niert, aller­dings kann es auch erfor­der­lich sein, dass Ein­träge aus der glei­chen Tabelle gejoint wer­den. Dies ist zum Bei­spiel not­wen­dig, wenn eine Zeile mit allen Zei­len oder einer Teil­menge der Zei­len der glei­chen Tabelle ver­gli­chen oder ange­rei­chert wer­den soll.

Ein Self-Join wird somit genutzt, um Bezie­hun­gen der Daten inner­halb einer Tabelle zu fin­den. Dies ist ein übli­ches Vor­ge­hen in ETL-Pro­zes­sen und wird von den meis­ten ETL-Tools unter­stützt. Aller­dings sind Self-Joins nicht direkt in Tal­end inte­griert, sodass sie sich nur mit Umwe­gen durch­füh­ren las­sen.  Übli­cher­weise wer­den Joins in Tal­end mit der tMap Kom­po­nente rea­li­siert, jedoch ergibt sich das Pro­blem, dass für einen Join eine unab­hän­gige Lookup-Tabelle benö­tigt wird. In Tal­end ist es nicht mög­lich die Lookup-Tabelle aus dem glei­chen Daten­strom zu erzeu­gen. Eine Mög­lich­keit aus einem Daten­strom zwei unab­hän­gige Daten­ströme zu erzeu­gen ist die Ver­wen­dung der tHash­Out­put Kom­po­nente. Mit die­ser Kom­po­nente wird der Daten­strom zwi­schen­ge­spei­chert und lässt sich mit­tels tHash­In­put wie­der aus­le­sen. Nach­dem beide Daten­ströme voll­stän­dig in den Cache geschrie­ben wur­den, kann im fol­gen­den Sub­job der Self-Join durch­ge­führt wer­den, indem zwei tHash­In­put Kom­po­nen­ten als Input für die tMap zur Ver­fü­gung ste­hen. Dies führt aller­dings dazu, dass die Tabelle zwei­fach in den Spei­cher geschrie­ben wird. Dies kann zum einen zu Spei­cher­eng­päs­sen und zum ande­ren zu Per­for­mance-Pro­ble­men führen.

Self-Joins mit Talend Enterprise Data Integration Bild1
Abbil­dung 1 Self-Join in Tal­end mit Zwi­schen­spei­chern der Datenströme

In Abbil­dung 1 ist die mög­li­che Lösung des Pro­blems in einem Tal­end-Job abge­bil­det, indem durch eine tMap zwei Daten­ströme erzeugt wer­den, wel­che durch die tHash­Out­put-Kom­po­nen­ten in den Cache geschrie­ben wer­den. Nach voll­stän­di­gem Durch­lau­fen des ers­ten Teils des Jobs (OnSub­jobOK) wer­den in einem nächs­ten Schritt die bei­den Tabel­len zunächst über die tHash­In­put-Kom­po­nen­ten wie­der ein­ge­le­sen und mit einer tMap gejoint. Auf Grund­lage einer vor­her defi­nier­ten Bedin­gung wird ein Flag auf bestimmte Zei­len, die die Bedin­gung erfül­len gesetzt. Durch das für die betrof­fe­nen Grup­pen gesetzte Flag (Self-Join mit Bedin­gung) wer­den bestimmte Zei­len ermit­telt, auf wel­che in der dar­auf­fol­gen­den tMap mit einer if-Bedin­gung reagiert wer­den kann und der Daten­strom, ent­spre­chend der gesetz­ten Flags, mit Daten aus einem Flat­file ange­rei­chert wird.

In Infor­ma­tica Power­Cen­ter lässt sich der Self-Join durch­füh­ren, indem zwei Daten­ströme, die aus der glei­chen Quelle stam­men und bereits im Source-Qua­li­fier sor­tiert wur­den als geord­ne­ter Input in ein Objekt mit einer Join-Bedin­gung über­ge­ben wer­den.  Dies lässt sich nicht in Tal­end nach­bil­den, da wie bereits erklärt eine unab­hän­gige Lookup-Tabelle für Joins in Tal­end benö­tigt wird, die nicht aus der glei­chen Quelle bezo­gen wer­den darf. Da der Umweg über das Zwi­schen­spei­chern der Daten in Infor­ma­tica ent­fällt, ist diese Lösung Res­sour­cen scho­nen­der als die vor­ge­stellte Tal­end-Lösung. Das Power­Cen­ter Map­ping ist in Abbil­dung 2 dargestellt.

Self-Joins mit Talend Enterprise Data Integration Bild2
Abbil­dung 2 Self-Join in PowerCenter

Eine effi­zi­en­tere Lösung in Tal­end ergibt sich, wenn der Self-Join auf Daten­ban­kebene durch­ge­führt wer­den kann, wie in Abbil­dung 3 dar­ge­stellt. Hier kann eine Ermitt­lung der Grup­pen bereits auf Daten­ban­kebene durch ein SQL-State­ment erfol­gen. Dabei wird auch hier ein Flag auf Grund­lage der fest­ge­leg­ten Bedin­gung gesetzt.

Self-Joins mit Talend Enterprise Data Integration Bild3
Abbil­dung 3 Self-Join auf Datenbank-Ebene

Der Vor­teil liegt darin, dass nun keine zwei Tabel­len in den Cache-Spei­cher des Tal­end-Ser­vers geschrie­ben wer­den müs­sen, son­dern der Self-Join effi­zi­ent auf Daten­ban­kebene durch­ge­führt wird.

Pro­ble­ma­tisch wird es, wenn der Self-Join nicht zu Beginn des Jobs durch­ge­führt wer­den kann. Dann kann es sich anbie­ten den Job auf­zu­tei­len und zunächst ein Zwi­schen­er­geb­nis in einer tem­po­rä­ren Tabelle zu per­sis­tie­ren, die in dem zwei­ten Tal­end-Job für den Self-Join genutzt wer­den kann. Ist der erste Tal­end Job zum Bei­spiel mit­tels ELT- oder tDBRow Kom­po­nen­ten kom­plett push­down fähig, kön­nen die Daten im ers­ten Teil des Jobs kom­plett auf der Daten­bank ver­blei­ben. Dies stellt eine effi­zi­ente Lösung dar, da bei die­sem Ver­fah­ren die Daten nur für den not­wen­di­gen Schritt zur Anrei­che­rung der Daten von exter­nen Quel­len gela­den werden.

Fazit

Es ist mög­lich die feh­lende Funk­tion des Self-Joins in Tal­end zu umge­hen, sofern es eine Option ist ihn auf Daten­bank-Ebene durch­zu­füh­ren. Sollte dies nicht mög­lich sein, ist es denk­bar den Job neu­zu­ge­stal­ten, sodass auf einen Self-Join ver­zich­tet wer­den kann. Auch wenn in der Regel ETL-Tools Mög­lich­kei­ten von Self-Joins stan­dard­mä­ßig mit­brin­gen ist es kein gro­ßer Nach­teil, dass Tal­end dies nicht vor­sieht, da in der Regel Joins auf Daten­bank-Ebene per­for­man­ter durch­ge­führt wer­den kön­nen. Grund­sätz­lich ist Tal­end ein inter­es­san­tes Tool zur Daten­in­te­gra­tion, da Tal­end durch das offene Java-Frame­work und die Anbin­dun­gen an viele Open-Source-Pro­jekte, wie Git, JUnit und Apa­che Maven sehr fle­xi­bel ist.