W poprzednim szkoleniu ładowaliśmy dane do bazy danych MySQL i ponieważ nie było ich dużo, a konfiguracja bazy danych była poprawna, nie otrzymaliśmy żadnych błędów a dane wylądowały ostatecznie w bazie. Co jednak, jeśli ładujemy tysiące bądź miliony rekordów i w połowie procesu dostaniemy błąd? Czy powinniśmy wycofać załadowane do tego czasu rekordy czy zapisać je w bazie danych? Komponent typu Output pozwala w Advanced setting ustawić częstotliwość Commit’a. Możliwe by więc było ustawić go na bardzo dużą liczbę i być pewnym, że zapis danych zawsze pojawi się na końcu procesu. Niesie to jednak za sobą problemy wydajnościowe oraz jak wielka powinna to być liczba? Oczywiście nie musisz się tym martwić – z pomocą przychodzą wyzwalacze (Triggers).

W tym szkoleniu;

  • powiem czym są wyzwalacze w Talend Studio,
  • przedstawię ich typy,
  • oraz pokażę na przykładzie jak można je wykorzystać.

Wyzwalacze – a co to takiego?

Najprościej mówiąc, wyzwalacz to zadanie lub proces wykonany automatycznie jako reakcja na pewne zdefiniowane przez nas zdarzenie, np. jeśli proces zakończy się błędem, chciałbyś automatycznie dostać e-mail z ta informacją.

Jedną z wielu możliwości zastosowanie wyzwalaczy przedstawiłam w opisie niniejszego szkolenia – nie musimy łączyć się do bazy danych bezpośrednio z komponentów typu Input i Output tworząc kilka oddzielnych połączeń. Możemy połączyć się do bazy danych komponentem typu Connection, np. tMysqlConnection, w przypadku uzyskania połączenia – wykonujemy proces główny, a w przypadku niepowodzenia – przechwytujemy błąd. Innym przypadkiem zastosowania wyzwalaczy są podprocesy. Wyobraź sobie, że po załadowaniu wszystkich danych do tabeli, chciałbyś pobrać ostatni identyfikator z tabeli i przechowywać go w tabeli konfiguracyjnej. Nic prostszego! Wystarczy, że zbudujesz kolejny flow poniżej i uruchomisz go na wyzwalaczu.

Typy wyzwalaczy

Talend Studio oferuje trzy typy wyzwalaczy:

  • dla podrocesów: On Subjob Ok, On Subjob Error
  • dla komponentów: On Component Ok, On Component Error
  • warunkowy: Run if

Jak sama nazwa wskazuje, wyzwalacze dla podprocesów zależą od wyniku całego procesu. Jeśli więc podłączysz komponent tMysqlCommit z tMysqlInput wyzwalaczem On Subjob Ok, zapis danych w bazie nastąpi po wykonaniu całego procesu zaczynającego się tMysqlInput. Gdybyś użył wyzwalacza On Component Ok, zapis danych nastąpi jeśli tylko komponent typu Input zakończy wykonywać swoją pracę pomyślnie. Możesz więc otrzymać nieobsłużony błąd dla komponentu typu Output bądź dla transformacji. Run if pozwala na wykonanie komponentu bądź podprocesu w zależności od zdefiniowanego warunku. Dobrze wiedzieć, że jako warunków możesz używać także globalnych parametrów komponentów, które są zdefiniowane w zakładce Outline, np. FileInputDelimited_2_NB_LINE.

Trochę praktyki

Jako główny proces wykorzystam flow przygotowany w poprzedniej lekcji. Dodajmy do niego trzy komponenty: tMysqlConnection (nad procesem głównym), tMysqlCommit oraz tMysqlRollback (poniżej procesu głównego). Niniejsze rozmieszczenie podprocesów jest zgodne z najlepszymi praktykami budowania procesów ETL – od lewej do prawej i z góry na dół.

Kliknij prawym przyciskiem myszy na komponent tDBConnection i wybierz Trigger -> On Subjob Ok a następnie przeciągnij pojawiający się link do komponentu tFileInputDelimited.

Następnie kliknij prawym przyciskiem myszy na komponent tFileInputDelimited i wybierz Trigger -> On Subjob Ok i połącz link z komponentem tDBCommit. W ten sam sposób połącz komponent typu Input z tDBRollback – użyj jednak wyzwalacza On Subjob Error.

Musimy jeszcze ustawić połączenie z bazą danych i powiązać je z komponentami zapisu i wycofywania zmian. W tym celu kliknij na tDBConnection, wybierz Property Type jako Repository i wskaż właściwą bazę danych.

Następnie w komponentach tDBCommit i tDBRollback wybierz w polu Component List nazwę komponenu połączenia do bazy danych.

Gotowe! Spróbuj uruchomić swój proces. 

Zauważ, że możesz dodatkowo zabezpieczyć swój proces w przypadku nie nawiązania połączenia do bazy danych w komponencie tDBConnection (wykorzystaliśmy tylko wariant On Subjob Ok).

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!

0 0 vote
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments