DataSource V2 API — 커넥터들이 공통으로 올라서는 확장 아키텍처
Delta Lake CHECK/NOT NULL 제약 및 Spark DataSource V2 API 공식 문서 종합 (웹 리서치, 2026) — Databricks 공식 문서(ALTER TABLE ADD CONSTRAINT), Apache Spark 공식문서(Data Source V2) Apache Spark 공식문서 Data Source V2
이 모듈을 다 읽으면
- TableProvider가 데이터소스 커넥터의 기본 진입점이라는 것을 설명할 수 있다
- mix-in 인터페이스로 기능을 선택적으로 추가하는 설계가 무엇을 가능하게 하는지 설명할 수 있다
spark-learn-46(Iceberg/Delta 카탈로그 연동)과 spark-learn-14(Kafka 테이블 엔진... 은 클릭하우스지만 개념적으로 유사한 외부 연동)처럼 지금까지 다룬 여러 외부 시스템 커넥터가 공통으로 구현하는 확장 지점인 DataSource V2 API의 설계를 정리한다.
TableProvider — 카탈로그 없는 데이터소스의 기본 진입점
DataSource V2(DSV2)는 org.apache.spark.sql.connector 패키지의 Java 인터페이스 집합으로, 외부 데이터 시스템이 Spark의 쿼리 계획·실행에 끼어들 수 있게 해주는 확장 지점이다. TableProvider는 실제 카탈로그가 없는 v2 데이터소스의 기본 인터페이스로, 이 인터페이스의 핵심 책임은 읽기·쓰기용 Table 객체를 반환하는 것이다 — spark-learn-46에서 다룬 Iceberg/Delta의 카탈로그 등록(spark.sql.catalog.<이름>)도 이 확장 지점 위에서 동작하는 구체적 사례 중 하나다.
핵심 포인트
- DataSource V2: org.apache.spark.sql.connector 패키지의 Java 인터페이스 집합 — 외부 커넥터가 Spark 쿼리 계획·실행에 끼어드는 확장 지점
- TableProvider: 카탈로그 없는 v2 데이터소스의 기본 인터페이스, 핵심 책임은 읽기·쓰기용 Table 반환 — spark-learn-46의 Iceberg/Delta 카탈로그 등록도 이 위에서 동작
mix-in 인터페이스 — 기능을 필요한 만큼만 골라 추가한다
커넥터는 filter pushdown, columnar read, 카탈로그 지원 같은 기능을 특정 mix-in 인터페이스를 구현하는 방식으로 선택적으로 갖출 수 있다 — 즉 최소한의 커넥터로 시작해서 필요한 기능을 점진적으로 추가해나갈 수 있는 구조다. UPDATE/MERGE INTO/DELETE처럼 단순 필터로는 표현 못 하는 복잡한 DML을 지원하려면 SupportsRowLevelOperations 같은 별도 인터페이스를 구현한다 — spark-learn-69/73에서 다룬 Delta Lake의 MERGE INTO·스키마 검증·제약 같은 기능들이 실제로 이런 인터페이스 구현으로 뒷받침된다는 것을 짐작할 수 있다.
핵심 포인트
- 커넥터는 filter pushdown·columnar read·카탈로그 지원 등을 mix-in 인터페이스 구현으로 선택적·점진적으로 추가
- UPDATE/MERGE INTO/DELETE 같은 복잡한 DML은 SupportsRowLevelOperations 등 별도 인터페이스로 지원 — Delta Lake의 MERGE INTO(spark-learn-46)도 이런 확장 지점 위에서 구현됨