HiveQL


하이브의 SQL 언어인 HiveQL은 SQL-92, MySQL, 오라클 SQL을 혼합한 것이다.

하이브 문서 : http://bit.ly/languagemanual



SQL vs HiveQL 비교


특징 SQL HiveQL
갱신 UPDATE, INSERT, DELETE UPDATE, INSERT, DELETE
트랜잭션 지원 제한된 지원
색인 지원 지원
자료형 정수형, 부동소수점, 고정소수점, 텍스트와 바이너리 문자열, 날짜/시간 불린형, 정수형, 부동소수점, 고정소수점, 텍스트와 바이너리 문자열, 날짜/시간, 배열, 맵, 구조체
함수 수백 개의 내장 함수 수백 개의 내장 함수
다중 테이블 삽입 지원하지 않음 지원
CREATE TABLE ... AS SELECT SQL-92 표준 명세를 따르지 않음(일부 데이터베이스는 지원) 지원
SELECT SQL-92 SQL-92. SORT BY는 부분 정렬. LIMIT는 반환되는 레코드 수 제한
조인 SQL-92 또는 변형(FROM 절에서 테이블 조인, WHERE 절에서 조건 조인) 내부 조인, 외부 조인, 세미 조인, 맵 조인, 크로스 조인
서브쿼리 모든 절에서 지원(연관 서브쿼리 또는 비연관 서브쿼리) FROM, WHERE, HAVING 절에서 지원(비영관 서브쿼리는 지원하지 않음)
갱신 가능(실체화된 뷰 또는 비실체화된 뷰) 읽기 전용(실체화된 뷰는 지원 하지 않음)
확장성 사용자 정의 함수 및 저장 프로시저 사용자 정의 함수, 맵리듀스 스크립트



자료형

하이브는 기본 자료형과 복합 자료형을 모두 지원한다. 기본형은 숫자형, 불린형, 문자열형, 타임스탬프형을 포함한다. 복합 자료형은 배열, 맵, 구조체를 포함한다.


분류 자료형 설명 표기법 예시
기본형 BOOLEAN true/false 값 TRUE
TINYINT 1바이트(8비트) 부호형 정수(-128~127) 1Y
SMALLINT 2바이트(16비트) 부호형 정수(-32,768 ~ 32,767) 1S
INT 4바이트(32비트) 부호형 정수(-2,147,483,648 ~ 2,147,483,647) 1S
BIGINT 8바이트(64비트) 부호형 정수(-9,223,372,063,854,775,808 ~ 9,223,372,036,854,775,807) 1S
FLOAT 4바이트(32비트) 단정밀도 부동소수점수 1.0
DOUBLE 8바이트(64비트) 배정밀도 부동소수점수 1.0
DECIMAL 임의 정밀도 부호형 숫자 1.0
STRING 길이 제한이 없는 문자열 'a', "a"
VARCHAR 가변길이 문자열 'a', "a"
CHAR 고정길이 문자열 'a', "a"
BINARY 바이트 배열 지원하지 않음
TIMESTAMP 10억 분의 1초의 정밀도를 가진 타임스탬프 1325502245000, '2012-01-02 03:04:05.123456789'
복합형 DATE 날짜 '2012-01-02'
ARRAY 순서가 있는 필드의 집합. 필드의 모든 원소는 동일한 자료형이어야 한다. array(1, 2)
MAP 순서가 없는 키-값 쌍의 집합. 키는 기본형만 가능하고, 값은 모든 자료형이 가능하다. 특정 맵에서는 키와 값이 모두 동일한 자료형이어야 한다. map('a', 1, 'b', 2)
STRUCT 이름을 가진 필드의 집합. 필드의 원소는 서로 다른 자료형일 수 있다. struct('a', 1, 1, 0), named_struct('col1', 'a', 'col2', 1, 'col3', 1.0)
UNION 임의의 자료형을 지닌 값. 자료형을 지시하는 정수 인덱스로 그 값을 표시할 수 있다. create_union(1, 'a', 63)



복합형

하이브는 array, map, struct, union 등 네 개의 복합형을 제공한다. array와 map은 자바에 동일한 이름의 자료형이 있다. STRUCT는 이름을 가진 필드으이 집합을 포함한 레코드 자료형이다. UNION은 필드의 자료형을 자유롭게 선택할 수 있지만 그 값은 모두 반드시 동일한 자료형이어야 한다.

복합형은 임의 수준의 중첩을 허용한다. 복합형의 선언은 꺽쇠괄호(<, >) 표기를 이용하여 필드의 자료형을 반드시 지정해야 한다.

CREATE TABLE complex (
  c1 ARRAY<INT>,
  c2 MAP<STRING, INT>,
  c3 STRUCT<a:STRING, b:INT, c:DOUBLE>,
  c4 UNIONTYPE<STRING, INT>
)
SELECT c1[0], c2['b'], c3.c, c4 FROM complex;



연산자와 함수

하이브는 관계 연산자(동등성 검증을 위한 x = 'a', null 값 검증을 위한 x IS NULL, 패턴 일치를 위한 x LIKE 'a%'), 산술연산자(증가를 위한 x + 1), 논리 OR 연산자(논리 연산을 위한 x OR y) 를 지원한다. || 연산자는 문자열 연결이 아닌 논리 OR 연산자다. 문자열 연결은 concat 함수를 지원한다.

문법 간단 사용법은 DESCRIBT FUNCTION 으로 확인 가능하다.

DESCRIBE FUNCTION length;



형변환

함수와 연산 표현식 내부에서 계층 구조를 형성하는 기본형은 하이브에 의해 암묵적인 형변환이 수행된다. 예를 들어 TINYINT는 표현식이 INT를 요구하면 INT로 변환될 것이다. 그러나 역변환은 불가능하고 CAST 연산자를 사용하지 않으면 오류가 발생한다.

암묵적 변환 규칙은 다음과 같이 요약할 수 있다. 모든 숫자형은 더 큰 숫자형 또는 텍스트형(STRING, VARCHAR, CHAR)으로 암묵적으로 변환될 수 있다. 모든 텍스트형은 다른 텍스트형으로 암묵적으로 변환될 수 있다. 심지어 DOUBLE이나 DECIMAL로도 변환될 수 있다. BOOLEAN형은 다른 자료형으로 변환될 수 없으며, 어떤 표현식으로도 암묵적으로 변환될 수 없다. TIMESTAMP와 DATE는 텍스트형으로 암묵적으로 변환될 수 있다.

CAST를 사용하여 명시적 형변환을 수행할 수 있다. 예를 들어 CAST(‘1’ AS INT)는 문자열 ‘1’을 정수값 1로 변환한다. CAST(‘X’ AS INT)와 같이 하여 형변환이 실패하면 표현식을 NULL을 반환한다.