external table vs. internal(=managed) table

한펭귄·2023년 6월 14일
0

Hive

목록 보기
1/1

클라우데라 공식 문서 : hive_create_an_external_table

external table 관련 내용 번역

external table, which is a table that Hive does not manage, to import data from a file on a file system, into Hive. In contrast to the Hive managed table, an external table keeps its data outside the Hive metastore. Hive metastore stores only the schema metadata of the external table. Hive does not manage, or restrict access, to the actual external data.

  • Hive가 관리하지 않고, 데이터를 file system의 파일에서 Hive로 가져와 사용하는 것
  • Managed table과 달리, external table의 데이터는 Hive metastore 외부에 있다.
  • external table의 schema metadata만 Hive metastore에 저장된다.
  • Hive는 실제 external data에 대해 관리하거나 접근제한을 하지 않는다!

internal(managed) table과의 가장 큰 차이

  • DROP TABLE statement를 실행했을 때 차이가 남

    • External table : Hive에서 Drop 실행 시 metadata만 삭제, 실제 데이터는 남아있음
    • Managed table drop: Hive에서 Drop 실행 시 Hive warehouse에 있는 data와 metadata 다 삭제
  • 데이터 위치도 당연히 차이(참고 : https://sequencedata.tistory.com/40)

    • External table : HDFS의 어디든(?) 위치하는 파일로 생성
    • Internal table : /user/hive/warehouse/databasename.db/tablename/ 경로에 생성

Hive에서 관리하는 테이블 종류 및 구조 그림 참고

사용 시 주의

  • 배경 :
    • 현업에서 외부 데이터를 Hive로 불러오기 위해 중간에 외부데이터 file을 HDFS에 넣고 그걸 external table로 생성한 후 internal 테이블에 데이터를 넣어주는 상황
    • load data into를 쓰거나, temporary table이었으면 hive에서 알아서 관리해주며 데이터를 지워주었겠지만, external로 만들다보니 위의 설명처럼 Hive는 실제 데이터에는 관여를 안하기 때문에 이미 internal table에 데이터가 들어갔지만 계속해서 외부데이터 파일이 HDFS 용량을 차지하게 됨
  • 결론 : external table을 사용할 때는 실제 데이터를 삭제하는 것에 주의를 기울여야한다!
profile
얼레벌레 개발 어떻게든 가보자고 하는 이야기

0개의 댓글