Hive 데이터 유형: Hive에서 데이터베이스를 생성하고 삭제하는 방법
⚡ 스마트 요약
Hive 데이터 유형은 각 테이블 열이 저장할 수 있는 값을 정의하며, CREATE DATABASE 및 DROP DATABASE 명령은 Hive 메타스토어 내에서 해당 테이블이 속한 네임스페이스를 설정하거나 제거합니다.

데이터 유형은 Hive 쿼리 언어와 데이터 모델링에서 매우 중요한 요소입니다. 테이블 열 유형을 정의하려면 데이터 유형과 그 사용법에 대해 알아야 합니다.
다음은 Hive에 있는 몇 가지 데이터 유형에 대한 간략한 개요입니다.
- 숫자 유형
- 문자열 유형
- 날짜 / 시간 유형
- 복합형
Hive의 데이터 유형
Hive의 모든 열은 아래 유형 중 하나로 선언됩니다. 기본 유형이 먼저 오고, 그 다음으로 단일 열에 두 개 이상의 값을 저장할 수 있는 복합 유형이 옵니다.
Hive 숫자 데이터 유형
숫자 열은 1바이트에서 8바이트까지 다양하므로 값에 맞는 가장 작은 데이터 형식을 선택하면 저장 공간과 스캔 비용을 모두 줄일 수 있습니다.
| 타입 | 메모리 할당 |
|---|---|
| 타이닌트 | 1바이트 부호 있는 정수(-128~127) |
| 스몰린트 | 2바이트 부호 있는 정수(-32,768~32,767) |
| INT | 4바이트 부호 있는 정수(-2,147,483,648~2,147,483,647) |
| 빅인트 | 8바이트 부호 있는 정수(-9,223,372,036,854,775,808~9,223,372,036,854,775,807) |
| 흙손 | 4바이트 단정밀도 부동소수점 숫자 |
| 더블 | 8바이트 배정밀도 부동소수점 숫자 |
| 소수 | 이 데이터 유형에서는 정밀도와 소수점을 DECIMAL(정밀도, 소수점)과 같이 정의할 수 있습니다. 이러한 값을 생략하면 Hive는 DECIMAL(10,0)을 사용합니다. |
Hive 문자열 데이터 유형
문자 열은 세 가지 형태로 제공되며, 차이점은 Hive가 지정된 길이를 강제하는지 여부입니다.
| 타입 | 길이 |
|---|---|
| 숯 | 최대 255자까지 고정된 길이입니다. 255자보다 짧은 값은 공백으로 채워집니다. |
| 바르차르 | 1자에서 65,535자까지 입력 가능합니다. 이보다 긴 값은 자동으로 잘립니다. |
| STRING | 여기서 길이를 정의할 수 있습니다(제한 없음). |
Hive 날짜/시간 데이터 유형
시간 관련 열은 시간대 오프셋 없이 저장되므로, 서로 다른 클러스터에서 기록된 값을 비교하기 전에 이 점을 기억해 두는 것이 좋습니다.
| 타입 | 용법 |
|---|---|
| 시간 기록 | 전통적 지원 유닉스 선택적 나노초 정밀도의 타임스탬프 |
| 날짜 | 형식은 YYYY-MM-DD입니다. Date 타입에서 지원하는 값의 범위는 기본 데이터 유형에서 지원하는지에 따라 0000-01-01부터 9999-12-31까지입니다. Java 전형적인 날짜 |
Hive 기타 데이터 유형
숫자, 문자열 및 날짜 계열에는 속하지 않지만 실제 스키마에서 정기적으로 나타나는 두 가지 기본 요소가 더 있습니다.
| 타입 | 용법 |
|---|---|
| 부에 네 | 참 또는 거짓을 저장합니다. |
| BINARY | 바이트 배열을 저장하여 문자열 열에 원시 콘텐츠가 표시되지 않도록 합니다. |
하이브 복합 데이터 유형
복합 데이터 유형은 하나의 열 안에 값을 중첩시키므로 관계형 설계에서 필요한 추가 조인을 제거할 수 있습니다.
| 타입 | 용법 |
|---|---|
| 배열 | 정렬 음수 및 상수가 아닌 표현식은 허용되지 않습니다. |
| 지도 | 지도 음수 및 상수가 아닌 표현식은 허용되지 않습니다. |
| 구조체 | 구조 |
| 노동 조합 | 유니온타입 |
Hive 복합 데이터 유형 예제
위 표는 선언 형식을 보여줍니다. 아래 문장은 세 가지 복합 형식을 하나의 표로 묶어 구분자 절과 접근 구문을 함께 볼 수 있도록 합니다.
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
여기에는 세 개의 구분 기호가 필요합니다. 하나는 열 사이, 두 번째는 배열 또는 구조체의 항목 사이, 그리고 세 번째는 맵 키와 값 사이입니다. 테이블이 생성되면 각 복합 열은 고유한 접근자를 사용하여 읽습니다.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
아래 표는 어떤 접근자가 어떤 유형에 속하는지를 요약한 것입니다.
| 타입 | 값을 읽는 방법 |
|---|---|
| 정렬 | 스킬[0]과 같은 0 기반 인덱스 |
| MAP | 대괄호 안에 주요 검색 항목을 넣으세요. 예: 공제['세금'] |
| 구조체 | 주소.도시와 같이 필드 이름에 점 표기법을 사용합니다. |
| 유니온타입 | 쿼리 지원이 불완전한 상태로 남아 있어 거의 사용되지 않습니다. |
복합 유형은 중첩될 수 있으므로 배열 >는 유효한 열 선언입니다. 열 레이아웃이 확정되면, 테이블 자체는 본문에 설명된 구문을 사용하여 생성됩니다. Hive 테이블 생성, 수정 및 삭제.
Hive에서 데이터베이스를 생성하고 삭제하는 방법
Hive에서 데이터베이스는 단순히 테이블들을 그룹화하는 네임스페이스이므로, 테이블 관련 작업을 시작하기 전에 가장 먼저 생성해야 하는 객체입니다. 다음은 Hive에서 데이터베이스를 생성하고 삭제하는 단계입니다.
1단계) Hive에 데이터베이스 생성
Hive 셸에서 데이터베이스를 생성하려면 아래 구문에 표시된 명령을 사용해야 합니다.
구문 :
Create database <DatabaseName>
예시: "guru99" 데이터베이스를 생성하세요
아래 스크린샷은 생성 명령과 클러스터의 모든 데이터베이스를 나열하는 show 명령을 보여줍니다.
위 스크린샷에서 우리는 두 가지 작업을 하고 있습니다.
- Hive에서 데이터베이스 "guru99" 생성
- “show” 명령어를 사용하여 기존 데이터베이스를 표시합니다.
같은 화면에서 show 명령을 실행하면 마지막에 데이터베이스 "guru99"가 표시되는데, 이는 데이터베이스 "guru99"가 성공적으로 생성되었음을 의미합니다.
2단계) Hive에서 데이터베이스를 삭제합니다.
드롭용ping Hive 셸에서 데이터베이스를 삭제하려면 아래 구문에 표시된 대로 "drop" 명령을 사용해야 합니다.
구문 :
Drop database <DatabaseName>
예시: guru99 데이터베이스를 삭제합니다.
다음 스크린샷에서는 먼저 drop 문이 실행되고, 그 뒤에 나오는 show 명령에는 더 이상 데이터베이스가 표시되지 않습니다.
위 스크린샷에서는 두 가지 작업을 진행하고 있습니다.
- 우리는 떨어뜨립니다ping Hive의 데이터베이스 'guru99'
- "show" 명령어를 사용하여 동일한 내용을 교차 확인합니다.
같은 화면에서 show 명령어로 데이터베이스를 확인해 보면, Hive 목록에 "guru99" 데이터베이스가 나타나지 않습니다. 따라서 "guru99" 데이터베이스가 삭제되었음을 확인할 수 있습니다.
Hive 데이터베이스 명령어: USE, DESCRIBE, SHOW 및 ALTER DATABASE
위의 두 문장은 가장 간결한 형태를 사용했습니다. 문서화된 구문에는 파일 저장 위치와 파일 이름이 이미 사용 중인 경우를 결정하는 선택적 절이 포함되어 있습니다.
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
DATABASE와 SCHEMA라는 키워드는 전체적으로 서로 바꿔 쓸 수 있으므로, CREATE SCHEMA와 CREATE DATABASE는 완전히 동일한 작업을 수행합니다. 나머지 명령어들은 네임스페이스를 사용한 일상적인 작업에 필요한 모든 것을 제공합니다.
| Command | 그것이하는 일 |
|---|---|
| 데이터베이스 표시 | 메타스토어에 등록된 모든 데이터베이스를 나열합니다. |
| USE 데이터베이스 이름; | 테이블 이름에 접두사가 필요 없도록 현재 데이터베이스를 설정합니다. |
| 데이터베이스_이름을 기술합니다. | 댓글, HDFS 위치 및 소유자를 보고합니다. |
| 데이터베이스 확장 설명 database_name; | DBPROPERTIES 키-값 쌍을 해당 출력에 추가합니다. |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | 메타데이터 속성을 추가하거나 교체합니다. |
| ALTER DATABASE database_name SET OWNER USER user_name; | 다른 사용자 또는 역할에게 소유권을 이전합니다. |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | 이후에 생성되는 테이블에서 사용되는 경로를 변경합니다. |
두 가지 기본 설정을 기억해 두는 것이 좋습니다. LOCATION 절이 없으면 파일은 일반적으로 /user/hive/warehouse/database_name.db와 같은 웨어하우스 디렉터리 아래에 저장됩니다. 또한 IF EXISTS 절이 없으면 존재하지 않는 이름에 대한 드롭은 오류 메시지를 표시하고 조용히 통과하지 않습니다. 두 설정 모두 해당 파일에 저장됩니다. 하이브 메타스토어.
Hive 데이터 유형 변환 및 일반적인 오류
타입이 항상 선언된 그대로 사용되는 것은 아닙니다. Hive는 정보 손실이 없는 경우 값을 자동으로 확장하고, 그 외의 경우에는 명시적인 변환을 요구합니다.
- 암묵적인 확장은 TINYINT에서 SMALLINT, INT, BIGINT, FLOAT, DOUBLE 순으로 진행되며, 숫자를 저장하는 STRING은 DOUBLE로 승격됩니다.
- 데이터 축소는 자동으로 이루어지지 않으므로 DOUBLE 값을 INT 열에 할당하려면 별도의 변환 코드를 작성해야 합니다.
- CAST는 해당 변환을 수행하며, 값을 변환할 수 없는 경우 오류 대신 NULL을 반환합니다.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
아래 오류들은 초보자들이 처음 스키마를 접할 때 흔히 겪는 어려움의 대부분을 차지합니다.
| 징후 | 원인 및 해결책 |
|---|---|
| 데이터베이스에 테이블이 남아 있는 동안 삭제 작업이 실패합니다. | RESTRICT가 기본값입니다. CASCADE를 추가하면 해당 테이블도 함께 삭제됩니다. |
| 긴 줄이 짧아진 채로 도착합니다. | VARCHAR 타입은 지정된 길이를 초과하면 아무런 경고 없이 잘립니다. 길이 제한이 필요하지 않은 경우에는 STRING 타입을 사용하십시오. |
| 변환 후 해당 열의 값이 NULL로 표시됩니다. | CAST에서 값을 구문 분석할 수 없습니다. 형식을 확장하기 전에 원본 데이터를 확인하십시오. |
| 화폐 가치는 파이세 또는 센트 단위로 하락합니다. | 인수가 없는 DECIMAL은 DECIMAL(10,0)을 의미합니다. 스케일을 명시적으로 지정하세요. |
| 겉보기에 똑같아 보이는 두 날짜는 절대 일치하지 않습니다. | 문자열 날짜와 날짜 열은 서로 다른 데이터 유형입니다. 비교하기 전에 한쪽을 형변환하십시오. |
데이터 유형이 제대로 작동하면 다음 단계는 데이터를 로드하고 쿼리하는 것인데, 이는 다음에서 다룹니다. Hive 쿼리에서 정렬 기준, 그룹화 기준 및 Cluster By.


