Hive 테이블 생성: 내부 테이블 생성, 수정 및 삭제 예제

⚡ 스마트 요약

생성, 변경 및 삭제ping Apache Hive의 테이블은 익숙한 SQL 스타일의 DDL을 사용하지만, 결과는 테이블이 Hive가 소유하는 내부 테이블인지 아니면 단순히 파일을 설명하는 외부 테이블인지에 따라 달라집니다.

  • 🧱 테이블 만들기: 하나의 명령문으로 Hive 테이블의 열, 행 형식, 그리고 선택적으로 저장 위치를 ​​정의할 수 있습니다.
  • 🏷️ 테이블 변경: RENAME은 테이블 이름을 변경하고, ADD COLUMNS 또는 CHANGE COLUMN은 데이터를 다시 로드하지 않고 스키마를 편집합니다.
  • 🗑️ 테이블 삭제: 드롭ping 내부 테이블 삭제는 스키마와 데이터를 모두 삭제하는 반면, 일반 삭제는 데이터를 삭제합니다.ping 외부 테이블은 메타데이터만 제거합니다.
  • 🔒 내부 소유입니다: 내부 테이블 또는 관리형 테이블은 웨어하우스 디렉터리 아래에 있으며 Hive는 해당 테이블의 전체 수명 주기를 제어합니다.
  • 🔗 외부 참조: 외부 테이블은 다른 도구에서도 읽는 파일을 가리키므로 해당 파일은 데이터 손실 후에도 유지됩니다.
  • 🔎 유형을 확인하세요: DESCRIBE FORMATTED는 MANAGED_TABLE 또는 EXTERNAL_TABLE을 보고하므로 삭제 전에 추측할 필요가 없습니다.

Hive 테이블 생성, 변경 및 삭제 명령어 예시

테이블 생성, 수정 및 삭제와 같은 테이블 작업ping 이 실습에서는 Hive의 테이블을 살펴볼 수 있습니다. 각 작업은 먼저 실제 세션으로 보여준 다음, 재사용 가능한 명령문으로 보여줍니다.

Hive에서 테이블을 생성, 수정 및 삭제하는 방법

아래 스크린샷에서는 열이 있는 테이블을 만들고 테이블 이름을 변경하고 있습니다.

  1. "empid"와 "empname"이라는 두 개의 열 이름을 가진 guru_sample 테이블을 생성합니다.
  2. guru99 데이터베이스에 있는 테이블을 표시합니다.
  3. guru_sample이 테이블 아래에 표시됩니다.
  4. "guru_sample" 테이블을 "guru_sampleNew"로 변경합니다.
  5. 다시 말해, "show" 명령을 실행하면 guru_sampleNew라는 새 이름이 표시될 것입니다.

아래 세션에서는 다섯 단계를 순서대로 모두 진행합니다. 벌집> 프롬프트가 표시되고, 이름 변경 전후에 두 번 SHOW TABLES를 호출하면 그 효과가 나타납니다.

Hive 세션에서 guru_sample을 생성하고 이름을 guru_sampleNew로 변경합니다.

드롭ping 테이블 guru_sampleNew:

DROP TABLE 문 하나만으로 이름이 변경된 테이블이 삭제되고, Hive는 OK라고 응답합니다.

벌집 껍질 떨어뜨리기ping guru_sampleNew 테이블에 대한 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가 삭제를 포함하여 데이터의 전체 수명주기를 관리하도록 하려는 경우

내부 테이블의 샘플 코드 조각

  1. 내부 테이블을 생성하려면
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. 내부 테이블에 데이터 로드
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. 테이블의 내용을 표시합니다.
        Hive>select * from guruhive_internaltable;
  4. 내부 테이블을 삭제하려면
        Hive>DROP TABLE guruhive_internaltable;

guruhive_internaltable을 삭제하면 메타데이터와 데이터를 포함한 모든 데이터가 Hive에서 삭제됩니다. PURGE 옵션을 지정하지 않으면 파일은 즉시 제거되는 대신 HDFS 휴지통 폴더로 이동됩니다.

다음 스크린샷에서 볼 수 있듯이, 한 세션에서 네 가지 명령이 모두 실행되어 성공적으로 삭제되었습니다.

Hive 세션 생성, 로드, 쿼리 및 삭제ping 구루하이브_내부테이블

위 코드와 스크린샷에서 볼 수 있듯이, 우리는 다음과 같은 작업을 수행합니다.

  • 내부 테이블 만들기
  • 내부 테이블에 데이터 로드
  • 테이블의 내용을 표시합니다.
  • 내부 테이블을 삭제하려면

Hive의 외부 테이블

  • 외부 테이블은 본질적으로 느슨하게 결합되어 있습니다. 데이터는 HDFS에서 사용할 수 있습니다. 해당 테이블은 HDFS 데이터에 생성될 예정입니다.
  • 다시 말해, 데이터에 스키마를 생성하는 것이라고 할 수 있습니다.
  • 떨어뜨릴 당시ping 테이블은 스키마만 삭제될 뿐, 데이터는 이전과 마찬가지로 HDFS에 그대로 남아 있습니다.
  • 외부 테이블은 스키마가 업데이트될 때마다 데이터를 삭제하는 대신 HDFS에 저장된 데이터에 대해 여러 스키마를 생성하는 옵션을 제공합니다.
  • Hive 4.0.0 버전부터 테이블 속성 external.table.purge를 true로 설정하면 DROP 명령으로 데이터도 함께 삭제됩니다.

언제 외부 테이블을 선택해야 합니까?

  • 처리 데이터가 HDFS에 있는 경우
  • 파일이 Hive 외부에서 사용될 때 유용합니다.

외부 테이블의 샘플 코드 조각

  1. 외부 테이블 생성
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. 테이블 생성 시 위치를 지정하지 않으면 데이터를 수동으로 로드할 수 있습니다.
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. 테이블의 내용을 표시합니다.
      Hive>select * from guruhive_external;
  4. 외부 테이블을 삭제하려면
      Hive>DROP TABLE guruhive_external;

다음 스크린샷에서 출력 결과를 확인할 수 있습니다. 마지막 드롭 명령은 스키마만 삭제하며, LOCATION 경로 아래의 파일은 그대로 유지됩니다.

Hive 세션 생성, 로드, 쿼리 및 삭제ping guruhive_external

위 코드에서는 다음과 같은 작업을 수행합니다.

  • 외부 테이블 만들기
  • 외부 테이블에 데이터 로드
  • 테이블의 내용을 표시합니다.
  • 드롭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인지 확인합니다.

자주 묻는 질문

DESCRIBE FORMATTED table_name 명령어를 실행하세요. 테이블 유형 행에 MANAGED_TABLE 또는 EXTERNAL_TABLE이 표시됩니다. 삭제하기 전에 이를 확인하는 것이 다른 작업에서 여전히 읽고 있는 데이터를 삭제하는 것을 방지하는 가장 효율적인 방법입니다.

예. `ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE')` 명령은 메타스토어에서 데이터 유형을 변경하고, `FALSE`로 설정하면 원래대로 되돌립니다. 데이터 파일은 그대로 유지되므로 다시 로드할 필요가 없습니다.

일반적으로는 그렇지 않습니다. 메타스토어 항목만 삭제됩니다. 하지만 Hive 4.0.0 버전부터는 external.table.purge 속성이 true로 설정된 외부 테이블의 데이터도 DROP 명령으로 삭제되므로 먼저 속성을 확인해야 합니다.

이제 일반적인 CREATE TABLE 문은 기본적으로 단순 텍스트 테이블이 아닌 관리형 트랜잭션 ORC 테이블을 생성합니다. EXTERNAL 키워드를 추가하는 것이 Hive 3 클러스터에서 이전의 비ACID 동작을 유지하는 이유입니다.

TRUNCATE는 스키마를 유지하면서 모든 행을 삭제하며, 관리형 테이블에서만 작동합니다. DROP은 스키마도 함께 삭제합니다. 테이블 정의가 새로 고침 후에도 유지되어야 하는 경우 TRUNCATE가 더 안전한 선택입니다.

아니요. Hive는 메타스토어에서 식별자를 소문자로 변환하므로 GURU_SAMPLE과 guru_sample은 동일한 테이블을 참조합니다. 하지만 데이터 내의 문자열 값은 대소문자를 구분하므로 WHERE 절 비교에서 행이 누락될 수 있습니다.

예. 카탈로그 도구의 머신 러닝 기능은 컬럼 카디널리티, null 비율 및 쿼리 패턴을 분석하여 데이터 유형, 파일 형식 및 파티션 키를 제안합니다. 모델은 계획된 워크로드를 인식할 수 없으므로 출력 결과를 초안으로 간주하십시오.

Copilot은 간단한 설명만으로 CREATE, ALTER 및 DROP 문을 완성하며, 에이전트 기반 도우미는 전체 마이그레이션 스크립트를 생성할 수 있습니다. RevEXTERNAL 키워드와 PURGE 옵션을 주의 깊게 살펴보세요. 잘못 선택하면 실제 데이터가 삭제될 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.