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 생성자와 결합해 활용합니다.