Hive 테이블 생성: 내부 테이블 생성, 수정 및 삭제 예제
⚡ 스마트 요약
생성, 변경 및 삭제ping Apache Hive의 테이블은 익숙한 SQL 스타일의 DDL을 사용하지만, 결과는 테이블이 Hive가 소유하는 내부 테이블인지 아니면 단순히 파일을 설명하는 외부 테이블인지에 따라 달라집니다.
테이블 생성, 수정 및 삭제와 같은 테이블 작업ping 이 실습에서는 Hive의 테이블을 살펴볼 수 있습니다. 각 작업은 먼저 실제 세션으로 보여준 다음, 재사용 가능한 명령문으로 보여줍니다.
Hive에서 테이블을 생성, 수정 및 삭제하는 방법
아래 스크린샷에서는 열이 있는 테이블을 만들고 테이블 이름을 변경하고 있습니다.
- "empid"와 "empname"이라는 두 개의 열 이름을 가진 guru_sample 테이블을 생성합니다.
- guru99 데이터베이스에 있는 테이블을 표시합니다.
- guru_sample이 테이블 아래에 표시됩니다.
- "guru_sample" 테이블을 "guru_sampleNew"로 변경합니다.
- 다시 말해, "show" 명령을 실행하면 guru_sampleNew라는 새 이름이 표시될 것입니다.
아래 세션에서는 다섯 단계를 순서대로 모두 진행합니다. 벌집> 프롬프트가 표시되고, 이름 변경 전후에 두 번 SHOW TABLES를 호출하면 그 효과가 나타납니다.
드롭ping 테이블 guru_sampleNew:
DROP TABLE 문 하나만으로 이름이 변경된 테이블이 삭제되고, Hive는 OK라고 응답합니다.
Hive CREATE TABLE 구문 및 공통 절
위 예시는 가능한 가장 간결한 형태를 사용했습니다. 문서화된 구문은 여러 선택적 절을 허용하며, 각 절은 예시에서 기본값으로 설정된 부분을 결정합니다.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| 절 | 그것이 제어하는 것 |
|---|---|
| 외부 | 외부 테이블을 생성하므로 DROP 명령을 실행해도 데이터 파일은 그대로 유지됩니다. |
| 일시적인 | 세션이 종료되면 사라지는 세션 범위 테이블을 생성합니다. |
| 존재하지 않는 경우 | 같은 이름의 테이블이 이미 존재하는 경우 오류를 억제합니다. |
| 분할 기준 | 테이블을 키 값별로 하나의 디렉터리로 분할합니다. |
| …로 묶인 n개의 버킷 | 해시된 행들을 고정된 개수의 파일로 저장합니다. |
| 행 형식 / 저장 방식 | 구분자 또는 SerDe와 파일 형식(예: TEXTFILE, ORC 또는 Parquet)을 설정합니다. |
| 위치 | 테이블이 웨어하우스 기본값 대신 특정 HDFS 경로를 가리키도록 합니다. |
| TBLPROPERTIES | external.table.purge를 포함한 메타데이터 키-값 쌍을 첨부합니다. |
관련 형태, CREATE TABLE new_table LIKE existing_table스키마만 복사하고 행은 복사하지 않습니다. PARTITIONED BY 및 CLUSTERED BY와 같은 구조적 절은 가이드에서 자세히 다룹니다. 하이브 파티션 및 버킷.
테이블 유형 및 사용법
테이블에 관해서는 기존 관계형 데이터베이스에서 테이블을 생성하는 방식과 동일합니다. 필터링이나 조인과 같은 기능들을 테이블에서 수행할 수 있습니다.
Hive는 스키마의 로딩 및 설계 방식에 따라 내부 테이블과 외부 테이블이라는 두 가지 유형의 테이블 구조를 처리합니다. 하이브이 선택은 단순히 외형적인 것이 아닙니다. 데이터 파일의 소유권과 테이블이 삭제될 때 해당 파일에 어떤 일이 발생하는지를 결정하는 것입니다.
Hive의 내부 테이블
- 내부 테이블은 본질적으로 밀접하게 연결되어 있습니다. 이러한 유형의 테이블에서는 먼저 테이블을 생성한 다음 데이터를 로드해야 합니다.
- 이것을 스키마상의 데이터라고 부를 수 있습니다.
- 드롭ping 이 테이블의 데이터와 스키마 모두 삭제될 예정입니다.
- 이 테이블의 저장 위치는 /user/hive/warehouse입니다.
- 내부 테이블은 관리형 테이블이라고도 하며, TRUNCATE, ARCHIVE, MERGE, CONCATENATE 및 ACID 트랜잭션을 지원하는 유일한 테이블입니다.
내부 테이블을 언제 선택해야 합니까?
- 처리 데이터가 로컬 파일 시스템에 있는 경우
- Hive가 삭제를 포함하여 데이터의 전체 수명주기를 관리하도록 하려는 경우
내부 테이블의 샘플 코드 조각
- 내부 테이블을 생성하려면
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- 내부 테이블에 데이터 로드
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- 테이블의 내용을 표시합니다.
Hive>select * from guruhive_internaltable;
- 내부 테이블을 삭제하려면
Hive>DROP TABLE guruhive_internaltable;
guruhive_internaltable을 삭제하면 메타데이터와 데이터를 포함한 모든 데이터가 Hive에서 삭제됩니다. PURGE 옵션을 지정하지 않으면 파일은 즉시 제거되는 대신 HDFS 휴지통 폴더로 이동됩니다.
다음 스크린샷에서 볼 수 있듯이, 한 세션에서 네 가지 명령이 모두 실행되어 성공적으로 삭제되었습니다.
위 코드와 스크린샷에서 볼 수 있듯이, 우리는 다음과 같은 작업을 수행합니다.
- 내부 테이블 만들기
- 내부 테이블에 데이터 로드
- 테이블의 내용을 표시합니다.
- 내부 테이블을 삭제하려면
Hive의 외부 테이블
- 외부 테이블은 본질적으로 느슨하게 결합되어 있습니다. 데이터는 HDFS에서 사용할 수 있습니다. 해당 테이블은 HDFS 데이터에 생성될 예정입니다.
- 다시 말해, 데이터에 스키마를 생성하는 것이라고 할 수 있습니다.
- 떨어뜨릴 당시ping 테이블은 스키마만 삭제될 뿐, 데이터는 이전과 마찬가지로 HDFS에 그대로 남아 있습니다.
- 외부 테이블은 스키마가 업데이트될 때마다 데이터를 삭제하는 대신 HDFS에 저장된 데이터에 대해 여러 스키마를 생성하는 옵션을 제공합니다.
- Hive 4.0.0 버전부터 테이블 속성 external.table.purge를 true로 설정하면 DROP 명령으로 데이터도 함께 삭제됩니다.
언제 외부 테이블을 선택해야 합니까?
- 처리 데이터가 HDFS에 있는 경우
- 파일이 Hive 외부에서 사용될 때 유용합니다.
외부 테이블의 샘플 코드 조각
- 외부 테이블 생성
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- 테이블 생성 시 위치를 지정하지 않으면 데이터를 수동으로 로드할 수 있습니다.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- 테이블의 내용을 표시합니다.
Hive>select * from guruhive_external;
- 외부 테이블을 삭제하려면
Hive>DROP TABLE guruhive_external;
다음 스크린샷에서 출력 결과를 확인할 수 있습니다. 마지막 드롭 명령은 스키마만 삭제하며, LOCATION 경로 아래의 파일은 그대로 유지됩니다.
위 코드에서는 다음과 같은 작업을 수행합니다.
- 외부 테이블 만들기
- 외부 테이블에 데이터 로드
- 테이블의 내용을 표시합니다.
- 드롭ping 외부 테이블
내부 테이블과 외부 테이블의 차이점
| 제품 특장점 | 내부의 | 외부 |
|---|---|---|
| 개요 | 스키마 데이터 | 데이터에 대한 스키마 |
| 보관 장소 | /사용자/하이브/창고 | LOCATION에 의해 제공되는 HDFS 위치 |
| 데이터 가용성 | 로컬 파일 시스템 내 | HDFS 내 |
| DROP의 효과 | 스키마와 데이터를 삭제합니다. | external.table.purge가 true가 아닌 경우 스키마만 삭제합니다. |
| TRUNCATE 지원 | 지원 | 지원되지 않음 |
| ACID 거래 | 지원 | 지원되지 않음 |
The Apache Hive 문서 규칙은 다음과 같이 명확하게 명시되어 있습니다. Hive는 관리형 테이블의 데이터에 대해서는 소유권을 갖고 있다고 가정하고, 외부 테이블의 데이터에 대해서는 소유권을 갖고 있지 않다고 가정하며, 위의 모든 차이점은 바로 이 단일한 가정에서 비롯됩니다.
ALTER TABLE 및 DROP TABLE 명령어 참조
위 스크린샷은 이름 변경과 삭제만 보여줍니다. 이는 실무자가 기존 테이블에서 가장 자주 사용하는 명령입니다.
| 성명서 | 목적 |
|---|---|
| ALTER TABLE table_name RENAME TO new_name; | 테이블 이름을 변경합니다. 관리형 테이블의 경우 HDFS 디렉터리도 함께 이동합니다. |
| ALTER TABLE table_name ADD COLUMNS (col_name data_type); | 스키마 끝에 하나 이상의 열을 추가합니다. |
| ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; | 열의 이름을 바꾸거나 열의 형식을 변경합니다. |
| ALTER TABLE table_name REPLACE COLUMNS (…); | 기존 열 목록 전체를 새 목록으로 바꿉니다. |
| ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | 관리형 테이블을 외부 테이블로 변환하고, FALSE는 이를 되돌립니다. |
| DROP TABLE [IF EXISTS] table_name [PURGE]; | 테이블을 삭제합니다. PURGE 명령은 휴지통 폴더를 건너뛰므로 데이터를 복구할 수 없습니다. |
| [테이블] table_name을 비웁니다. | 모든 행을 삭제하지만 스키마는 유지합니다. 관리형 테이블에만 해당됩니다. |
스크립트에 두 가지 안전장치를 추가하는 것이 좋습니다. IF EXISTS는 이미 삭제된 테이블에 대한 삭제 작업이 실패하는 것을 방지하고, DESCRIBE FORMATTED는 삭제 작업 실행 전에 대상 테이블이 MANAGED_TABLE인지 EXTERNAL_TABLE인지 확인합니다.





