이번 포스팅을 통해 Talend 내장 함수를 사용하여 sequence를 만드는 방법을 알아보자. sequence를 생성해야하는 때는 상황에 따라 다르겠지만 숫자와 문자열 sequence로 구분하여 두 가지 예시를 살펴보겠다.
첫번째 숫자 sequence를 생성하는 방법을 먼저 살펴보자. 작업 대상 테이블의 데이터은 다음과 같다.
regions 테이블의 display_order 칼럼 값을 채워줄 때 display_order는 continent_id에 따라 달라진다. 즉, continent_id를 기준으로 그룹핑한 데이터에 순차적인 display_order 값을 주는 것이다. Talend로 아래와 같이 row_number() 함수로 만들 수 있는 sequence를 구현해보겠다.
본격적으로 위 내용을 구현하기 위해 sequence라는 이름의 새로운 Job을 생성하였다.
작업을 진행할 regions 테이블을 생성한 Job에 가져온다. Component 탭을 클릭하면 간단한 연결정보와 추출 쿼리를 확인할 수 있다. 별다른 설정을 하지 않고 기본 상태를 유지한다.
sequence를 만드는 작업은 Talend의 내장함수를 사용할 것이므로 내장함수를 사용할 수 있는 tMap 컴포넌트를 만들어 regions 테이블과 연결해준다.
다음 스탭으로 regions 테이블을 output으로 가져와 Job에 추가한다. regions 테이블의 데이터를 읽어와 tMap에서 sequence를 생성하는 로직을 처리하고 동일한 regions 테이블에 sequence 값을 입력해주는 작업이므로 output으로 가져온 regions 테이블의 Action on data 옵션을 디폴트로 설정되어 있는 Insert가 아닌 Update로 변경해준다. output 테이블에 Update를 진행하는 경우 해당 테이블에는 반드시 PK가 존재해야 한다. 다음 첨부된 사진을 주목하자.
Component 탭에서 Advanced settings 를 클릭하면 상세 설정을 할 수 있는 창이 뜬다. 중간 즈음에 위치한 Use field options 체크박스를 클릭하여 Field options를 변경해주자. update를 진행할 기준이 될 PK 칼럼을 Key in update 영역에서 선택해준다. regions 테이블의 PK인 region_id에 체크해주었다. display_order 칼럼만 Update 할 것이므로 display_order 칼럼을 제외한 모든 칼럼은 Updatable 영역에서 체크박스를 해제해준다. 위 과정을 통해 output 테이블에 update를 진행할 때 기준이될 key 칼럼과 실제로 update를 진행할 칼럼을 설정해주었다. 이제 sequence를 설정하기 위해 tMap을 열어 Talend의 내장함수를 사용해보자.
우선 display_order 칼럼을 제외한 모든 칼럼을 매핑해준다. 오른쪽 상단에 위치한 Auto map 버튼을 클릭하면 동일한 이름을 가진 칼럼을 자동으로 매핑해준다. 그리고 out1의 display_order 칼럼 왼쪽에 위치한 네모 버튼을 클릭한다.
네모 버튼을 누르면 위와 같은 Expression Builder창이 표시된다. 이때 왼쪽 하단의 category 영역에서 Numeric 버튼을 클릭하면 여러개의 함수가 표기되는데 여기서 sequence 함수를 사용하여 손쉽게 sequence를 생성할 수 있다. 오른쪽 하단의 Help 영역은 간단히 개별 함수의 기능을 보여준다. sequence 함수를 더블클릭하면 Expression 영역에 함수가 표기된다. 첫번째 인자는 기준 칼럼, 두번째 인자는 sequence의 시작 값, 세번째 인자는 sequence 증가값을 넣어준다. display_order는 처음 얘기한 것과 같이 continent_id 별로 1부터 시작하여 1씩 증가하는 sequence를 줄 예정이르모 위아 같이 설정하였다. 이때, sequence 함수를 자세히 살펴보면 첫번째 인자인 기준 칼럼의 타입이 String이어야 한다. 우리 예시의 regions 테이블의 continent_id 칼럼은 int 타입이기 때문에 String으로 형변환될 수 있게 따옴표를 붙여주었다.
설정을 완료한 후 완성된 Job을 실행하면 된다. Job을 실행한 후 update된 regions 테이블은 위와 같다. 처음 목표한 대로 continent_id 에 따라 display_order에 sequence가 부여된 것을 확인할 수 있다.
두번째로 문자열 sequence를 만드는 방법을 알아보자. 역시 테이블의 데이터를 먼저 살펴보자.
이번에는 continents와 regions 두 테이블을 사용해볼 것이다. continents 테이블에는 continent_code 칼럼이 있는데 이 칼럼을 prefix로 가지며 continent_id를 기준으로 그룹핑한 문자열 sequence를 만들어보겠다. 완성된 display_order 칼럼의 값은 다음과 같다 (NA00001, AS00001, AF00001, ...)
앞서 살펴본 숫자 sequence를 생성하는 job을 바탕으로 응용해볼 것이다. 일단 continents 테이블의 continent_code를 사용할 것이므로 continent 테이블을 만들어 job에 가져온 다음 tMap에 연결한다. 연결정보나 추출쿼리는 변경하지 않았다.
tMap을 열어 본격적으로 로직을 만들어보자. 앞서 살펴본 숫자 sequence 예시와 비교했을 때 tMap의 왼쪽 영역 하단에 새로운 schema가 추가된 것을 확인할 수 있다. 이 schema는 방금 또다른 tDBInput으로 만들어 준 continents 테이블이다. regions 테이블과 continents 테이블을 continent_id를 기준으로 join해준다. regions 테이블의 continent_id 칼럼을 드래그하여 continents 테이블의 continent_id 와 연결해주고 Join Model을 left outer join에서 inner join으로 변경한다. 이제 join 설정이 끝났으니 문자열 sequence를 만들어보자. out1의 display_order 칼럼 영역에서 네모 버튼을 클릭한다.
Expression Builder 창이 뜨면 위와 같이 설정한다. 총 7자리 중 처음 두 자리는 continent_code로 prefix를 가지고, 나머지 5자리의 값을 continent_id로 채울 때 빈 값은 0으로 채운다. 이 작업은 StringHandling 클래스의 LPAD 함수를 통해 구현할 수 있다.
LPAD 함수를 사용하는 설정을 마치면 tMap은 위와 같은 모양을 띈다. 이제 완성된 Job을 실행해보자.
regions 테이블의 display_order 칼럼이 continents 테이블의 continent_code를 prefix로 가지는 문자열 sequence로 채워진 것을 확인할 수 있다.
이번 포스팅에서는 위와 같이 두 예시를 통해 Talend의 내장함수를 사용하여 숫자와 문자열 sequence를 만드는 방법을 살펴보았다.
'TALEND' 카테고리의 다른 글
[TALEND] 동적 쿼리 만들기 (0) | 2021.04.07 |
---|---|
Data Migration 업무를 수행하고 (0) | 2021.04.06 |
[TALEND] 탈렌드로 간단 배치 프로그램 생성 (0) | 2020.12.30 |
[TALEND] 병렬/순차적 프로그램 실행 (0) | 2020.12.30 |
[TALEND] 다른 DB 테이블의 데이터 비교 (ORACLE - MARIA) (0) | 2020.11.30 |