본문 바로가기
TALEND

[TALEND] 병렬/순차적 프로그램 실행

by escaper101 2020. 12. 30.

이번 포스팅에서는 하나의 Job을 여러개의 subjob으로 구분하여 병렬로 수행하는 방법과 여러 개의 job을 순차적으로 수행하는 방법을 알아보자. 

대상 employees 테이블의 데이터

employee 데이터를 가진 employee 테이블의 데이터는 위와 같다. 이때, employees 의 last_name에 따라 알파벳 별로 별도의 테이블에 저장해야한다고 할 때, Talend를 사용하여 작업을 완료해보자. 

 

새로운 Job 생성 후 소스 데이터 가져오기

우선 새로운 Job을 만든다. 그리고 소스가 될 employees 테이블을 job에 가져온다. component를 더블클릭하면 상세 연결정보와 데이터 추출 쿼리를 볼 수 있다. 연결 정보는 보안상 가려두었다. 추출 쿼리를 주목해보자. 지금은 아무런 조건 없이 전체 데이터를 가져오고 있으나 우리는 employees 테이블에서 last_name을 기준으로 알파벳 별로 별도의 타겟 테이블에 데이터를 이관하려고 한다. 

추출쿼리 수정

따라서 위와 같이 일단 last_name이 A로 시작하는 데이터만 추출해오도록 쿼리를 수정한다. 그리고 쿼리 창 옆에 네모 표시를 클릭해보자. 

쿼리 결과 확인

클릭하면 위와 같은 창이 뜨며 오른쪽 상단에는 우리가 변경한 쿼리가 표기된다. 이때 쿼리 내용 위에 빨간색 네모칸으로 표기한 사람 아이콘을 클릭해보자. (Ctrl + enter를 눌러도 된다) 오른쪽 하단에 쿼리 결과가 표기되는 것을 확인할 수 있다. 우리가 추가한 조건에 맞게 last_name이 알파벳 A로 시작하는 데이터만 보여주고 있다. 이렇게 Talend 내부에서도 쿼리 결과를 확인할 수 있다. 

타겟 테이블과 연결

이제 쿼리결과까지 확인했으니 추출한 데이터를 타겟 테이블에 이관해야 한다. 먼저 타겟 테이블을 팔레트에 가져온다. 위 사진과 같이 last_name이 A로 시작하는 데이터만 추출하여 employees_a 라는 타겟 테이블에 넣어줄 것이다. tMap 컴포넌트를 생성하여 소스와 타겟 두 테이블을 연결해준다. 이 상태에서 Job을 실행하게 되면 정상적으로 employees 테이블의 last_name이 A로 시작하는 데이터가 employees_a 테이블에 이관될 것이다. 하지만 나머지 B ~ Z로 시작하는 last_name을 가진 데이터 역시 각 알파벳에 해당하는 타겟 테이블에 이관해야 한다. 이를 위해 총 26개의 Job을 만들 수도 있지만 하나의 Job에서 26개의 subJob을 생성하여 병렬로 작업을 수행해보겠다. 

복사한 subjob 수정

먼저 만들어 놓은 last_name이 A로 시작하는 subjob을 복사하여 새로운 subjob을 만들었다. 구분을 위해 각 subjob에 title을 표기하였다. 복사한 subjob의 추출 쿼리는 last_name이 알파벳 B로 시작하는 데이터만 가져오도록 위와 같이 수정하고 타겟 테이블 역시 변경하였다. 이제 이 작업을 구분할 subjob의 개수만큼 반복한다. 

 

여러개의 subjob

6개의 개별 작업을 수행하는 subjob을 만들었다. 이 상태에서 job을 실행하면 동시에 여러개의 subjob을 실행하는 병렬 프로그램이 완성된다. 한 번에 하나의 작업을 실행할 때보다 빠르게 데이터를 이관할 수 있다는 장점이 있다. 

 

두번째로 위 job에서 추가적인 설정인 완료하면 순차적으로 개별 subjob이 실행되도록 만들 수 있다. 

순차적 subjob 설정 

last_name이 A로 시작하는 subjob의 inputDB를 우클릭하면 여러가지 옵션이 표기된다. 여기서 두번째 옵션 trigger를 클릭하여 onSubjob OK를 선택한다. 그리고 last_name이 B로 시작하는 subjob의 inputDB에 연결해준다. 여기까지 완료하면 위 사진에서 오른쪽과 같은 모양이 완성된다. 이 설정은 last_name이 A로 시작하는 subjob과 last_name이 B로 시작하는 subjob이 병렬로 수행되는 것이 아니라 A subjob이 정상적으로 완료됨과 동시에 B subjob이 실행되도록 만든다.  

동일한 방법으로 A부터 F까지의 subjob을 모두 trigger로 연결하였다. 이렇게 하면 A -> B -> C -> D -> E -> F 순서대로 subjob이 실행된다. 이 설정은 뒤의 subjob이 앞의 subjob에 종속되어 순서대로 실행되어야 할 때 매우 유용한 구조이다. 

 

단순히 하나의 job이 하나의 작업을 수행하는 방식으로 프로그램을 만들수도 있지만 때에 따라 여러개의 subjob을 병렬 수행하거나 순차적으로 수행하는 방식으로 작업을 실행할 수 도 있다는 것을 알아두자.