BigData/Hive

[Hive] External vs. Internal

twoDeveloper 2022. 9. 29. 17:00

개요

Hive에서 External Table과 Internal Table의 차이점에 대해 파악하고, 실습을 진행해 보겠습니다.


 

Internal Table

Internal Table은 Manged Table이라고 하며, Table 생성 시 따로 Option을 주지 않으면 기본 저장 위치 ‘hive.metastore.warehouse.dir’에 정의한 하위 디렉터리를 만들어서 Data를 저장합니다.

ex) hdfs:///user/hive/warehouse/{DB명}.db/{Table 명}

 

Internal Table은 Drop 시에 Table의 Data 및 MetaData 또한 완전히 삭제되므로 주의하여야 합니다. 세션이 종료 되어도 Table의 Data와 파일은 유지 됩니다.

 

실습

shakespeare_wc Table 생성

hive> CREATE TABLE IF NOT EXISTS shakespeare_wc (
      word  STRING,
      count INT
      )
      ROW FORMAT
      DELIMITED FIELDS TERMINATED BY '\t';

* IF NOT EXISTS

IF NOT EXISTS Option을 사용해서 Table을 생성하면 하위 디렉토리가 생성되지 않습니다.

 

shakespeare_wc Table에 Data Load

hive> LOAD DATA LOCAL INPATH '/home/ktnexr/data/' INTO TABLE shakespeare_wc;

다음과 같이 shakespeare_wc 하위 디렉토리에 Data가 Load 된 것을 확인 할 수 있습니다.

 

Drop Table

hive> DROP TABLE shakespeare_wc;

Table을 Drop 하면 다음과 같이 Table의 Data 및 Metadata가 모두 삭제 되는 것을 확인할 수 있습니다.


External Table

HDFS 상에서 존재하는 원본 Data를 기반으로 Table을 만들기 때문에 Schema만 정의 해주면 됩니다. External Table은 Table 생성 시에 Option으로 ‘EXTERNAL’을 붙여야 하고, Table을 Drop 하여도 Table의 Data 및 Metadata는 삭제되지 않습니다.

 

실습

External Table 생성

hive> CREATE EXTERNAL TABLE IF NOT EXISTS shakespeare_wc (
      word STRING,
      count INT
      )
      ROW FORMAT
      DELIMITED FIELDS TERMINATED BY '\t'
      LOCATION '/test/';

 

shakespeare_wc Table에 Data Load

hive> LOAD DATA LOCAL INPATH '/home/ktnexr/data/' INTO TABLE shakespeare_wc;

/test 하위 디렉토리에 Data가 Load 된 것을 확인할 수 있습니다.

 

Drop Table

hive> DROP TABLE shakespeare_wc;

보시는 것과 같이 shakespeare_wc EXTERNAL TABLE은 삭제 되었지만, Data와 Metadata는 그대로 존재하는 것을 확인할 수 있습니다.

'BigData > Hive' 카테고리의 다른 글

[Hive] Hive 란?  (0) 2022.09.20