-
ETL : Extract,Transform,Load
- Extract : 데이터를 데이터 소스에서 읽어내는 과정. 보통 API 호출
- Transform : 필요하다면 그 원본 데이터의 포맷을 원하는 형태로 변경시키는 과정. 굳이 변환할 필요는 없음
- Load : 최종적으로 Data Warehouse에 테이블로 집어넣는 과정
-
Data Pipeline, ETL, Data Workflow, DAG
- DAG : Called DAG(Directed Acyclic Graph) in Airflow
-
ETL vs. ELT
- ETL : 데이터를 데이터 웨어하우스 외부에서 내부로 가져오는 프로세스
- ELT : 데이터 웨어하우스 내부 데이터를 조작해서 (보통은 좀 더 추상화되고 요약된) 새로운 데이터를 만드는 프로세스
- 보통 데이터 분석가들이 수행
- 이 경우 데이터 레이크 위에서 이런 작업들이 벌어지기도 함
- 이런 프로세스 전용 기술들이 있으며 dbt가 가장 유명 : Analytics Engineering
-
Data Lake vs. Data Warehouse
- 데이터 레이크(Data Lake)
- 데이터 레이크는 원시 형태의 데이터(raw data)를 대량으로 저장하는 시스템
- 구조화된 데이터 + 반구조화된 데이터 + 비구조화된 데이터
- 주로 Hadoop 기반의 분산 파일 시스템(HDFS)을 사용
- 특징
- 유연성 : 다양한 데이터 유형을 저장할 수 있으며, 데이터는 구조화될 필요가 없다
- 확장성 : 대용량 데이터를 처리하고 저장할 수 있는 확장성이 뛰어나다.
- 원시 데이터 저장 : 데이터는 가공되지 않은 상태로 저장되며, 필요할 때 가공 및 분석된다.
- 사용 사례 : 데이터 사이언스, 빅데이터 분석, 기계 학습 모델 훈련 등에서 활용
- 데이터 웨어하우스 (Data Warehouse)
- 데이터 웨어하우스는 구조화된 데이터를 저장하고 분석하는 시스템
- 전통적으로 관계형 데이터베이스 관리 시스템(RDBMS) 기반
- 특징
- 구조화된 데이터 : 스키마가 사전에 정의되어 있으며, 데이터는 ETL(추출, 변환, 로드) 과정을 통해 저장
- 성능 : 데이터 쿼리와 분석 성능이 뛰어나며, 비즈니스 인텔리전스(BI) 도구와 통합하여 사용된다.
- 일관성 : 데이터가 일관된 형태로 저장되어 분석과 보고에 적합하다.
- 사용 사례 : 경영 보고, 비즈니스 인텔리전스, 데이터 마트 등에서 활용
-
Data Pipeline의 정의
- 데이터를 소스로부터 목적지로 복사하는 작업
- 이 작업은 보통 코딩(파이썬 혹은 스칼라) 혹은 SQL을 통해 이루어짐
- 대부분의 경우 목적지는 데이터 웨어하우스가 됨
- 데이터 소스의 예
- Click stream, call data, ads performance data, transactiosn, sersor data, metadata, ...
- more concrete cwamples : production databases, log files, API, stream data(Kafra topic)
- 데이터 목적지의 예
- 데이터 웨어하우스, 캐시 시스템(Redis, Memcache), 프로덕션 데이터베이스, NoSQL, S3, ...
-
데이터 파이프라인 종류
- Raw Data ETL Jobs
- 외부(사외)와 내부(사내) 데이터 소스에서 데이터를 읽어다가 (많은 경우 API 사용)
- 적당한 데이터 포맷 변환 후 (데이터의 크기가 커지면 Spark 등이 필요해짐)
- 데이터 웨어하우스 로드
- Summary/Report Jobs
- DW(혹은 DL)로부터 데이터를 읽어 다시 DW에 쓰는 ETL
- Raw Data를 읽어서 일종의 리포트 형태나 써머리 형태의 테이블을 다시 만드는 용도
- 특수한 형태로는 AB 테스트 결과를 분석하는 데이터 파이프라인도 존재
- 요약 테이블의 경우 SQL(CTAS 사용)만으로 만들고 이는 데이터 분석가가 하는 것이 맞음. 데이터 엔지니어 관점에서는 어떻게 데이터 분석가들이 편하게 할 수 있는 환경을 만들어 주느냐가 관건
- Analytics Engineer (DBT)
- Production Data Jobs
- DW로부터 데이터를 읽어 다른 Storage(많은 경우 프로덕션 환경)로 쓰는 ETL
a. 써머리 정보가 프로덕션 환경에서 성능 이유로 필요한 경우
b. 혹은 머신러닝 모델에서 필요한 피쳐들을 미리 계산해두는 경우
- 이 경우 흔한 타켓 스토리지:
a. Cassandra/HBase/DynamoDB와 같은 NoSQL
b. MySQL과 같은 관계형 데이터베이스 (OLTP)
c. Redis/Memcache와 같은 캐시
d. ElasticSearch와 같은 검색엔진