Hive
[Hive] Managed Table과 External Table
heed159
2022. 4. 19. 15:16
Hive에는 내부 테이블과 외부 테이블이 있다. 이 둘의 가장 큰 차이점은 테이블의 소유자가 hive 이냐, 아니냐로 나눌 수 있다.
- Managed Table : 하이브 속성(hive.metastore.warehouse.dir)에서 정의한 디렉터리의 하위 디렉터리를 만들어서 데이터를 저장한다. 하이브에서 Managed Table을 삭제하면 테이블 내의 데이터도 삭제된다.
- External Table : 테이블을 생성할 때 External 키워드를 사용하며, LOCATION 절에 데이터 저장 위치를 알려주어 데이터가 존재한다는 것을 하이브에게 알려준다. Managed Table과 가장 큰 차이점은 하이브에서 외부 테이블을 삭제하면 하이브 내의 스키마만 삭제될 뿐 데이터는 그대로 보존된다. 따라서 중요한 데이터는 External Table로 생성하는 것을 권장한다.
테이블의 속성이 내부인지 외부인지 확인할 수 있는 방법은 DESCRIBE EXTENDED 명령어를 사용한다.
hive> DESCRIBE EXTENDED 테이블명;
그럼 직접 확인해보자.
Managed Table
내부 테이블을 생성한 다음 데이터를 넣고 삭제까지 해보겠다.
hive> create table t1 (col1 int, col2 int)
> stored as textfile;
OK
Time taken: 2.342 seconds
hive> insert into t1 values (1,2);
.
.
OK
실제로 테이블이 생성되었는지 확인한다. 기본 경로 (/user/hive/warehouse/)
t1이 생성된 것을 확인할 수 있다.
[hadoop@node1 ~]$ hdfs dfs -ls /user/hive/warehouse/
Found 7 items
drwxr-xr-x - hadoop supergroup 0 2022-04-15 17:41 /user/hive/warehouse/jy_test.db
drwxr-xr-x - hadoop supergroup 0 2022-04-01 12:03 /user/hive/warehouse/l0
drwxr-xr-x - hadoop supergroup 0 2022-03-29 13:15 /user/hive/warehouse/l1
drwxr-xr-x - root supergroup 0 2022-03-21 11:18 /user/hive/warehouse/st
drwxr-xr-x - hadoop supergroup 0 2022-03-24 10:31 /user/hive/warehouse/st1
drwxr-xr-x - hadoop supergroup 0 2022-04-19 14:35 /user/hive/warehouse/t1
drwxr-xr-x - root supergroup 0 2022-03-22 13:23 /user/hive/warehouse/test.db
하이브에서 테이블을 삭제하고 HDFS 디렉터리를 조회하면 t1이 삭제된 것을 볼 수 있다.
hive> drop table t1;
OK
[hadoop@node1 ~]$ hdfs dfs -ls /user/hive/warehouse/
Found 6 items
drwxr-xr-x - hadoop supergroup 0 2022-04-15 17:41 /user/hive/warehouse/jy_test.db
drwxr-xr-x - hadoop supergroup 0 2022-04-01 12:03 /user/hive/warehouse/l0
drwxr-xr-x - hadoop supergroup 0 2022-03-29 13:15 /user/hive/warehouse/l1
drwxr-xr-x - root supergroup 0 2022-03-21 11:18 /user/hive/warehouse/st
drwxr-xr-x - hadoop supergroup 0 2022-03-24 10:31 /user/hive/warehouse/st1
drwxr-xr-x - root supergroup 0 2022-03-22 13:23 /user/hive/warehouse/test.db
External Table
테이블을 생성하고 데이터를 삽입한다.
hive> create external table t2 (col1 int, col2 int)
> stored as textfile;
OK
hive> insert into t2 values (1,2);
.
.
OK
테이블을 확인하면 t2가 생성되었다.
[hadoop@node1 ~]$ hdfs dfs -ls /user/hive/warehouse/
Found 7 items
drwxr-xr-x - hadoop supergroup 0 2022-04-15 17:41 /user/hive/warehouse/jy_test.db
drwxr-xr-x - hadoop supergroup 0 2022-04-01 12:03 /user/hive/warehouse/l0
drwxr-xr-x - hadoop supergroup 0 2022-03-29 13:15 /user/hive/warehouse/l1
drwxr-xr-x - root supergroup 0 2022-03-21 11:18 /user/hive/warehouse/st
drwxr-xr-x - hadoop supergroup 0 2022-03-24 10:31 /user/hive/warehouse/st1
drwxr-xr-x - hadoop supergroup 0 2022-04-19 15:11 /user/hive/warehouse/t2
drwxr-xr-x - root supergroup 0 2022-03-22 13:23 /user/hive/warehouse/test.db
하이브에서 테이블을 삭제했지만 HDFS에서는 삭제되지 않을 것을 확인할 수 있다.
hive> drop table t2;
OK
Time taken: 1.864 seconds
[hadoop@node1 ~]$
[hadoop@node1 ~]$ hdfs dfs -ls /user/hive/warehouse/
Found 7 items
drwxr-xr-x - hadoop supergroup 0 2022-04-15 17:41 /user/hive/warehouse/jy_test.db
drwxr-xr-x - hadoop supergroup 0 2022-04-01 12:03 /user/hive/warehouse/l0
drwxr-xr-x - hadoop supergroup 0 2022-03-29 13:15 /user/hive/warehouse/l1
drwxr-xr-x - root supergroup 0 2022-03-21 11:18 /user/hive/warehouse/st
drwxr-xr-x - hadoop supergroup 0 2022-03-24 10:31 /user/hive/warehouse/st1
drwxr-xr-x - hadoop supergroup 0 2022-04-19 15:11 /user/hive/warehouse/t2
drwxr-xr-x - root supergroup 0 2022-03-22 13:23 /user/hive/warehouse/test.db