Hive 연산자(Operators)

Hive 연산자(Operators)

Hive는 연산자 우선순위(precedence)를 정해 두고, 관계형·산술·논리·문자열 연산자와 복합 타입 생성자/연산자를 제공해요. 각 연산자의 피연산자 타입과 결과 규칙을 이해하는 게 중요합니다.

출처: 문서

본문

연산자 우선순위(Operators Precedences)

예시(Example) 연산자(Operators) 설명(Description)
A[B] , A.identifier bracket_op([]), dot(.) 요소 선택자, 점(dot)
-A unary(+), unary(-), unary(~) 단항 접두 연산자
A IS [NOT] (NULL | TRUE | FALSE)
A ^ B bitwise xor(^) 비트 xor
A * B star(*), divide(/), mod(%), div(DIV) 곱셈 연산자
A + B plus(+), minus(-) 덧셈 연산자
A | B
A & B bitwise and(&) 비트 and
A | B bitwise or(|) 비트 or

우선순위가 높은 연산자부터 평가되므로, 혼합된 식에서는 괄호로 명확히 묶어 주는 걸 권장해요.

관계 연산자(Relational Operators)

다음 연산자들은 피연산자를 비교하고, 비교가 성립하는지에 따라 TRUE 또는 FALSE 값을 생성해요.

연산자(Operator) 피연산자 타입(Operand types) 설명(Description)
A = B 모든 원시 타입 식 A가 식 B와 같으면 TRUE, 아니면 FALSE
A == B 모든 원시 타입 = 연산자와 같은 의미
A <=> B 모든 원시 타입 non-null 피연산자에서 = 연산자와 같은 결과. 둘 다 NULL이면 TRUE, 하나만 NULL이면 FALSE
A <> B 모든 원시 타입 A나 B가 NULL이면 NULL, A가 B와 같지 않으면 TRUE, 아니면 FALSE
A != B 모든 원시 타입 <> 연산자와 같은 의미
A < B 모든 원시 타입 A나 B가 NULL이면 NULL, A가 B보다 작으면 TRUE, 아니면 FALSE
A <= B 모든 원시 타입 A나 B가 NULL이면 NULL, A가 B보다 작거나 같으면 TRUE, 아니면 FALSE
A > B 모든 원시 타입 A나 B가 NULL이면 NULL, A가 B보다 크면 TRUE, 아니면 FALSE
A >= B 모든 원시 타입 A나 B가 NULL이면 NULL, A가 B보다 크거나 같으면 TRUE, 아니면 FALSE
A [NOT] BETWEEN B AND C 모든 원시 타입 A, B, C 중 하나라도 NULL이면 NULL. A가 B보다 크거나 같고 C보다 작거나 같으면 TRUE, 아니면 FALSE. NOT을 붙여 반전 가능
A IS NULL 모든 타입 A가 NULL이면 TRUE, 아니면 FALSE
A IS NOT NULL 모든 타입 A가 NULL이면 FALSE, 아니면 TRUE
A IS [NOT] (TRUE | FALSE) Boolean 타입
A [NOT] LIKE B strings A나 B가 NULL이면 NULL. 문자열 A가 SQL 단순 정규식 B와 일치하면 TRUE, 아니면 FALSE. 문자 단위 비교. B의 _는 A의 임의 문자 하나와 일치(정규식 .과 유사), %는 임의 개수의 문자와 일치(.*와 유사). 예: 'foobar' like 'foo'는 FALSE, 'foobar' like 'foo___'는 TRUE, 'foobar' like 'foo%'도 TRUE
A RLIKE B strings A나 B가 NULL이면 NULL. A의 (빈 부분 문자열 포함) 어떤 부분 문자열이 Java 정규식 B와 일치하면 TRUE, 아니면 FALSE. 예: 'foobar' RLIKE 'foo'는 TRUE, 'foobar' RLIKE '^f.*r$'도 TRUE
A REGEXP B strings RLIKE와 동일

산술 연산자(Arithmetic Operators)

다음 연산자들은 피연산자에 다양한 산술 연산을 지원해요. 모두 숫자 타입을 반환하며, 피연산자 중 하나라도 NULL이면 결과도 NULL입니다.

연산자(Operator) 피연산자 타입(Operand types) 설명(Description)
A + B 모든 숫자 타입 A와 B를 더한 결과. 결과 타입은 피연산자 타입들의 공통 부모(타입 계층에서)와 동일. 예: 모든 정수는 float이므로 float와 int의 + 결과는 float
A - B 모든 숫자 타입 A에서 B를 뺀 결과
A * B 모든 숫자 타입 A와 B를 곱한 결과. 곱셈이 오버플로우를 일으키면 피연산자 하나를 타입 계층에서 더 높은 타입으로 캐스트해야 함
A / B 모든 숫자 타입 A를 B로 나눈 결과. 대부분의 경우 double 타입. A와 B가 모두 정수일 때도 대부분 double이지만, hive.compat 구성 파라미터가 "0.13" 또는 "latest"로 설정되면 decimal 타입
A DIV B 정수 타입 A를 B로 나눈 정수 부분. 예: 17 div 3은 (나눗셈 결과) 5
A % B 모든 숫자 타입 A를 B로 나눈 나머지
A & B 모든 숫자 타입 A와 B의 비트 AND 결과
A | B 모든 숫자 타입 A와 B의 비트 OR
A ^ B 모든 숫자 타입 A와 B의 비트 XOR 결과
~A 모든 숫자 타입 A의 비트 NOT 결과

논리 연산자(Logical Operators)

다음 연산자들은 논리 식을 만드는 데 사용돼요. 모두 피연산자의 boolean 값에 따라 boolean TRUE, FALSE, 또는 NULL을 반환합니다. NULL은 "unknown" 플래그로 동작해, 결과가 unknown의 상태에 의존하면 결과도 unknown이 됩니다.

연산자(Operator) 피연산자 타입(Operand types) 설명(Description)
A AND B boolean A와 B가 모두 TRUE면 TRUE, 아니면 FALSE. A나 B가 NULL이면 NULL
A OR B boolean A나 B 또는 둘 다 TRUE면 TRUE. FALSE OR NULL은 NULL, 아니면 FALSE
NOT A boolean A가 FALSE면 TRUE, A가 NULL이면 NULL, 아니면 FALSE
! A boolean NOT A와 동일
A IN (val1, val2, …) boolean A가 값들 중 하나와 같으면 TRUE
A NOT IN (val1, val2, …) boolean A가 어떤 값과도 같지 않으면 TRUE
[NOT] EXISTS (subquery) boolean 서브쿼리가 최소 한 행을 반환하면 TRUE

문자열 연산자(String Operator)

연산자(Operator) 피연산자 타입(Operand types) 설명(Description)
A | B 문자열 연결

복합 타입 생성자(Complex Type Constructors)

다음 함수들은 복합 타입(complex type)의 인스턴스를 생성해요.

Constructor Function 피연산자(Operands) 설명(Description)
map (key1, value1, key2, value2, …) 주어진 key/value 쌍으로 map 생성
struct (val1, val2, val3, …) 주어진 필드 값으로 struct 생성. 필드 이름은 col1, col2 ...
named_struct (name1, val1, name2, val2, …) 주어진 필드 이름과 값으로 struct 생성
array (val1, val2, …) 주어진 요소들로 array 생성
create_union (tag, val1, val2, …) tag 파라미터가 가리키는 값으로 union 타입 생성

복합 타입 연산자(Operators on Complex Types)

다음 연산자들은 복합 타입의 요소에 접근하는 방법을 제공해요.

연산자(Operator) 피연산자 타입(Operand types) 설명(Description)
A[n] A는 Array, n은 int 배열 A의 n번째 요소 반환. 첫 요소는 인덱스 0. 예: A가 ['foo','bar'] 배열이면 A[0]은 'foo', A[1]은 'bar'
M[key] M은 Map<K,V>, key는 타입 K map에서 key에 대응하는 값 반환. 예: M이 {'f'->'foo','b'->'bar','all'->'foobar'}면 M['all']은 'foobar'
S.x S는 struct S의 x 필드 반환. 예: struct foobar{int foo, int bar}에서 foobar.foo는 foo 필드에 저장된 정수 반환

더 알아보기 (Learn more)

Hive에서 NULL 비교는 일반 =로는 성립하지 않아요. NULL 여부를 확인하려면 IS NULL을, 안전한 동등 비교는 <=>를 사용하세요. 복합 타입은 array, map, struct 생성자와 결합해 활용합니다.