본문 바로가기
TALEND

[TALEND] 서로 다른 소스 데이터 집계하기

by escaper101 2021. 4. 7.

 

이번 포스팅에서는 Talend의 새로운 컴포넌트를 몇 가지 소개하면서 실무에서 활용한 예시를 살펴보겠다. 먼저 소개할 컴포넌트는 다음과 같다. 

1. tAggregateRow: input 데이터에 대하여 count, max, avg 등의 집계 함수를 사용할 수 있는 컴포넌트이다. 

2. tUnite: 서로 다른 두개 이상의 소스 데이터가 동일한 스키마를 가질 때 이를 union해주는 컴포넌트이다. 

 

현재 임직원들의 연봉 및 입사 시기를 포함하는 데이터는 두 개의 소스로 구분되어 있다고 해보자. 1990년 이전까지는 엑셀로 관리되었고 그 이후부터는 database로 관리되고 있다. 금번 프로젝트에서는 이렇게 두 개로 구분된 데이터를 하나의 테이블로 합치는 업무가 주어졌다. 이 작업을 완료한 후 두 개의 소스에 나뉘어진 데이터가 하나의 타겟 테이블로 잘 이관되었는지 확인할 Job을 만들고자 한다. 

 

우선 두 개의 데이터를 하나의 테이블에 이관하는 Job을 간단히 만들어보자. 특별할 것 없이 두 개의 subjob이 순차적으로 실행되는 Job을 만들었다. 우선 1990년 이전 데이터를 포함하는 excel 데이터를 to-be 테이블인 salaries_combines 테이블에 이관 후 문제 없이 이관이 완료됨에 따라 1990년 이후 데이터가 포함된 as-is salaries 테이블의 데이터를 동일한 타겟 테이블에 이관하였다. 

 

이제 앞서 소개한 두 컴포넌트를 사용해 이 작업을 검증해보자. 우선 데이터 이관 작업 검증 시에는 이관 전 데이터 건수와 이관 후 데이터 건수를 비교하는 방식이 가장 기본적인 방식이다. 우리는 소스와 타겟의 임직원 데이터를 부서별 코드를 기준으로 건수를 비교해서 검증해보겠다. 타겟 테이블은 다음과 같이 비교할 수 있겠다. 

타겟 데이터 검증 쿼리 

타겟 테이블을 부서 코드를 포함하는 dept_emp 테이블과 조인하여 dept_no를 기준으로 각 부서에 속하는 임직원 수를 조회하는 쿼리이다. 이제 동일한 기준으로 소스 테이블과 그 건수를 비교하여 데이터 이관이 정상적으로 이루어졌는지 확인해보자. 이는 쿼리가 아닌 Talend로 확인해 볼 것이다. 

 

소스 데이터 검증 Job 

우선 우리의 소스는 파일과 테이블 두 개의 다른 소스로 구분되어 있기 때문에 tUnite로 union해준다. union된 결과를 dept_emp 테이블과 조인하여 tAggregateRow 컴포넌트를 사용하여 dept_no를 기준으로 group by 한 후 임직원 수를 집계하고 있다. 대략적인 job의 흐름을 이해했으니 세부 설정을 살펴보자. 

tUnite 설정

excel의 데이터와 salaries 데이터를 input으로 가져와 tUnite에 연결해준다. Sync columns 버튼을 눌러 tUnite의 스키마를 자동 설정하게 하면 연결된 소스 데이터 중 order의 순서가 1인 소스의 스키마를 가져온다. 여러 소스 중 설정하고 싶은 스키마가 있다면 Edit schema 버튼을 클릭하여 원하는 소스의 탭을 클릭한 후 화살표 버튼을 눌러 스키마를 설정할 수 있다.

tMap 설정 

이제 두 소스의 데이터가 tUnite로 union되었다. 부서 코드를 기준으로 데이터를 구분하기 위해 dept_emp 테이블과 소스 데이터를 조인해야 한다. 이 작업은 tMap을 통해 수행가능하다. 우선 두 테이블을 조인하기 위한 key를 설정해 준다. 우리의 예시에서 조인 key는 emp_no이다. emp_no 칼럼을 드래그 하여 dept_emp 테이블과 조인하고 join Model을 Inner Join으로 설정해준다. 그리고 group by 쿼리를 만들기 위해 필요한 칼럼만 output으로 가져오면 tMap의 설정이 끝이 난다. 

 

tAggregateRow 설정 

이제 본격적으로 검증 쿼리를 만들어 보자. 이는 tAggregateRow 컴포넌트로 수행가능하다. 일단 tMap에서 output으로 가져온 칼럼을 tAggregateRow에서 사용할 수 있도록 Sync columns 버튼을 눌러준다. 우리는 앞서 살펴본 것 처럼 부서 코드로 데이터를 그룹핑할 것이므로 Group by 섹션에서 dept_no 칼럼을 선택한다. 마지막으로 Operations 섹션에서 emp_no를 기준으로 그 count를 집계하기 위한 설정을 마무리하면 된다. 이렇게 만들어진 데이터를 Talend의 로그에 출력하기 위해 마지막으로 tLogRow로 연결하였다. 

 

이렇게 tUnite와 tAggregateRow 컴포넌트를 활용하여 실무에서 접할 만한 문제를 해결하는 방법을 살펴보았다. 

 

'TALEND' 카테고리의 다른 글

[TALEND] data migration 작업 유형  (0) 2021.04.08
[TALEND] Talend 내장함수 알아보기  (0) 2021.04.07
[TALEND] 동적 쿼리 만들기  (0) 2021.04.07
Data Migration 업무를 수행하고  (0) 2021.04.06
[TALEND] sequence 만들기  (0) 2021.01.01