ETL과 ELT 정리
Last updated
Last updated
데이터 웨어하우스에 데이터를 로드하는 데이터 파이프라인을 설계하고 구축할 때 일반적으로 ETL과 ELT에 대해 많이 이야기 한다. 이 포스트는 각각의 용어가 의미하는 바와 차이점에 대해 설명하고자 한다.
Extract (E) : 소스로부터 데이터를 가져오는 과정
Transform (T) : 소스에서 원시 데이터를 변환하는 과정
Load (L) : 사용할 테이블에 데이터를 로드하는 과정
ETL은 extract-transform-load를 나타내며, 일반적인 단계는 다음과 같다.
데이터 소스에서 데이터 추출
스테이징 영역에 저장
일부 사용자 지정 변환 수행 (일반적으로 스트림 처리를 위한 Python / Scala / Spark 스크립트 혹은 Spark/Flink 스트리밍)
데이터 사용자가 사용할 테이블로 로드
ELT는 ETL과 매우 유사하지만 데이터는 사용자가 사용하는 최종 테이블로 변환되기 전에 테이블에 로드된다. 데이터 소스에서 데이터를 데이터 웨어하우스 테이블로 추출하고 로드한다. 원시 SQL 스크립트를 실행하여 데이터 사용자가 사용할 준비가 된 원하는 형태로 변환한다.
위 그림과 같이 ELT는 ETL 접근 방식에 비해 구성 요소가 적다. ELT를 사용하면 배치 및 스트리밍에 대한 동일한 패러다임이 있다. 이는 대부분의 데이터 웨어하우에서 데이터를 스테이징 테이블로 직접 스트리밍 할 수 있기 때문이다.
데이터 웨어하우스가 외부 테이블, 스토리지 및 쿼리 엔진 분리와 같은 강력한 기능을 도입하면서 ETL과 ELT 간의 경계가 모호해졌다. 최근 몇 년 동안 ELT는 원시 데이터를 테이블 (내부 또는 외부)에 로드한 다음 일부 변환을 수행하여 최종 형식(사용자가 사용하는 데이터)으로 변경하는 프로세스를 나타내는 데 사용되었다.
ELT는 많은 유연성, 비용 절감을 제공하는 강력한 데이터 웨어하우스이며 적은 엔지니어링 노력 및 DBT와 같은 도구를 통해 많은 인기를 얻고 있다. 한편, ETL은 ML 학습 및 변환 시 데이터 웨어하우스에 존재하지 않는 데이터에 액세스할 때 사용하는 사례가 많다.
데이터 파이프라인을 구축하는 경우 가장 간단한 솔루션인 ELT 파이프라인으로 시작하고 데이터 파이프라인과 코드 기반이 진화 가능한지 확인한 다음 필요에 따라 ETL 기능을 추가하는 것이 좋다. 하나의 변환 단꼐에서 ML 모델 실행, 데이터 웨어하우스에 데이터 로드, 데이터 웨어하우스 내에서 더 많은 변환을 수행하는 것과 같은 두가지 변환 단계를 수행하여 ETLTL 파이프라인이 될 수도 있다. 결과적으로는 사용 사례와 프로젝트에 따라 달라지겠지만 핵심 아이디어는 ELT로 간단하게 시작하고 필요에 따라 외부 변환 시스템과 같은 복잡성을 추가하는 것이다.
예를 들어, ELT는 애플리케이션 OLTP DB에 권장되지 않는다. 애플리케이션의 OLTP DB에 데이터를 로드하는 작업을 하는 경우 애플리케이션의 OLTP DB에 과부하가 걸리지 않고 애플리케이션의 지연 시간이 증가하지 않도록 ETL 방식을 사용하는 것이 좋다.
ELT
ETL
구성 요소/도구 수
O
유지 보수 용이성
O
표준 인코딩 형식(Parquet, ORC)에서 작동 여부
O
O
비표준 파일 형식에서 작동 여부
O
ML 알고리즘 실행
O
외부 서비스와 연동
O
그래프 프로세싱
O