중급 Part04:DB관련 설정(Destination편)

이번에는 가장 문의가 많았던 데이터베이스 상세 설정 중에서, 데이타베이스가 Destination인 경우에 대해 설명하겠습니다.

Q. Xplenty 작업에서 데이터베이스로 로드중에 에러가 발생하면 어떻게 됩니까?

잡에서 데이터베이스로 로드중에 에러가 발생하면 잡의 상태도 에러가 됩니다. 
문제는 모든 데이터가 무효가 되는지, 에러 전까지 로드 된 데이터는 롤백되지 않고 데이터베이스에 남는가 하는 점입니다. 이 부분은 Xplenty쪽의 패키지에 어떤 옵션을 설정했는지에 따라 바뀝니다.

thumbnail image

Transaction per connection에 체크가 ON인 경우

이 경우 Batch size에 관계없이 연결 레벨에서 제어가 이루어집니다.
Max parallel Connections가 1이면 작업 실행 중 에러가 발생하면 해당 작업에 의해 갱신된 모든 레코드가 롤백되고 데이터베이스 측은 작업 실행 전 상태로 되돌아갑니다. (즉, 데이터 갱신이 없음)

Transaction per batch에 체크가 ON인 경우

이 경우, Batch size로 지정된 값(레코드 수입니다)을 기준으로 처리가 수시로 커밋 됩니다.
예를 들어, Batch size를 1000으로 설정하면 1000 레코드마다 커밋됩니다. 만약 3000건 갱신하는 작업이 있다고 해서 최초의 1000건은 문제없이 커밋할 수 있고 그 다음의 1000건을 처리중에 에러가 발생했을 경우, 작업은 그 시점에서 에러가 되어 종료되지만, 첫번째 1000개의 레코드는 데이터베이스 측에 반영되어 작업이 종료됩니다. (일부 반영)

Q. 업데이트되는 데이터가 테이블의 스키마 정의와 다른 경우 Xplenty 측에서 스키마를 변경하는 옵션이 있습니까?

데이터베이스에 A, B, C 필드가 있는 스키마 구조에 대해 데이터의 필드가 A, B, C, D인 경우에는 필드 D를 테이블에 추가하는 스키마 변경 옵션이 있습니다.

thumbnail image

주의: 데이터 소스쪽에서 마음대로 필드가 늘거나 줄어드는 것을 자동으로 감지하여 스키마에 자동 반영하는 기능은 없습니다. 이 옵션은 어디까지나 늘어난 필드에만 대응하는 형태이므로 Xplenty로부터 데이타베이스에 대해서 Alter table를 실행해, 스키마 구조를 변경할 수 있는 기능입니다.

유연한 SQL에 의한 전처리/후처리가 가능

데이터를 로드하기 전과 후에도 유연하게 데이터베이스를 제어할 수 있도록 전처리/후처리 SQL 실행을 지원합니다.
이를 통해 예를 들어 ELT 시나리오의 경우 데이터를 한 번 DWH쪽에 로드후 SQL을 이용하여 View를 작성하거나 혹은 로드 된 데이터를 Update 문으로 추가가공하는 등의 유연한 대처가 가능합니다.
또, 데이터 로드 전에 테이블을 작성하거나, 특정일 이전의 데이터의 삭제 혹은 일괄로 논리 삭제하는 등의 처리도 가능합니다.

thumbnail image

데이터베이스에 로드 시의 Merge 옵션과 동작에 대해서

데이터베이스에 로드시에 다음 두 가지 유형의 Merge옵션을 선택할 수 있습니다. 각 처리의 특징을 이해하고 올바른 옵션을 선택하십시오.

삭제 및 삽입을 사용하여 기존 데이터와 병합

기록할 데이터와 쓰기 대상 테이블 양쪽에 모두 존재하는 (Upsert 키가 중복됨) 레코드에 대해 쓰기 대상 테이블에서 삭제한 다음 모든 데이터를 대상 테이블에 삽입하여 데이터를 테이블의 기존 데이터에 병합합니다.
필드 매핑에서 Upsert 키를 올바르게 설정해야 합니다. 병합은 다음과 같이 수행됩니다.

  • Step1 : 데이터베이스 기존 스키마의 키 매핑에 따라 주 키가 있는 스테이징 테이블이 작성됩니다.
  • Step2 : 출력 데이터가 스테이징 테이블에 대량 복사됩니다.
  • Step3 : 스테이징 테이블에 존재하는 Upsert 키가 있는 레코드가 대상 테이블에서 삭제됩니다. 스테이징 테이블의 모든 행이 대상 테이블에 삽입됩니다. 스테이징 테이블이 삭제됩니다.

업데이트 및 삽입을 사용하여 기존 데이터와 병합

Upsert 키가 중복되는 데이터에 대해서는 Update 하고, 새로운 데이터는 Insert 하는 것을 통해 입력된 데이터를 테이블의 기존의 레코드에 병합합니다.
필드 매핑에서 Upsert 키를 올바르게 설정해야 합니다. 병합은 다음과 같이 수행됩니다.

  • Step1 : 데이터베이스 기존 스키마의 키 매핑에 따라 주 키가 있는 스테이징 테이블이 작성됩니다.
  • Step2 : 출력 데이터가 스테이징 테이블에 대량 복사됩니다.
  • Step3 : 데이터베이스 고유 명령이 실행되고 기존 레코드가 업데이트 되고 삽입 됩니다. 스테이징 테이블이 삭제됩니다.

마치며

데이터베이스의 옵션을 올바르게 이해하면 더욱 세분화된 설정이 가능합니다.
그리고, 데이터베이스와 연관된 JDBC 관련 시스템 변수를 설정할 수 있습니다.