Hive에는 internal table과 external table 두 가지 유형의 테이블이 있습니다.
파악한 바로는 table drop 시 관련 데이터가 같이 삭제되는지/삭제되지 않는지만 차이가 존재하는데, 혹시 다른 차이점을 아신다면 댓글로 남겨주세요~!
Internal or Managed Table (내부 테이블)
- internal(managed) table은 말 그대로 관련 데이터를 내부에서 관리하는 테이블입니다.
- 테이블 생성 시 location이 hive.metastore.warehouse.dir 속성이 가리키는 directory가 됩니다.
- 기본적으로 /user/hive/warehouse/databasename.db/tablename/
- location 속성을 통해 테이블의 위치를 변경해줄 수 있습니다.
- 테이블을 삭제하면 관련 데이터 및 메타스토어 데이터가 모두 삭제됩니다.
create table sample_internal_table (
name string
, age int
)
External Table (외부 테이블)
- 반면 external table은 외부 데이터를 바라보는 테이블입니다.
- 데이터 위치를 따로 설정해주어야 하며 따로 location을 설정하지 않으면, internal table 로직과 동일하게 location이 설정됩니다.
- 테이블을 drop 하더라도 관련 데이터는 삭제되지 않고, 메타스토어 데이터만 삭제됩니다.
- 같은 원본 테이블을 바라보는 table이 많거나 중요한 파일일 때는 external table을 사용하는 것이 좋습니다.
create external table sample_external_table (
name string
, age int
) location '/file/path/some/where';
Internal Table을 External Table로 변환
- table의 유형을 변경하고 싶다면 다음 명령어로 쉽게 변경할 수 있습니다.