복붙노트

[HADOOP] 하이브의 외부 테이블과의 혼동

HADOOP

하이브의 외부 테이블과의 혼동

아래 명령을 사용하여 하이브 외부 테이블을 만들었습니다.

 use hive2;

create external table depTable (depId int comment 'This is the unique id for each dep', depName string,location string) comment 'department table' row format delimited fields terminated by "," 
stored as textfile location '/dataDir/';  

자, 내가 HDFS를 볼 때 나는 db를 볼 수 있지만 창고에는 depTable이 없다.

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
[cloudera@quickstart ~]$ 

위에는이 DB에 생성 된 테이블이 없음을 볼 수 있습니다. 내가 아는 한 외부 테이블은 하이브 창고에 저장되지 않습니다. 내가 맞습니까? 그렇다면 어디에 저장되어 있습니까 ?? 그러나 먼저 외부 테이블을 생성 한 다음 데이터를로드하면 hive2.db 내부에서 파일을 볼 수 있습니다.

hive> create external table depTable (depId int comment 'This is the unique id for each dep', depName string,location string) comment 'department table' row format delimited fields terminated by "," stored as textfile;
OK
Time taken: 0.056 seconds
hive> load data inpath '/dataDir/department_data.txt' into table depTable;
Loading data to table default.deptable
Table default.deptable stats: [numFiles=1, totalSize=90]
OK
Time taken: 0.28 seconds
hive> select * from deptable;
OK
1001    FINANCE SYDNEY
2001    AUDIT   MELBOURNE
3001    MARKETING   PERTH
4001    PRODUCTION  BRISBANE

자, 만약 내가 hadoop fs 쿼리를 발사하면 아래와 같이 데이터베이스 아래에이 테이블을 볼 수 있습니다 :

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
Found 1 items
drwxrwxrwx   - cloudera supergroup          0 2019-01-17 09:07 /user/hive/warehouse/hive2.db/deptable  

테이블을 삭제해도 여전히 HDFS에서 테이블을 볼 수 있습니다.

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
Found 1 items
drwxrwxrwx   - cloudera supergroup          0 2019-01-17 09:11 /user/hive/warehouse/hive2.db/deptable  

그래서, 외부 테이블의 정확한 동작은 무엇입니까 ?? LOCATION 키워드를 사용하여 만들 때 어디에 저장되고로드 문을 사용하여 만들 때 HDFS에 저장되는 이유와 삭제 후 삭제되지 않는 이유는 무엇입니까?

해결법

  1. ==============================

    1.EXTERNAL 및 MANAGED 테이블 간의 주요 차이점은 테이블 / 파티션 동작 삭제입니다. MANAGED 테이블 / 파티션을 삭제하면 데이터 파일이있는 위치도 제거됩니다. EXTERNAL 테이블을 제거하면 데이터 파일이있는 위치는 그대로 유지됩니다.

    EXTERNAL 및 MANAGED 테이블 간의 주요 차이점은 테이블 / 파티션 동작 삭제입니다. MANAGED 테이블 / 파티션을 삭제하면 데이터 파일이있는 위치도 제거됩니다. EXTERNAL 테이블을 제거하면 데이터 파일이있는 위치는 그대로 유지됩니다.

    EXTERNAL 테이블과 MANAGED는 DDL에 지정된 위치에 저장됩니다. 이미 위치에있는 데이터 파일을 사용하여 기존 위치 위에 테이블을 만들 수 있습니다.이 위치는 EXTERNAL 또는 MANAGED 모두 작동하며 중요하지 않습니다.

    같은 위치 위에 EXTERNAL 및 MANAGED 테이블을 만들 수도 있습니다. 자세한 내용과 테스트로이 답변을 참조하십시오. https://stackoverflow.com/a/54038932/2700344

    위치를 지정한 경우 두 유형의 테이블 모두에 대해 해당 위치에 데이터가 저장됩니다. 위치를 지정하지 않은 경우, 데이터는 관리되는 테이블과 외부 테이블의 기본 위치 인 /user/hive/warehouse/database_name.db/table_name에 있습니다.

    또한 Managed vs External Tables에 대한 공식 Hive 문서를 참고하십시오.

  2. from https://stackoverflow.com/questions/54241071/confusion-with-the-external-tables-in-hive by cc-by-sa and MIT license