이번 포스팅에서는 하나의 Job을 여러개의 subjob으로 구분하여 병렬로 수행하는 방법과 여러 개의 job을 순차적으로 수행하는 방법을 알아보자.
employee 데이터를 가진 employee 테이블의 데이터는 위와 같다. 이때, employees 의 last_name에 따라 알파벳 별로 별도의 테이블에 저장해야한다고 할 때, Talend를 사용하여 작업을 완료해보자.
우선 새로운 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을 생성하여 병렬로 작업을 수행해보겠다.
먼저 만들어 놓은 last_name이 A로 시작하는 subjob을 복사하여 새로운 subjob을 만들었다. 구분을 위해 각 subjob에 title을 표기하였다. 복사한 subjob의 추출 쿼리는 last_name이 알파벳 B로 시작하는 데이터만 가져오도록 위와 같이 수정하고 타겟 테이블 역시 변경하였다. 이제 이 작업을 구분할 subjob의 개수만큼 반복한다.
6개의 개별 작업을 수행하는 subjob을 만들었다. 이 상태에서 job을 실행하면 동시에 여러개의 subjob을 실행하는 병렬 프로그램이 완성된다. 한 번에 하나의 작업을 실행할 때보다 빠르게 데이터를 이관할 수 있다는 장점이 있다.
두번째로 위 job에서 추가적인 설정인 완료하면 순차적으로 개별 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을 병렬 수행하거나 순차적으로 수행하는 방식으로 작업을 실행할 수 도 있다는 것을 알아두자.
'TALEND' 카테고리의 다른 글
[TALEND] sequence 만들기 (0) | 2021.01.01 |
---|---|
[TALEND] 탈렌드로 간단 배치 프로그램 생성 (0) | 2020.12.30 |
[TALEND] 다른 DB 테이블의 데이터 비교 (ORACLE - MARIA) (0) | 2020.11.30 |
[TALEND] 두 개의 테이블에 나눠진 데이터를 하나의 테이블로 이관하는 방법 (0) | 2020.03.30 |
[TALEND] 동시에 두 개 이상의 테이블에 데이터 이관하는 방법 (0) | 2020.03.30 |