#title 데이터추출-변환-적재 [[TableOfContents]] ==== 목표 ==== * 데이터 추출, 변환, 적재(ETL; extraction, transformation, loading) 기능들의 모든 다양한 형태들을 광범위하게 조사한다. * 데이터 추출기능, 그것들의 난제들, 그것의 기법을 검사하고, 그 기법들을 평하하고 적용하는 방법을 배운다. * 광범위한 분야의 데이터 변환 기능의 과제와 유형들을 토론한다. * 데이터 통합과 합병의 의미를 이해한다. * 데이터 적재 기능의 중요성을 감지하고 데이터를 웨어하우스에 적용시키는 중요 방법들을 탐사한다. * ETL이 왜 중요하고 시간이 걸리고 어려운지에 대한 진정한 통찰력을 얻는다. ==== ETL 개관 ==== ETL은 Etract, Transform, Load의 약자이다. 운용시스템의 데이터를 전략 정보로 바꾸는데는 이러한 ETL과정이 필요하다. ETL의 첫 번째 과정은 데이터 추출(extract)이다. 데이터 추출 과정에서 가장 큰 이슈는 데이터를 운용 시스템으로부터 어느 범위와 한계까지 추출하는지에 대한 문제다. DW의 사용자들이 어떤 유형의 질의나 분석을 위한 모든 운용 시스템의 데이터에 관심이 있다고 생각할지 모른다. 하지만 이는 데이터 쓰레기창고(data junkhouse)를 만드는 것과 같다. 데이터 추출의 범위와 한계는 사용자의 요구사항에 의해 결정되어야 한다. ETL과정의 범위와 복잡도는 각 DW마다 다르다. 만일 여러 개의 이기종 시스템에 의해 운용 시스템이 돌아간다면, ETL과정은 광범위하고 복잡할 것이다. 이런 경우 데이터 추출은 꽤 어려운 문제가 된다. 데이터 변환(transform)과 데이터 적재(load)도 마찬가지이다. ===== 가장 중요하고 가장 도전적인 일 ===== ETL 기능들은 중요한 목적을 만족시킨다. 데이터를 정보로 바꾸기 위해서는 먼저 데이터를 획득해야 한다. 데이터를 운영 시스템으로부터 획득했다고 해서 전략 정보라고 부를 수는 없다. 전략 정보를 바꾸려면 모든 변환 방법을 적용시켜 그 데이터가 정보로 변환되기에 적합하도록 해야 한다. 데이터 변환되었더라도 DW저장소로 옮겨져야 최종 사용자에게 유용할 수 있다. ETL은 각 과정마다 어려움이 따르는데 다음의 리스트는 어려움의 유형과 원인들을 나열한 것이다. 각각을 주의 깊에 고려하고, 그것을 당신의 환경에 연관시켜서 당신이 적합한 해결책을 발견하도록 하라. * 소스 시스템은 매우 다양하고 이질적이다. * 보통 여러 개의 플랫폼과 다른 운영 체제들에 올려진 소스 시스템들을 처리할 필요가 있다. * 많은 소스 시스템들은 낡은 데이터베이스 기술에서 돌아간다. * 일반적으로 값의 변동에 관한 이력 데이터는 소스 운영 시스템에서는 유지되지 않는다. 이력 정보는 DW에서 아주 중요하다. * 시간에 따라 진화한 많은 오래된 소스 시스템에서 데이터 품질은 의심스럽다. * 소스 시스템 구조는 새로운 업무 조건들 때문에 시간에 따라 계속 변한다. ETL기능도 그에 따라서 수정되어야 한다. * 소스 시스템들 간의 일치의 심한 부재는 흔하다. 같은 데이터가 다양한 소스 시스템들에서 다르게 표현될 가능성도 있다. * 불일치 데이터가 이질적인 소스 시스템들 간에서 발견되었을 때도 불일치를 해결하는 방법들의 부족으로 불일치성 문제는 점증된다. * 대부분의 소스 시스템들은 데이터를 사용자들에게 의미가 있는 유형이나 형식으로 표현되지 않는다. 많은 표현들은 숨겨지거나 모호하다. ===== 시간이 걸리고 힘든 일 ===== ETL 기능에 대해서 그 프로젝트 노력의 50~70% 만큼 많이 소모한다는 것은 흔한 일이다. 다음은 ETL 기능들의 복잡도에 기여하는 몇몇 요인들을 주시했을 것이다. * 데이터 추출 그 자체는 소시 시스템들의 특성과 복잡도에 따라 꽤 뒤얽힐 수 있다. 소스 시스템에 관한 메타데이터는 소스 시스템으로부터 필요한 모든 데이터베이스와 자료 구조에 관한 정보를 포함하여야 한다. 데이터베이스의 크기나 데이터의 변동을 포함한 매우 상세한 정보가 필요하다. 데이터 추출은 운영 시스템에 영향을 최소화해야 하고, 데이터를 추출 할 수 있는 하루 중의 시간 영역을 알아야 한다. 또한 각각의 관련 소스 시스템에서의 데이터에 대한 변화를 획득하는 기법을 결정할 필요가 있다. * 데이터 변환은 데이터 구조의 재포맷, 재정렬, 다양한 변환 기법 적용, 값이 없을 경우의 디폴트 값에 대한 제공, 성능향상을 위한 모든 집합체를 설계해야 한다. * 데이터 적재는 초기 적재와 초기 적재 이후의 점진적인 적재로 나눌 수 있는데, 초기적재는 데이터의 양이 많아 2주 이상 걸릴 수 있다. 점진적인 적재는 소스에서 변경된 부분에 대한 처리 기술이 필요하다. ===== ETL 요구사항과 단계 ===== 아래의 리스트는 ETL처리의 주요 단계다. (완전한 것은 아니다) * 각각의 데이터 구조들을 DW의 목표 데이터베이스에 한 개의 행으로 결합시켜라. * 한 소스 데이터 구조를 몇 개의 구조로 나누어 목표 데이터베이스의 몇 개의 행들로 들어가도록 하라. * 소스 시스템들의 데이터 사전과 카탈로그로부터 데이터를 읽어라. * 플랫파일과 색인된 파일(VSAM)들 그리고 기존 시스템 데이터베이스(계층/네트워크)를 포함한 다양한 파일 구조들로부터 데이터를 읽어라. * 원자 사실 테이블(atomic fact table)들을 채우기 위한 상세 사항들을 적재하라. * 총계나 요약 사실 테이블들을 채우기 위하여 집계하라. * 소스 플랫폼에 있는 한 형식의 데이터를 목표 플랫폼에 있는 다른 형식으로 변환하라. * 입력 필드들로부터 목표 값들로 유도하라. * 숨겨진 값들을 사용들에게 의미가 있는 값들로 바꾸어라. ===== 중요한 요인 ===== 데이터 추출과 변환 기능의 복잡도 * 소스 시스템의 이기종 환경(큰 기업은 OS, DBMS, Network Protocol등의 복잡한 조합이 될 수 있다) * 추출전 다양한 소스 시스템의 완벽한 목록을 만들어야 함 데이터 적재 기능 * 적재는 시간이 올래걸리는 작업 * 초기적재와 증진적재 문제 ==== 데이터 추출 ==== 운영계의 추출과 DW의 추출은 다르다. DW는 이기종 환경에서 데이터를 추출하며, 초기 적재뿐만 아니라 계속 진행되는 증진적인 적재에 대한 변동 데이터를 추출해야 한다. 이들 요인은 복잡도를 증가시긴다. 따라서 ETL툴의 사용을 정당화 한다. 효과적인 데이터 추출은 DW의 성공으로 가는 열쇠다. 다음은 데이터 추출에 관한 이슈들이다. DW에 대한 데이터 추출 전략을 공식화할 필요가 있다. * 소스 식별(source identification) - 소스와 소스 구조들을 식별 * 추출 방법(method of extraction) - 추출 과정들이 수작업인지, 도구를 이용한 것인지 정의 * 추출 주기(extraction frequency) - 추출을 얼마나 자주 해야 하는지 정함(매월, 매주, 매월, 매분기 기타) * 작업 시간(time window) - 추출에 대한 시간 영역 (batch window) * 작업 순서(job sequencing) - 추출 작업 스트림에서 한 작업의 시작이 그 이전 작업이 성공적으로 끝날 때까지 기다려야 하는지를 결정 * 예외 처리(exception handling) - 추출되어질 수 없는 입력 레코드들을 어떻게 다룰지 결정 ===== 소스 식별 ===== 소스 식별은 완벽함, 많은 시간, 철저한 분석을 필요로 함 1. DW or DM을 위해 필요한 데이터를 제공해 주는 소스 시스템들을 가지고 있는지 확인 1. 소스 시스템들로부터 DW or DM에 있는 각 데이터 요소에 대한 정확안 데이터 소스를 확립 1. 식별된 소스들이 정말로 올바른 것인지 확신하는 검증과정 ===== 데이터 추출 기법 ===== 데이터 추출 기법의 유형은 이 두 범주(운용 시스템의 2가지 범주)의 각 특성에 달려있다. * 현재 값(current value) - 현재의 속성값. 값들은 일시적이거나 변하기 쉽다. * 주기적 상태(periodic status) - 각 사건이 일어난 시점을 참조하여 저장된 사건들을 포함 데이터 추출 기법 * 즉시 데이터 추출(immediate data extraction) * 트랜잭션 로그를 통한 획득(capture throught transaction logs) * 데이터베이스 트리거를 통한 획득(capture througth database triggers) * 소스 응용들에서의 획득(capture in source applications) - DW를 위해서 만들어짐. 유지보수가 매우 어려움. * 지연 데이터 추출(deferred data extraction) * 날짜와 타임스탬프에 근거한 획득(capture based on data and timestamp) * 파일 비교에 의한 획득(capture by comparing files) 트랜잭션 로그, 데이터베이스 트리거를 이용하는 방법은 DBMS의 기능을 이용하면 사용 가능하다. 구현하기에 비교적 싸고 쉽다. 트랜잭션 로그에 근거한 기법들이 아마 가장 덜 비쌀것이다. 소스 운영 시스템에 추가적 부담은 없다. ==== 데이터 변환 ==== ==== 데이터 적재 ==== ==== ETL 요약 ====