tMap pozwala na wykonywanie wielu operacji – możesz w nim łączyć źródła danych, filtrować rekordy, transformować dane oraz zarządzać ścieżkami wynikowymi. Komponent ten, w przeciwieństwie do tJoin umożliwiającego łączenie maksymalnie dwóch obiektów, pozwala na łączenie danych z wielu źródeł.

W tym szkoleniu pokaże:

  • jakie typu złączeń możesz wykonać w komponencie tMap,
  • jak łączyć źródła danych używając tMap,
  • jak stworzyć output dla rekordów, które nie spełniają warunków złączenia.

Typy złączeń danych w tMap

Typ złączenia

Komponent tMap pozwala na dwa typy złączeń: Inner Join oraz Left Outer Join. Przypomnijmy szybko o co w nich chodzi.

Jeżeli łączymy dwie tabele używając INNER JOIN, jako wynik dostaniemy tylko rekordy występujące w obu tabelach. Świetnie obrazuje to poniższy rysunek:

Z kolei LEFT OUTER JOIN, znany też jako LEFT JOIN, jako wynik daje wszystkie rekordy występujące w tabeli A (pierwsza tabela, główna) oraz tylko te rekordy z tabeli B, które spełniają warunek złączenia. Spójrzmy na poniższy rysunek:

Domyślne ustawienia złączeń

Talend DI podczas złączeń obiektów wykonywanych w komponencie tMap pozwala na skonfigurowanie dwóch ważnych parametrów: Lookup Model oraz Match Model.

Lookup Model domyślnie ustawiony jest jako Load once. Oznacza to, że przed wykonaniem pierwszego złączenia tabeli głównej (dla przykładu A) z inną tabelą (B), Talend zaczytuje wszystkie rekordy z tabeli B i przez cały czas wykonywania złączenia z tabelą A przechowuje je na dysku bądź w pamięci (w zależności od ustawień Store temp data). Tabela B zaczytywana jest tylko raz. Reload at each row oznacza, że tabela B będzie zaczytywana ponownie dla każdego złączenia z rekordem tabeli głównej. Tego typu złączenia stosowane są jeśli tabela B jest aktualizowana w czasie rzeczywistym i chcemy łączyć tabele A z najnowszymi wersjami rekordów tabeli B bądź jeśli tabela B zawiera bardzo dużo rekordów, które nie powinny być przechowywane w pamięci ze względu na możliwość jej przepełnienia. Trzecim typem Lookup Model jest Reload at each row (cache), który jak wynika z jego nazwy, uniemożliwia nam przechowywanie zaczytanych danych na dysku. Wszystkie zaczytane rekordy przechowywane są w pamięci podręcznej i jeśli wystąpią jakieś zmiany w tabeli B, tylko one zostaną doładowane do pamięci.

Match Model domyślnie ustawiony jest jako Unique match, co oznacza, że jeśli dla warunku złączenia w tabeli B wystąpią duplikaty, jako output uzyskamy unikalny wynik i będzie to ostatni napotkany w tabeli rekord dla tego warunku złączenia. Można więc jego działanie nazwać Last match. First match jeśli spotka duplikaty w tabeli B, pobierze tylko pierwszy rekord. Natomiast All matches dopasowuje dla tabeli A , wszystkie możliwe złączenia z tabeli B. Podczas tego typu złączenia możemy więc uzyskać duplikaty. Dostępna jest jeszcze jedna opcja – All rows, która polega na wykonaniu iloczynu kartezjańskiego zbiorów. Wszystkie wiersze z tabeli B zostają połączone z wszystkimi rekordami tabeli głównej A.

Łączymy źródła danych – przykład

W przykładowym jobie połączymy dane o klientach (CUSTOMER_SRC) z poprzedniego szkolenia z danymi o organizacjach, które możesz pobrać poniżej:

Utwórz nowy proces w Talend  Data Integration i przenieś na płótno designera tabelę CUSTOMER_SRC utworzoną w poprzednim szkoleniu. Następnie, po utworzeniu na bazie obiektu ORGANIZATION, zaczytaj ją do repozytorium i także przeciągnij do designera. Dzięki przeciągnięciu obiektów z repozytorium, mamy już ustawione wszystkie parametry bazy danych oraz zapytania.

Następnie, dodaj na płótno komponent tMap i połącz go z obiektem CUSTOMER_SRC, która będzie naszą główną tabelą. Połącz także tabele ORGANIZATION jako źródło dla komponentu tMap. Proces powinien w tym kroku wyglądać następująco:

Jako tabelę główną Talend zawsze oznacza tę, która jako pierwsza została podłączona do tMap’a. Druga i każda kolejna tabela będzie oznaczona jako lookup.

Zanim jeszcze ustawimy warunek naszego złączenia dodajmy dwa obiekty wyjściowe – tLogRow. Jeden z nich będzie wyświetlał dane połączone według naszego warunku, zaś drugi dane niepołączone. Ja swoje ścieżki nazwałam odpowiednio main oraz reject.

Ustawmy teraz komponent tMap, kliknij na niego podwójnie, aby wejść w ustawienia. Z pierwszej tabeli wybierz wiersz ORG_ID i przeciągnij go do tabeli, z którą się łączysz. U mnie główną tabelą jest CUSTOMER_SRC (row1), natomiast tabelą z którą wykonuję złączenie jest ORGANIZATION (row2). Jeśli chcesz możesz zmienić nazwę ścieżek (row1, row2) w ogólnym widoku procesu klikając na nią dwukrotnie). 

Wejdź w ustawienia tMap Setting i wybierz Join Model, następnie zmień go na Inner Join.

W kolejny kroku przeciągnij wszystkie atrybuty z row1 oraz ORG_NAME z row2 na output main. W ustawieniach dla output reject , zmień Catch lookup inner join reject na true. Wiersze, które nie połączą się podczas INNER JOINa zostaną przeładowane ścieżką reject. Kliknij OK, aby wyjść z ustawień tMap’a.

tLogRow domyślnie wyświetla wszystkie rekordy w nowej linii , a kolumny są oddzielne znakiem “|”. Mając jako obiekt docelowy dwa komponenty tLogRow, może to być trochę kłopotliwe, żeby zobaczyć dla którego output’u należą jakie rekordy. Wynik będzie mniej więcej taki:

Aby szybko zauważyć, które rekordy się nie połączyły z tabelą ORGANIZATION możemy zmienić ustawienia wyświetlania wyniku w tLogRow. W tym celu wybierz zakładkę Component View -> Mode -> Table

Teraz wynik jest zdecydowanie bardziej czytelny.

Jeśli spodobał Ci się ten post to zostaw proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Dzięki!

Leave a Reply

avatar
  Subscribe  
Powiadom o
Close Menu