Hive 데이터 유형: Hive에서 데이터베이스를 생성하고 삭제하는 방법

⚡ 스마트 요약

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

  • 🔢 숫자 유형: TINYINT부터 BIGINT까지는 정수를 나타내며, DECIMAL(정밀도, 소수점 이하 자릿수)는 FLOAT 및 DOUBLE이 유지할 수 없는 정확한 값을 유지합니다.
  • 🔤 문자열 유형: STRING에는 선언된 제한이 없으며, VARCHAR는 1에서 65535자까지 허용하고, CHAR는 최대 255자로 고정되어 있습니다.
  • 📅 날짜와 시간: DATE는 YYYY-MM-DD 형식의 일반 값을 저장하고, TIMESTAMP는 선택적으로 나노초 단위의 정밀도를 추가합니다.
  • 🧩 복합 유형: ARRAY, MAP, STRUCT 및 UNIONTYPE은 여러 개의 관련 값을 여러 열 대신 하나의 열에 담습니다.
  • 🏗️ 데이터베이스 생성: CREATE DATABASE 명령은 메타스토어에 네임스페이스를 등록하고, SHOW DATABASES 명령은 해당 네임스페이스가 존재하는지 확인합니다.
  • 🗑️ 데이터베이스를 삭제합니다: DROP DATABASE는 네임스페이스를 제거하며, 테이블이 여전히 네임스페이스 내에 있는 경우에는 CASCADE를 사용해야 합니다.

Hive 데이터 유형 및 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 명령어를 사용하여 데이터베이스 목록을 나열합니다.

위 스크린샷에서 우리는 두 가지 작업을 하고 있습니다.

  1. Hive에서 데이터베이스 "guru99" 생성
  2. “show” 명령어를 사용하여 기존 데이터베이스를 표시합니다.

같은 화면에서 show 명령을 실행하면 마지막에 데이터베이스 "guru99"가 표시되는데, 이는 데이터베이스 "guru99"가 성공적으로 생성되었음을 의미합니다.

2단계) Hive에서 데이터베이스를 삭제합니다.

드롭용ping Hive 셸에서 데이터베이스를 삭제하려면 아래 구문에 표시된 대로 "drop" 명령을 사용해야 합니다.

구문 :

Drop database <DatabaseName>

예시: guru99 데이터베이스를 삭제합니다.

다음 스크린샷에서는 먼저 drop 문이 실행되고, 그 뒤에 나오는 show 명령에는 더 이상 데이터베이스가 표시되지 않습니다.

벌집 껍질 떨어뜨리기ping guru99 데이터베이스 및 show를 통한 삭제 확인

위 스크린샷에서는 두 가지 작업을 진행하고 있습니다.

  1. 우리는 떨어뜨립니다ping Hive의 데이터베이스 'guru99'
  2. "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.

자주 묻는 질문

아니요. HiveQL에서 DATABASE와 SCHEMA는 서로 바꿔 쓸 수 있는 키워드이므로, `CREATE SCHEMA sales`와 `CREATE DATABASE sales`는 동일한 메타스토어 객체를 생성합니다. 어떤 방식을 선택할지는 순전히 내부 개발 스타일 문제입니다.

일반적으로 HDFS의 경우 /user/hive/warehouse/database_name.db 디렉터리 아래에 데이터베이스가 저장됩니다. CREATE DATABASE 문에 LOCATION 절을 추가하면 해당 경로가 재정의되며, DESCRIBE DATABASE 명령을 실행하면 실제로 사용된 위치가 표시됩니다.

일반적으로 문자열(STRING) 타입은 길이 제한이 없고 패딩이 필요 없기 때문에 많이 사용됩니다. VARCHAR 타입은 길이를 엄격하게 지정해야 할 때 유용하며, CHAR 타입은 국가 약어와 같이 짧고 고정된 너비의 코드를 표현할 때 적합합니다.

DOUBLE은 이진 부동 소수점 방식이므로 반복적인 합계 계산 시 소수점 이하 자릿수만큼 오차가 발생할 수 있습니다. DECIMAL은 지정된 정밀도와 소수점 자릿수로 정확한 값을 저장하므로 실행 간 재무 총액의 재현성을 보장합니다.

일반 TIMESTAMP는 시간대 정보가 없으며, 기록된 그대로 읽어옵니다. Hive 3.1에서는 TIMESTAMP WITH LOCAL TIME ZONE 기능이 추가되었는데, 이 기능은 기록 시 값을 UTC로 정규화하고 읽을 때 변환합니다.

네. 구조체는 배열 안에 있을 수 있고, 맵 값 자체도 구조체일 수 있으므로, 배열도 가능합니다. >는 유효합니다. 하이브중첩이 깊으면 구분 기호가 복잡해지므로, 중첩은 얕게 유지하세요.

예. 데이터 프로파일링 도구는 카디널리티, null 비율 및 값 범위를 샘플링한 다음 가장 적합한 데이터 유형과 파일 형식을 제안합니다. 이 제안은 모델이 향후 작업량을 예측할 수 없으므로 초안으로 간주하십시오.

Copilot은 간단한 주석을 기반으로 CREATE TABLE 및 CREATE DATABASE 문을 작성하고, 에이전트 기반 도우미는 샘플 파일을 스키마로 변환할 수 있습니다. 결과를 실행하기 전에 항상 DECIMAL 스케일과 구분자 절을 확인하십시오.

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