이 문서는 데이터 엔지니어링 섹션의 일부입니다.
왜 두 가지 테이블 유형이 필요한가?
데이터 파이프라인에서 처리하는 데이터의 성격은 크게 두 가지입니다:- 계속 추가되는 데이터— 로그, 이벤트, 트랜잭션처럼 새 데이터가 지속적으로 들어오는 경우
- 집계/변환이 필요한 데이터— 기존 데이터를 GROUP BY, JOIN 등으로 요약하거나 변환하는 경우
💡 쉽게 비유하면, Streaming Table 은 “받은 편지함”처럼 새 메일이 계속 쌓이는 곳이고, Materialized View 는 “대시보드”처럼 전체 데이터를 요약해서 보여주는 곳입니다.
Streaming Table (스트리밍 테이블)
개념
Streaming Table 은 새로 도착한 데이터만 증분(Incremental) 으로 처리하여 추가하는 테이블입니다. 한 번 처리된 데이터는 다시 처리하지 않으며, Append-Only 방식으로 동작합니다.핵심 특성
지원하는 소스 유형
Streaming Table 소스 유형SQL 예제
Python 예제
내부 동작 원리
- 첫 번째 실행: 소스의 모든 데이터를 읽어 테이블에 저장합니다
- 이후 실행: 체크포인트를 기준으로 “마지막으로 읽은 위치” 이후의 새 데이터만 읽습니다
- 결과: 이전에 처리한 데이터를 다시 읽지 않으므로 매우 효율적입니다
⚠️ Streaming Table의 소스는 반드시 STREAM() 함수로 감싸야 합니다. 이를 빠뜨리면 일반 배치 읽기가 되어 매번 전체 데이터를 다시 처리하게 됩니다.
Materialized View (Materialized View)
개념
Materialized View 는 쿼리의 결과를 미리 계산하여 저장하는 테이블입니다. 소스 데이터가 변경되면 결과를 자동으로 재계산 합니다. 일반 VIEW와 달리 결과가 물리적으로 저장되어 있으므로 조회가 빠릅니다.핵심 특성
SQL 예제
Python 예제
내부 동작 원리
- 첫 번째 실행: 소스의 전체 데이터를 읽어 쿼리 결과를 계산하고 저장합니다
- 이후 실행: 소스 데이터의 변경사항을 감지하여 결과를 갱신합니다
- 증분 갱신 가능: 일부 쿼리 패턴(단순 필터, 집계 등)은 변경분만으로 결과를 갱신합니다
- 전체 재계산 필요: 복잡한 JOIN, 윈도우 함수 등은 전체 데이터를 다시 계산합니다
- 결과: 항상 소스의 최신 상태를 반영한 정확한 결과를 제공합니다
💡 Materialized View는 소스에서 데이터가 UPDATE되거나 DELETE되어도 결과에 자동으로 반영됩니다. 이것이 Streaming Table과의 가장 큰 차이점입니다.
핵심 차이 비교
상세 비교표
언제 무엇을 선택할까?
데이터 처리 유형 선택 가이드의사결정 가이드
Streaming Table + Materialized View 조합 패턴
실제 파이프라인에서는 두 유형을 함께 사용 하여 Medallion 아키텍처를 구현합니다.Medallion 아키텍처 적용 예제
Medallion 아키텍처에서의 Streaming Table과 Materialized View 활용전체 파이프라인 코드 (SQL)
새로고침 전략
파이프라인의 갱신 방식을 상황에 맞게 설정할 수 있습니다.새로고침 모드 비교
전체 새로고침 (Full Refresh)
기존 데이터를 모두 삭제하고 처음부터 다시 처리합니다.⚠️ 전체 새로고침 주의사항:
- Streaming Table의 전체 새로고침은 체크포인트를 초기화하고, 소스의 모든 데이터를 다시 처리합니다.
- 대량의 데이터가 있는 경우 시간과 비용이 크게 증가할 수 있습니다.
- Materialized View는 매 실행마다 자동으로 필요한 범위를 재계산하므로 전체 새로고침의 영향이 상대적으로 적습니다.
성능 특성 비교
제한사항 및 주의사항
Streaming Table 제한사항
Materialized View 제한사항
공통 주의사항
⚠️ Streaming Table과 Materialized View 모두 SDP 파이프라인 안에서 정의됩니다. 파이프라인 외부에서 직접 데이터를 수정(INSERT/UPDATE/DELETE)하면 데이터 일관성이 깨질 수 있습니다. 항상 파이프라인을 통해 데이터를 관리하세요.