[Airflow] 속도 느린 이슈 해결

한지훈·2025년 12월 24일

데이터파이프라인

목록 보기
5/8

1. 현상

DAG를 실행했을 때 처리하는 속도가 느림

2. 원인

레코드를 적재할 때 INSERT INTO를 하면 레코드가 하나씩 적재되기 때문에 비효율적임

3. 해결

DB에서 보통 대량 처리 전용 엔진을 제공하는데 DB가 내부적으로 한 번에 읽고, 한 번에 기록하고, 한 번에 인덱스 정리를 해준다.


snowflake : COPY INTO
PostgresSQL : COPY
MySQL : LOAD DATA INFILE

왜 이런 상황이 생길까?

4. 왜 그럴까?

  1. 데이터가 외부에서 오는 경우 네트워크 왕복이 많아지기 때문에
  2. 트랜잭션도 많아짐
    ❗️단, 트랜잭션과 네트워크는 1:1이 아님 네트워크(이동 비용), 트랜잭션(되돌릴 수 있는 단위)

벌크 적재의 장점

  1. 트랜잭션이 단순해진다.
  2. 네트워크 왕복이 극적으로 줄어든다
  3. 실패 처리가 훨씬 명확하다

Stage란?

대량의 데이터를 적재할 땐 주로 중간 저장소인 Stage가 필요하다
정의 : Snowflake 에서 파일을 임시 저장하여 데이터를 로드/언로드할 때 사용 하는 스토리지


주요 명령어

  • PUT : 로컬 시스템에서 파일을 스테이지로 업로드
  • LIST : 스테이지에 저장된 파일 목록 확인
  • REMOVE : 스테이지에서 파일 삭제
  • GET : 스테이지에서 파일을 로컬 시스템으로 다운로드

Stage 종류

External Stage

S3 / GCS / Azure Blob 같은 외부 스토리지를 Snowflake가 직접 바라보도록 연결한 스테이지

큰 데이터 처리가 필요한 경우 사용
AWS S3, Google Cloud Storage, Azure Blob Storage

Internal Stage(내부 스테이지)

Snowflake가 직접 관리하는 내부 저장 공간

4. 사용법

스테이지 선택

  • 소규모 임시 데이터: User Stage
  • 단일 테이블 로드: Table Stage
  • 정기 배치 작업: Named Stage
  • 대용량/외부 연동: External Stage
  • User Stage (@~)
    - 각 사용자별로 할당된 개인 저장 공간으로 사용자 계정 생성시 자동으로 생성됨
    - @~로 시작하는 경로 사용
    - 임시 데이터 로드에 적합
  • Table Stage (@%)
    - 특정 테이블과 연결된 스테이지로 테이블 생성시 자동으로 생성됨
    - @%로 시작하는 경로 사용
    - 단일 테이블 데이터 로딩에 주로 사용
  • Named Stage (@)
    - CREATE STAGE로 명시적 생성
    - 여러 사용자/프로세스가 공유 가능
    - 영구적인 특성
    - 반복적인 데이터 로드에 적합

5. 실제 적용

변경 전

변경 후

profile
데이터엔지니어가 목표입니다

0개의 댓글