Big Query에서 테이블 CSV 업로드시 etl_lod_dt 어떻게 넣을지 알아보다가 정리함
Staging Table이란 소스 시스템(CSV, API, DB 등)에서 추출한 데이터를 최종 타겟 테이블(Data Warehouse)에 적재하기 전, 임시로 저장하는 중간 단계의 테이블을 의미
흔히 ETL(Extract, Transform, Load) 과정에서 'T'를 안정적으로 수행하기 위한 대기실 역할
외부 데이터(CSV 등)는 형식이 불완전할 수 있음
바로 최종 테이블에 넣다가 에러가 나면 전체 파이프라인이 꼬이지만, 스테이징을 거치면 데이터 검증이 가능
빅쿼리 같은 컬럼형 DB에서 UPDATE나 DELETE는 비용이 비쌈
스테이징에서 모든 가공(컬럼 추가, 데이터 정제)을 마친 후 최종 테이블에는 INSERT만 수행하여 비용을 절감
추출(Load)과 변환(Transform) 단계를 분리하여, 중간에 작업이 실패하더라도 처음부터 다시 데이터를 가져올 필요 없이 스테이징 테이블부터 재시작할 수 있음
적재 시간(etl_lod_dt)이나 소스 출처(src_nm) 같은 관리용 컬럼을 원본 수정 없이 이 단계에서 자유롭게 추가
현업에서는 보통 아래와 같은 3단계 구조로 진행
작업 : CSV 파일을 그대로 빅쿼리 임시 테이블에 업로드
특징 : 스키마 가공을 최소화하고 원본 그대로를 유지, 보통 테이블명 앞에 stg_ 또는 tmp_를 붙임
작업: SQL을 이용하여 데이터를 변환
etl_lod_dt 추가 (CURRENT_TIMESTAMP())
데이터 타입 변환 (문자열 -> 숫자 등)
결측치 처리 및 중복 제거
SQL 예시 :
-- 임시 테이블에서 최종 테이블로 데이터 이관
INSERT INTO dim.dim_serving (repr_fd_cd, srv_unit, srv_amt, src_nm, is_actv, etl_lod_dt)
SELECT
repr_fd_cd,
srv_unit,
CAST(srv_amt AS NUMERIC), -- 타입 변환
'CSV_UPLOAD' as src_nm, -- 소스 명시
is_actv,
CURRENT_TIMESTAMP() as etl_lod_dt -- 적재 시간 추가
FROM dim.stg_dim_serving;
작업 : 적재가 완료된 스테이징 테이블을 삭제(Drop)하거나 일정 기간 후 자동 삭제되도록 설정(Expiration)
| 구분 | 전략 | 설명 |
|---|---|---|
| 명명 규칙 | stg_[테이블명] | 스테이징 테이블임을 명확히 함 |
| 자동화 | Write Truncate | 매번 적재할 때 기존 스테이징 데이터를 밀어버리고 새로 부음 (Overwrite) |
| 유효 기간 | Table Expiration | 빅쿼리 설정에서 스테이징 테이블의 수명을 1~2일로 설정하여 자동 삭제 유도 |
| 추적성 | Audit Columns | etl_lod_dt 외에도 job_id 등을 추가해 어떤 작업으로 들어온 데이터인지 기록 |