본문 바로가기

[HIVE] 기초 문법 정리

SQL/HIVE 2021. 11. 16.

반응형

[ 공통 사항 ]

IF EXISTS : xx가 존재하면 적용

 

데이터 조회

SELECT ~ FROM :: 데이터 조회

-- 데이터 조회
SELECT * FROM my_table   -- 전체 데이터 조회
SELECT col_1, col_2 FROM my_table   -- 열 지정하여 데이터 조회

 

WHERE :: 조건 지정하여 데이터 조회

-- 조건 지정하여 데이터 조회
SELECT * 
FROM my_table
WHERE col_1 >= 10   -- 조건

 

GROUP BY :: 집계 

count, sum, avg, min, max 등의 집계함수를 사용할 때 그룹을 묶어주는 기준이 된다.

집계함수가 적용되는 열 이외의 열에 GROUP BY를 해주지 않으면 오류가 발생한다.

-- 집계
SELECT col_1, count(col_2) as num_count   -- as : 조회될 때 별칭 지정
FROM my_table
GROUP BY col_1

 

HAVING :: GROUP BY된 집계에 조건 적용

-- 집계
SELECT col_1, count(col_2) as num_count   -- as : 조회될 때 별칭 지정
FROM my_table
GROUP BY col_1
HAVING count(col_2) >= 10

 

 

데이터베이스

데이터베이스 조회

-- 데이터베이스 조회
SHOW DATABASES;

 

데이터베이스 생성

-- 데이터베이스 생성
CREATE DATABASE db_name;
CREATE DATABASE IF NOT EXISTS db_name; -- 존재하지 않으면 DB 생성
CREATE DATABASE db_name LOCATION '/user/hive/mizykk'; -- 위치지정

 

데이터베이스 정보 조회

-- 데이터베이스 정보 조회
DESCRIBE DATABASE db_name;

 

 

테이블

테이블 목록 조회

-- 테이블 조회
SHOW TABLES;

 

테이블 생성

코멘트, 위치지정, 파티션 지정 등은 선택 가능하다.

-- 테이블 생성
CREATE TABLE IF NOT EXISTS db_name.table_name (
    col_1 STRING COMMENT 'col_1',   -- 열이름 데이터타입
    col_2 FLOAT COMMENT 'col_2',
    col_3 INT COMMENT 'col_3'
COMMENT 'table_name in db_name'   -- 코멘트
LOCATION '/user/hive/mizykk/db_name.db/table_name'   -- 위치 지정
)

PARTITIONED BY (year INT, month INT, day INT);   -- 파티션 지정

 

테이블 삭제

-- 테이블 삭제
DROP TABLE table_name;
DROP TABLE IF EXISTS table_name; -- 존재하면 삭제

 

테이블명 변경

ALTER TABLE 현재테이블명 RENAME TO 바꿀테이블명;

-- 테이블명 변경 (changing table name)
ALTER TABLE now_table_name RENAME TO new_table_name;

 

 

파티션

전체 파티션 조회

-- 테이블의 전체 Partition 조회하기
SHOW PARTITIONS db_name.table_name;

 

특정 파티션의 정보

  -- 특정 Partition의 정보 보기 (ex. location)
SHOW table extended like 'db_name.table_name' partition (dt='20210531');

 

파티션 삭제

-- 테이블 Partition 삭제하기
ALTER TABLE db_name.table_name DROP IF EXISTS PARTITION(year=2021, month=5, day=31);
ALTER TABLE db_name.table_name DROP IF EXISTS PARTITION(dt='20210531');

 

파티션 추가

-- 테이블에 Partition 추가하기 (이미 들어가 있는 Partition을 수정하고 싶을 때는 Partition Drop 이후 Add해줍니다)
ALTER TABLE db_name.table_name add if not exists partition (dt='20210531');
ALTER TABLE db_name.table_name add if not exists partition (dt='20210531') location '/user/mizykk/my/new/location';

 

 

열 / Columns

열 이름 변경

ALTER TABLE 테이블명 CHANGE COLUMNS 이전_열_이름 바꿀_열_이름 데이터타입;

-- Column명 변경하기
ALTER TABLE table_name CHANGE [COLUMN] old_col_name new_col_name column_type [COMMENT col_comment] [FIRST|AFTER column_name];
ALTER TABLE db.items CHANGE COLUMN item_count item_count_avg BIGINT;   -- Example

 

열 추가

ALTER TABLE 테이블명 ADD COLUMNS (추가할_열 데이터타입, 추가할_열 데이터타입);

-- Column 추가하기
ALTER TABLE table_name ADD [IF NOT EXISTS] COLUMNS (col_name col_type[, col_spec ...])
ALTER TABLE db.items ADD COLUMNS (item_count_min BIGINT, item_count_max BIGINT);  -- Example

ALTER TABLE table_name ADD COLUMN [IF NOT EXISTS] col_name col_type

 

열 삭제

ALTER TABLE 테이블명 REPLACE COLUMNS(남길_열_이름 데이터타입, 남길_열_이름, 데이터타입);

-- Column 삭제하기
ALTER TABLE table_name REPLACE COLUMNS(col_name col_type, col_name col_type)

 

 

 

728x90

Comments