관리형(Managed) 테이블과 외부(External) 테이블
관리형(Managed) 테이블과 외부(External) 테이블
Hive는 본질적으로 두 종류의 테이블을 알고 있어요. 관리형(Managed, 내부 Internal) 테이블과 외부(External) 테이블이에요. 핵심 차이는 Hive가 데이터를 "소유"하느냐의 여부 — 관리형 테이블은 데이터 파일도 함께 관리해 DROP 시 삭제되지만, 외부 테이블은 메타데이터만 관리하고 데이터 파일은 Hive 밖의 프로세스가 다뤄요.
출처: 문서
본문
Hive는 본질적으로 두 종류의 테이블을 알고 있어요:
- Managed (Internal)
- External
소개 (Introduction)
이 문서는 둘 사이의 몇 가지 차이점을 나열하지만, 근본적인 차이는 Hive가 관리형(managed) 테이블의 데이터를 소유한다고 가정한다는 거예요. 즉 데이터, 그 속성, 데이터 레이아웃은 Hive 명령으로만 변경될 수 있고 변경되어야 해요. 데이터는 여전히 일반 파일 시스템에 존재하며, Hive에 알리지 않고 변경하지 못하게 막는 것은 없어요. 하지만 그렇게 하면 Hive의 불변 사항과 기대를 위반해 정의되지 않은 동작이 생길 수 있어요.
또 다른 결과는 데이터가 Hive 엔티티에 부착된다는 거예요. 따라서 엔티티를 변경할 때마다(예: 테이블 drop) 데이터도 변경돼요(이 경우 데이터는 삭제됨). 이는 데이터 파일을 직접 관리하지 않고 SQL 기반 접근을 사용하는 전통적인 RDBMS와 매우 비슷해요.
외부(external) 테이블의 경우 Hive는 데이터를 관리하지 않는다고 가정해요.
관리형/외부 테이블은 DESCRIBE FORMATTED table_name 명령으로 식별할 수 있는데, 테이블 타입에 따라 MANAGED_TABLE 또는 EXTERNAL_TABLE을 표시해요.
Statistics는 쿼리 최적화를 위해 내부 및 외부 테이블과 파티션에서 관리될 수 있어요.
기능 비교 (Feature comparison)
즉 두 테이블 타입 중 하나에서만 사용할 수 있는 기능이 많아요. 이는 불완전한 목록이에요:
ARCHIVE/UNARCHIVE/TRUNCATE/MERGE/CONCATENATE는 관리형 테이블에서만 동작해요.DROP은 관리형 테이블에서는 데이터를 삭제하지만, 외부 테이블에서는 메타데이터만 삭제해요.ACID/Transactional은 관리형 테이블에서만 동작해요.- Query Results Caching은 관리형 테이블에서만 동작해요.
- 외부 테이블에서는
RELY제약 조건만 허용돼요. - 일부 Materialized View 기능은 관리형 테이블에서만 동작해요.
관리형 테이블 (Managed tables)
관리형 테이블은 hive.metastore.warehouse.dir 경로 속성 아래 저장되며, 기본적으로 /user/hive/warehouse/databasename.db/tablename/과 유사한 폴더 경로에 있어요. 기본 위치는 테이블 생성 시 location 속성으로 재정의할 수 있어요. 관리형 테이블이나 파티션이 drop되면 그 테이블/파티션과 연관된 데이터와 메타데이터가 삭제돼요. PURGE 옵션을 지정하지 않으면 데이터는 정의된 기간 동안 휴지통(trash) 폴더로 이동돼요.
Hive가 테이블의 수명 주기를 관리해야 하거나, 임시 테이블을 생성할 때 관리형 테이블을 사용해요.
외부 테이블 (External tables)
외부 테이블은 외부 파일에 대한 메타데이터/스키마를 기술해요. 외부 테이블 파일은 Hive 외부의 프로세스가 접근하고 관리할 수 있어요. 외부 테이블은 Azure Storage Volumes(ASV) 또는 원격 HDFS 위치 같은 소스에 저장된 데이터에 접근할 수 있어요. 외부 테이블의 구조나 파티셔닝이 변경되면 MSCK REPAIR TABLE table_name 문을 사용해 메타데이터 정보를 새로고침할 수 있어요.
파일이 이미 존재하거나 원격 위치에 있고, 테이블이 drop되어도 파일이 유지되어야 한다면 외부 테이블을 사용해요.
더 알아보기 (Learn more)
- Hive DDL 매뉴얼에서
CREATE TABLE과DESCRIBE FORMATTED문법을 자세히 볼 수 있어요. - Hive 언어 매뉴얼에서 더 많은 기능을 확인할 수 있어요.