Language/Hive

[Hive] Managed Table vs External Table

12.tka 2023. 1. 9. 04:40
728x90

하이브에서 테이블을 생성할 때 Managed 또는 External 중 어떤 유형으로 생성할 것인지 결정할 수 있습니다.

 

Managed 테이블은 내부 테이블이라고도 불립니다. Hive가 데이터와 메타데이터의 모든 부분을 관리하기 때문에 내부 테이블이라고 부루는 것 같네요. Managed 테이블 혹은 테이블의 특정 파티션을 삭제하면 해당 데이터도 삭제됩니다.

 

External 테이블은 외부 테이블이라고도 불립니다. Hive 외부에 데이터가 저장되고, Hive는 메타데이터만을 관리하기 때문에 외부 테이블이라고 부르는 것 같네요. Managed 테이블과 다르게 External 테이블 혹은 특정 파티션을 삭제하면 Hive 메타데이터가 삭제되지만, 실제 데이터는 그대로 유지됩니다.

 

하이브 3.0 이전의 버전에서는 Managed Table이 기본값이며, 하이브 3.0 이후부터는 External Table이 기본값입니다. Managed Table에서 External Table로 흐름이 바뀌고 있는 걸 암시할 수도 있겠네요..!?

 

여러 애플리케이션이 동일한 데이터에 접근해야 하는 경우 External 테이블을 추천하고 Hive만이 데이터에 접근하는 경우 Managed 테이블을 사용하는 것이 좋다고 하네요. External이 조금 더 범용적인 것 같습니다. 하지만, 저는 데이터를 주기적으로 삭제해야 하는데 Externa 테이블이 Managed 테이블 보다 삭제 과정이 더 번거로운 것 같아 Managed Table을 주로 사용하고 있습니다. 어떤 테이블이 좋다고 생각하기보다는 자신의 상황에 맞는 테이블을 쓰는 게 바람직해 보이네요 :)

 

혹시나 테이블 설정을 잘못하셨다면 아래 명령어를 통해 쉽게 테이블의 속성을 수정할 수 있습니다.

-- Managed Table
ALTER TABLE table_name SET TBLPROPERTIES('EXTERNAL'='FALSE');

-- External Table
ALTER TABLE table_name SET TBLPROPERTIES('EXTERNAL'='TRUE');
728x90