Airflow

Airflow - 데이터 파이프라인

터칭 데이터 2023. 12. 9. 17:58

 

 

데이터 파이프라인

 

 

 

ETL = 데이터 파이프라인 = Airflow에서의 DAG(Directed Acyclic Graph)

 

 

 

 

 

 

 

 

ETL의 주기적 실행, ETL 간의 실행 순서를 관리해주는 역할을 Airflow가 담당

 

요약 테이블 만들기가 바로 ELT로 보통 데이터 분석가들이 많이 실행한다.

 

 

 

 

 

 

 

 

 

용어 설명: ETL (Extract, Transform, and Load)


ETL: Extract, Transform and Load

추출, 정제, 적제

 

 

Data Pipeline, ETL, Data Workflow, DAG

 

Called DAG (Directed Acyclic Graph) in Airflow

Directed: 양방향이 아닌 일방향이다.

Acyclic: Loop가 존재하지 않는다.

 

 

 

 

 

 

 

 

 

 

용어 설명: ELT (Extract, Load and Transform)

ETL vs ELT

 

ETL: 데이터를 데이터 웨어하우스 외부에서 내부로 가져오는 프로세스

(보통 데이터 엔지니어들이 수행함)

 


ELT: 데이터 웨어하우스 내부 데이터를 조작해서 (보통은 좀더 추상화되고 요약된) 새로운 데이터를 만드는 프로세스

(보통 데이터 분석가들이 많이 수행)


이 경우 데이터 레이크 위에서 이런 작업들이 벌어지기도 함

이런 프로세스 전용 기술들이 있으며 dbt(Data Build Too)가 가장 유명: Analytics Engineering

 

 

 

 

 

 

 

 

 

 

용어 설명: Data Lake vs. Data Warehouse

 


데이터 레이크 (Data Lake)
구조화 데이터 + 비구조화 데이터
보존 기한이 없는 모든 데이터를 원래 형태대로 보존하는 스토리지에 가까움
보통은 데이터 웨어하우스보다 몇배는 더 큰 스토리지

상대적으로 비용이 저렴


데이터 웨어하우스 (Data Warehouse)
보존 기한이 있는 구조화된 데이터를 저장하고 처리하는 스토리지
보통 BI 툴들(룩커, 태블로, 수퍼셋, …)은 데이터 웨어하우스를 백엔드로 사용함

상대적으로 비용이 높음

 

 

 

 

 

 

 

 

 

 

 

Data Lake & ELT

 

 

넷플릭스와 같은 거대한 기업들이 위와 같은 패턴을 사용합니다.

 

우리가 사용한 S3가 대개 Data Lake 역할을 합니다.

 

Spark, Athena 등으로 Data Lake의 데이터들을 정제해 데이터 웨어하우스에 적재합니다.

 

 

 

 

 

 

 

 

 

 

Data Pipeline의 정의


데이터를 소스로부터 목적지로 복사하는 작업

이 작업은 보통 코딩 (파이썬 혹은 스칼라) 혹은 SQL을 통해 이뤄짐
대부분의 경우 목적지는 데이터 웨어하우스가 됨

(가끔 목적지가 외부가 되는 경우도 있습니다.)


데이터 소스의 예:

Click stream, call data, ads performance data, transactions, sensor data, metadata, …
More concrete examples: production databases, log files, API, stream data (Kafka topic) 


데이터 목적지의 예:

데이터 웨어하우스, 캐시 시스템 (Redis, Memcache), 프로덕션 데이터베이스, NoSQL, S3, ...

 

 

 

 

 

 

 

 

 

데이터 파이프라인의 종류 (1)


Raw Data ETL Jobs

외부와 내부에 있는 데이터 소스를 읽어 DW(데이터 웨어하우스)로 로드하는 것을 말합니다.

 

1. 외부와 내부 데이터 소스에서 데이터를 읽어다가 (많은 경우 API를 통하게 됨)

데이터 소스는 기본적으로 데이터 인프라(데이터 시스템) 바깥입니다. 그런데 외부 데이터 소스, 내부 데이터 소스로 굳이 나눈 이유는 여기서의 내부는 기업 내부에 있는 데이터 소스, 외부는 기업 바깥에 있는 데이터 소스라는 뜻으로 구분하기 위함입니다.

 

예를 들어, 페이스북에서 페이스북 광고 정보를 읽어 온다면 이는 내부 데이터 소스입니다.


2. 적당한 데이터 포맷 변환 후 (데이터의 크기가 커지면 Spark등이 필요해집니다. 파이썬 만으로는 전처리가 힘들기 때문입니다.)


3. 데이터 웨어하우스 로드

 

이 작업은 보통 데이터 엔지니어가 수행함

 

 

 

 

 

 

 

 

 

 

데이터 파이프라인의 종류 (2)


Summary/Report Jobs

1. DW(혹은 DL)로부터 데이터를 읽어 다시 DW에 쓰는 ETL


2. Raw Data를 읽어서 일종의 리포트 형태나 써머리 형태의 테이블을 다시 만드는 용도


3. 특수한 형태로는 AB 테스트 결과를 분석하는 데이터 파이프라인도 존재


요약 테이블의 경우 SQL (CTAS를 통해)만으로 만들고 이는 데이터 분석가가 하는 것이 맞음. 데이터 엔지니어 관점에서는 어떻게 데이터 분석가들이 편하게 할 수 있는 환경을 만들어 주느냐가 관건
-> Analytics Engineer (DBT)

 

이 작업은 보통 데이터 분석가가 수행함

 

 

 

 

 

 

 

 

 

 

 

데이터 파이프라인의 종류 (3)


Production Data Jobs


1. DW로부터 데이터를 읽어 다른 Storage(많은 경우 프로덕션 환경)로 쓰는 ETL


a. 써머리 정보가 프로덕션 환경에서 성능 이유로 필요한 경우
b. 혹은 머신러닝 모델에서 필요한 피쳐들을 미리 계산해두는 경우

 


2. 이 경우 흔한 타켓 스토리지:


a. Cassandra/HBase/DynamoDB와 같은 NoSQL
b. MySQL과 같은 관계형 데이터베이스 (OLTP)
c. Redis/Memcache와 같은 캐시
d. ElasticSearch와 같은 검색엔진

 

상황 하나를 가정해보겠습니다. 유튜브의 좋아요나 조회수 같은 정보는 실시간으로 반영하지 않고 일정 시간이 경과될 때마다 갱신됩니다. 실시간으로 반영 시 데이터 웨어하우스에게 크게 무리가 가기 때문입니다. 꼭 실시간으로 반영할 필요가 없는 이런 정보들은 DW 혹은 DL에서 정리한 후 스토리지나 프로덕션 DB에 저장(로드)하는 것이 일반적입니다.