Skip to main content
이 문서는 데이터 엔지니어링 섹션의 일부입니다.

왜 두 가지 테이블 유형이 필요한가?

데이터 파이프라인에서 처리하는 데이터의 성격은 크게 두 가지입니다:
  1. 계속 추가되는 데이터— 로그, 이벤트, 트랜잭션처럼 새 데이터가 지속적으로 들어오는 경우
  2. 집계/변환이 필요한 데이터— 기존 데이터를 GROUP BY, JOIN 등으로 요약하거나 변환하는 경우
SDP(Spark Declarative Pipelines)는 이 두 가지 상황에 최적화된 서로 다른 테이블 유형을 제공합니다.
💡 쉽게 비유하면, Streaming Table 은 “받은 편지함”처럼 새 메일이 계속 쌓이는 곳이고, Materialized View 는 “대시보드”처럼 전체 데이터를 요약해서 보여주는 곳입니다.

Streaming Table (스트리밍 테이블)

개념

Streaming Table 은 새로 도착한 데이터만 증분(Incremental) 으로 처리하여 추가하는 테이블입니다. 한 번 처리된 데이터는 다시 처리하지 않으며, Append-Only 방식으로 동작합니다.

핵심 특성

지원하는 소스 유형

Streaming Table 소스 유형

SQL 예제

Python 예제

내부 동작 원리

  1. 첫 번째 실행: 소스의 모든 데이터를 읽어 테이블에 저장합니다
  2. 이후 실행: 체크포인트를 기준으로 “마지막으로 읽은 위치” 이후의 새 데이터만 읽습니다
  3. 결과: 이전에 처리한 데이터를 다시 읽지 않으므로 매우 효율적입니다
⚠️ Streaming Table의 소스는 반드시 STREAM() 함수로 감싸야 합니다. 이를 빠뜨리면 일반 배치 읽기가 되어 매번 전체 데이터를 다시 처리하게 됩니다.

Materialized View (Materialized View)

개념

Materialized View 는 쿼리의 결과를 미리 계산하여 저장하는 테이블입니다. 소스 데이터가 변경되면 결과를 자동으로 재계산 합니다. 일반 VIEW와 달리 결과가 물리적으로 저장되어 있으므로 조회가 빠릅니다.

핵심 특성

SQL 예제

Python 예제

내부 동작 원리

  1. 첫 번째 실행: 소스의 전체 데이터를 읽어 쿼리 결과를 계산하고 저장합니다
  2. 이후 실행: 소스 데이터의 변경사항을 감지하여 결과를 갱신합니다
    • 증분 갱신 가능: 일부 쿼리 패턴(단순 필터, 집계 등)은 변경분만으로 결과를 갱신합니다
    • 전체 재계산 필요: 복잡한 JOIN, 윈도우 함수 등은 전체 데이터를 다시 계산합니다
  3. 결과: 항상 소스의 최신 상태를 반영한 정확한 결과를 제공합니다
💡 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)하면 데이터 일관성이 깨질 수 있습니다. 항상 파이프라인을 통해 데이터를 관리하세요.

정리


참고 링크