ETL : Extract, Transform, Load
- Data Pipeline, ETL, Data Workflow, DAG(Directed Acyclic Graph)
- ELT : Data-warehouse 내에 이미 있는 내부 데이터를 조작해서 요약된 데이터를 만드는 것.
Data Lake vs Data Warehouse
- Data Lake : 구조화된 데이터 + 비구조화 데이터
- 보존기한이 없는 모든 데이터를 원래 형태로 보존
- Data Warehouse : 보존기한이 있는 구조화된 데이터.
- BI 툴들이 주로 Data Warehouse를 백엔드로 사용한다.
Data Pipelines
- Raw Data ETL Jobs
- Summary/Report ELT Jobs
- Production Data Jobs
- Cassandra/Hbase/DynamoDB 같은 NoSQL
- MySQL(OLTP)
- Redis/Memcache 같은 캐시
- ElasticSearch 같은 검색엔진
Simple ETL
- https://colab.research.google.com/drive/1nITNr8_z6DDHVXtZ08C8RYDxJDdtHb0O?usp=sharing
- FULL REFRESH <-> INCREMENTAL UPDATE
- FULL REFRESH : 매번 소스의 내용을 다 읽어오는 방식 -> 효율성이 떨어질 수 있지만 간단하고, 소스데이터에 문제가 생겨도 다시 다 읽어오므로 유지보수가 쉽지만 데이터가 커지면 사용불가.
- INCREMENTAL UPDATE : 효율성이 좋지만 유지보수가 힘들어진다. -> 보통 daily나 hourly로 동작한다. -> Backfill 이슈가 있음
- TRANSACTION
Airflow
- Data-Pipeline 스케줄링 도구 - 큰 회사(구글 클라우드 등) 에서 사용중인 버전 확인
- 다양한 데이터 소스와 데이터 웨어하우스를 지원
- 백필(Backfill)이 쉬움
- 단점 : 개발환경 셋업이 쉽지 않고 배우기가 어려움
Airflow Component
- 1) Web Server
- 2) Scheduler
- 3) Worker -> 얘를 늘리는 형태로 scale out
- 4) Database (sqlite가 기본)
- 5) Queue (Worker가 다수인 경우)
DAG(Directed Acyclic Graph)
- Airflow에서 ETL을 부르는 명칭
- DAG는 task로 구성됨 (ex: Extract, Transform, Load)
- task 는 Airflow의 Operator 로 만들어지며, 이미 다양한 종류의 Operator를 제공함. 없다면 직접 개발해야 한다.
- schedule 은 crontab 문법을 따름 -> 모든 시간은 utc 기준.
- *(A’) *(B’) *(C’) *(D’) *(E’)
- A’ : minute(0~59)
- B’ : hour(0~23)
- C’ : day of month(1~31)
- D’ : month ot year(1~12)
- E’ : day of week(1~7)
Data-Pipeline 고려할 점
- 가능하다면 Full Refresh 하라.
- incremental update 만이 가능하다면 created, modified, deleted 필드를 추가하자.
- 멱등성(idempotency)을 보장하자.
- 과거 데이터를 다시 채우는 과정(Backfill)이 쉬워야 한다. -> Airflow의 강점
- 데이터 파이프라인의 입력과 출력을 명확히 하고 문서화한다.
- 주기적으로 쓸모없는 데이터들을 삭제
- 데이터 파이프라인 사고 시 사고 리포트(post-mortem) 쓰기.
- 중복레코드, pk 보장 등 확인하자.
Backfill(incremental update 에서 의미가 있음)
- 날짜값 등 파라미터 값을 DAG에서 직접 구하거나, 하드코딩하는 방식이 아니라, Airflow에서 넘겨받아 처리하도록 한다.
Airflow 설치
- Docker Engine 설치
- 참고 : https://airflow.apache.org/docs/apache-airflow/2.5.1/howto/docker-compose/index.html
1
2
3
4
5
6
7
8
9
... git 파일 unlaod
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
# airflow webserver permission error는 공식문서 방법대로 처리하면 됨
mkdir -p ./dags ./logs ./plugins \
echo -e "AIRFLOW_UID=$(id -u)" > .env