2013-06-17 5 views
5

Mam kilka przykładowych zadań, które migrują dane z jednej bazy danych do drugiej i chciałbym mieć informacje o bieżącym postępie, takie jak ten, który masz, gdy zadanie jest uruchamiane interaktywnie z samej aplikacji (eksportuję i uruchamiam z wiersz poleceń). Używam flowMeter i statsCatcher, ale wszystko, co mam, to ogólny czas i całkowita liczba przekazanych rekordów (np. 4657 sec, 50.000.000 wierszy). Czy istnieje jakieś rozwiązanie, aby uzyskać przyzwoity dziennik?Jak rejestrować postęp zadań w Talend Open Studio?

Odpowiedz

2

O ile mi wiadomo, tLogRow wysyła do konsoli. Więc możesz łatwo podłączyć do niego wyjście.

Jeśli tLogRow nie wystarczy, można podłączyć wyjście do komponentu TJavaFlex. Tam możesz użyć czegoś takiego jak log4j lub dowolne niestandardowe wyjście.

Możesz również użyć tFileDelimitedOutput jako pliku dziennika. Ten komponent ma ładną opcję "dołącz", która działa jak amulet dla tego przypadku użycia.


za pytanie powyżej: Jak uzyskać informacje dziennika

doświadczenia mogę powiedzieć, że niektóre elementy wyprowadza przepływ. Na przykład tMysqlInput wyświetla pomyślnie wstawione wiersze.

Ogólnie, aby zalogować informacje, używam komponentu tReplicate, który pozwala mi wyprowadzić kopię przepływu do pliku dziennika.

tMySqlOutput ---- tReplicate ----- tMap -------- tMySqlInput (insert in DB) 
           +---- tMap -------- tDelimitedFile (log info) 
+0

Nie chcę się zalogować każdy wiersz, ale dopiero kilka wskazówek postępu (jak dodaje 100,000 50,000 włożona ... etc) – Bax

+0

Twierdzę zmienna statyczna z ilością przetworzonych wierszy, a następnie wyprowadzana, gdy chcesz. Nie sądzę, że jest coś gotowego do użycia. –

+0

Głównym problemem nie jest to, jak go wypuścić, ale jak go uzyskać. – Bax

5

Twoje rozwiązanie polega na dodaniu warunkowej klauzuli do logowania. Coś prawda jeden wiersz każdy, powiedzmy, 50000. Ten warunek stosując sekwencję powinno działać:

Numeric.sequence("log_seq",1,1) % 50000 == 0 

Można użyć niestandardowego komponentu bcLogBack na zasadzie wyjście Twój dziennik za pomocą stosu elewacji sl4j. Komponent ma opcję o nazwie "Rejestrowanie warunkowe", aby wysłać wiadomość tylko wtedy, gdy warunek zostanie oceniony jako prawdziwy.

Ewentualnie, jeśli nie podoba Ci się pomysł instalacji niestandardowego komponentu, możesz zakończyć subjob, używając standardowego tLogRow (lub tWarn, tDie lub cokolwiek innego) poprzedzonego przez tFilter z tym samym wyrażeniem co warunek zaawansowany. W ten sposób dasz przepustkę strumień (i wiadomości dziennika być wyzwalany) tylko jeden raz każdy 50000. Oto bardzo podstawowy schemat przydzielonego stanowiska

//---->tMySqlOutput--->tFilter-----//filter--->tWarn (or tLogRow) 
+0

tFilter wydaje się być dobrym rozwiązaniem. –

1

Można również użyć tWarn w połączeniu z tLogCatcher:

tMySqlOutput ---- tFilter ---- tWarn

tLogCatcher ---- TMap ---- tLogRow

tFilter by uniemożliwić zalogowaniu postępy na każdym zakończeniu wiersza (patrz odpowiedź Gabriele b). tWarn miałby prawdziwą wiadomość, którą chcesz wylogować.

tLogCatcher powinien otrzymać dane wejściowe ze wszystkich tWarnów, tMapper przekształca każdy wiersz z LogCatchera do wiersza wyjściowego, a tLogRow rejestruje go.

Ta odpowiedź jest opisany bardziej szczegółowo (ze zdjęciami): http://blog.wdcigroup.net/2012/05/error-handling-in-talend-using-tlogcatcher/

Powiązane problemy