개요
빅데이터 관련 프로젝트에 투입되어 있으면서 파티션이라는 개념을 듣게 되었는데, 관련하여 데이터베이스 개념부터 잡아야 할 것 같아 정리한다.
데이터베이스
Hive에서 데이터베이스는 테이블 이름을 구별하기 위한 네임스페이스 역할을 한다. 또한 테이블 데이터의 기본 저장 위치를 제공하는데, 만약 데이터베이스 생성 시 저장 위치를 지정하지 않으면 기본값으로 설정된다.
# 데이터 웨어하우스 기본 위치
hive.metastore.warehouse.dir = /user/hive/warehouse
# Hive 데이터베이스 기본 위치
/user/hive/<DATABASE_NAME>.db
# Hive 테이블 기본 위치
/user/hive/<DATABASE_NAME>.db/<TABLE_NAME>
데이터웨어하우스, 데이터베이스, 테이블의 기본 위치는 위와 같다.
데이터베이스 생성
Hive 데이터베이스를 생성하는 DDL은 다음과 같다. 참고로 Hive에서 데이터베이스와 스키마는 동일하다.
CREATE [REMOTE] (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[MANAGEDLOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
-- 예시
CREATE DATABASE test_db;
CREATE SCHEMA test_db;
데이터베이스 생성 시 LOCATION 구문으로 기본 데이터 저장 위치를 지정할 수 있다.
데이터베이스 삭제
DROP 문을 이용해 데이터베이스를 삭제할 수 있다.
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
-- 예시
DROP DATABASE test_db;
DROP SCHEMA test_db;
기본적으로 RESTRICT 옵션으로 수행하기 때문에 데이터베이스가 비어있지 않으면 DROP 수행에 실패한다. 만약 데이터베이스 내 테이블도 삭제한다면 CASCADE 옵션을 추가하여 실행한다.
데이터베이스 변경
ALTER 문을 이용해 데이터베이스를 수정할 수 있다.
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...); -- (Note: SCHEMA added in Hive 0.14.0)
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)
ALTER (DATABASE|SCHEMA) database_name SET MANAGEDLOCATION hdfs_path; -- (Note: Hive 4.0.0 and later)
참고로 LOCATION을 변경하면 데이터베이스에 새로 추가되는 테이블에 대한 기본 위치가 변경된다. 데이터베이스 내 이미 존재하는 테이블에는 영향을 주지 않는다.
데이터베이스 사용
USE 문을 사용해 사용 데이터베이스를 변경할 수 있다.
USE database_name;
USE DEFAULT;
만약 기본 데이터베이스로 돌아가고 싶다면 데이터베이스 이름 대신 DEFAULT 키워드를 사용하면 된다.
참고 문서