테이블 마이그레이션

테이블 마이그레이션 (Table Migration)

아파치 아이스버그는 다른 포맷으로 존재하던 기존 테이블을 아이스버그 테이블로 변환하는 것을 지원해요. 이 문서에서는 테이블 마이그레이션의 일반적인 개념과 접근 방식, 그리고 아이스버그에서 제공하는 구현 방법을 소개해드릴게요. 크게 전체 데이터 마이그레이션(full data migration)과 제자리 메타데이터 마이그레이션(in-place metadata migration) 두 가지 방법이 있어요.

출처: 문서

본문

아파치 아이스버그는 다른 포맷의 기존 테이블을 아이스버그 테이블로 변환하는 것을 지원해요. 이 섹션에서는 테이블 마이그레이션의 일반적인 개념과 접근 방식, 그리고 아이스버그에서의 기존 구현을 소개해요.

마이그레이션 접근 방식 (Migration Approaches)

테이블 마이그레이션을 실행하는 방법은 두 가지가 있어요: 전체 데이터 마이그레이션과 제자리 메타데이터 마이그레이션이에요.

전체 데이터 마이그레이션(full data migration)은 소스 테이블의 모든 데이터 파일을 새 아이스버그 테이블로 복사하는 방식이에요. 이 방법은 새 테이블이 소스 테이블과 완전히 격리되지만, 더 느리고 공간을 두 배로 차지해요. 실제로는 Create-Table-As-Select, INSERT, Change-Data-Capture(CDC) 파이프라인 같은 연산을 사용해 이 마이그레이션을 수행할 수 있어요.

제자리 메타데이터 마이그레이션(in-place metadata migration)은 기존 데이터 파일을 유지하면서 그 위에 아이스버그 메타데이터를 입히는 방식이에요. 이 방법은 더 빠를 뿐만 아니라 데이터 중복도 없애줘요. 다만 새 테이블과 소스 테이블이 완전히 격리되지는 않아요. 다시 말해, 어떤 프로세스가 소스 테이블의 데이터 파일을 진공(vacuum) 처리하면 새 테이블도 영향을 받을 수 있어요.

이 문서에서는 제자리 메타데이터 마이그레이션에 대해 더 자세히 설명할게요.

아파치 아이스버그는 제자리 메타데이터 마이그레이션 방식을 지원하고, 여기에는 스냅샷 테이블(Snapshot Table), 테이블 마이그레이션(Migrate Table), 파일 추가(Add Files)라는 중요한 세 가지 작업이 포함돼요.

스냅샷 테이블 (Snapshot Table)

스냅샷 테이블 작업은 소스 테이블과 같은 스키마와 파티셔닝을 가진 이름이 다른 새 아이스버그 테이블을 만들고, 작업 중과 작업 후에도 소스 테이블을 그대로 둬요.

  • 소스 테이블과 동일한 메타데이터(스키마, 파티션 스펙 등)를 가지되 이름이 다른 새 아이스버그 테이블을 만들어요. 소스 테이블의 읽기·쓰기 작업은 계속 동작할 수 있어요.
  • 모든 파티션의 데이터 파일을 새 아이스버그 테이블에 커밋해요. 소스 테이블은 그대로 유지돼요. 읽기 작업을 새 아이스버그 테이블로 전환할 수 있어요.
  • 마지막으로 모든 쓰기 작업을 새 아이스버그 테이블로 전환할 수 있어요. 모든 작성자가 새 아이스버그 테이블로 전환되면 마이그레이션 과정이 완료된 것으로 간주돼요.

테이블 마이그레이션 (Migrate Table)

테이블 마이그레이션 작업도 소스 테이블과 동일한 스키마와 파티셔닝을 가진 새 아이스버그 테이블을 만들어요. 다만 작업을 실행하는 동안 소스 테이블을 잠그고 카탈로그에서 제거해요. 따라서 테이블 마이그레이션을 수행하기 전에는 소스 테이블에서 일어나는 모든 수정 작업을 중지해야 해요.

소스 테이블과 상호작용하는 모든 작성자를 중지해요. 아이스버그를 지원하는 읽기 작업자라면 계속 읽을 수 있어요.

  • 소스 테이블과 동일한 식별자와 메타데이터(스키마, 파티션 스펙 등)를 가진 새 아이스버그 테이블을 만들어요. 실패와 롤백에 대비해 소스 테이블을 백업용으로 이름을 변경해둬요.
  • 모든 파티션의 데이터 파일을 새 아이스버그 테이블에 커밋하고, 소스 테이블을 제거해요. 작성자는 새 아이스버그 테이블에 쓰기 시작할 수 있어요.

파일 추가 (Add Files)

초기 단계(스냅샷 테이블 또는 테이블 마이그레이션) 이후에는 마이그레이션되지 않은 데이터 파일이 발견되기 마련이에요. 이 파일들은 보통 마이그레이션 중이나 후에도 소스 테이블에 계속 쓰는 동시 작성자들로부터 만들어져요. 실제로 이 파일들은 하이브 테이블의 새 데이터 파일이거나 델타 레이크 테이블의 새 스냅샷(버전)일 수 있어요. 파일 추가 작업은 이런 파일들을 아이스버그 테이블에 포함시키는 데 필수적이에요.

다른 테이블 포맷에서 마이그레이션하기 (Migrating From Different Table Formats)

  • 하이브에서 아이스버그로 (From Hive to Iceberg)
  • 델타 레이크에서 아이스버그로 (From Delta Lake to Iceberg)

더 알아보기 (Learn more)