이번 포스팅에서는 Hive 에 내장되어 있는
- (1) 프로젝션 연산자 SELECT ... FROM
- (2) 비교 연산자 (Relational operators)
- (3) 산술 연산자 (Arithmetic operators)
- (4) 논리 연산자 (Logical operators)
- (5) 복합 연산자 (Complex operators)
에 대해서 알아보겠습니다.
[ HiveQL Operators : 프로젝션 연산자, 비교 연산자, 산술 연산자, 논리 연산자, 복합 연산자 ]
(1) 프로젝션 연산자 SELECT ... FROM
아래와 같은 테이블을 생성했다고 했을 때,
CREATE TABLE IF NOT EXISTS mydb.my_table (
var_1 STRING COMMENT 'var_1 is this',
var_2 FLOAT COMMENT 'var_2 is that',
var_3 INT COMMENT 'var_3 is those',
var_4 ARRAY<STRING> COMMENT 'arrary is...',
var_5 MAP<STRING, FLOAT> COMMENT 'map is...',
var_6 STRUCT<aa:STRING, bb:FLOAT, cc:INT> COMMENT 'structure is...'
COMMENT 'my_table in mydb'
TBLPROPERTIES ('creator'='HongKilDong', 'data'='2016-06-17', ...)
--LOCATION '/user/hive/warehouse/mydb.db/my_table'
)
PARTITIONED BY (year INT, month INT, day INT);
-- SELECT var_nm FROM table
SELECT var_1, var_2 FROM my_table;
-- ARRAY : ["aaaaaaa", "bbbbbbbb"]
SELECT var_4 FROM my_table;
-- MAP : {"key1":xx, "key2":yy}
SELECT var_5 FROM my_table;
-- STRUCT : JSON map {"aa":"xxx", "bb":yy.y, "cc":zzz}
SELECT var_6 FROM my_table;
(2) HIVE 비교 연산자 (Relational Operators)
연산자 |
데이터형 |
설명 |
A = B |
all primitive types |
A와 B가 같으면 TRUE, 그렇지 않으면 FALSE |
A != B |
all primitive types |
A와 B가 같지 않으면 TRUE, 그렇지 않으면 FALSE |
A < B |
all primitive types |
A가 B보다 작으면 TRUE, 그렇지 않으면 FALSE |
A <= B |
all primitive types |
A가 B보다 작거나 같으면 TRUE, 그렇지 않으면 FALSE |
A > B |
all primitive types |
A가 B보다 크면 TRUE, 그렇지 않으면 FALSE |
A >= B |
all primitive types |
A가 B보다 크거나 같은면 TRUE, 그렇지 않으면 FALSE |
A IS NULL |
all types |
A가 NULL 이면 TRUE, 그렇지 않으면 FALSE |
A IS NOT NULL |
all types |
A가 NULL이 아니면 TRUE, 그렇지 않으면 FALSE |
A LIKE B |
Strings |
String 패턴 A가 B와 동일하면 TRUE, 그렇지 않으면 FALSE |
A RLIKE B (A REGEXP B) |
Strings |
A 또는 B가 NULL이면 NULL, A의 어떤 substring이라도 B와 동일하면 TRUE, 그렇지 않으면 FALSE |
-- Retrieve details from DB using relational operators
SELECT * FROM my_table WHERE var_1='HongKilDong';
SELECT * FROM my_table WHERE var_3>=100;
SELECT * FROM my_table WHERE BETWEEN var_2 >= 0.1 and var_2 <= 2.0;
SELECT * FROM my_table WHERE var_1 IS NOT NULL;
(3) HIVE 산술 연산자 (Arithmetic Operators)
연산자 |
데이터형 |
설명 |
A + B |
all number types |
더하기 (adding A and B) |
A - B |
all number types |
빼기 (substracting B from A) |
A*B |
all number types |
곱하기 (multiplying A and B) |
A/B |
all number types |
나누기 (dividing B from A) |
A%B |
all number types |
나눈 후의 나머지 반환 (reminder resulting from diving A by B) |
A&B |
all number types |
비트 AND 연산 (bitwise AND of A and B) |
A|B |
all number types |
비트 OR 연산 (bitwise OR of A and B) |
A^B |
all number types |
비트 XOR 연산 (bitwise XOR of A and B) |
~A |
all number types |
비트 NOT 연산 (bitwise NOT of A) |
-- 산술 연산자
SELECT (var_1 + var_2) as var_1_2_sum FROM my_table;
SELECT var_1*var_2 as var_1_2_multi FROM my_table;
(4) HIVE 논리 연산자 (Logical Operators)
연산자 |
데이터형 |
설명 |
A AND B (A && B) |
boolean |
A와 B 모두 TRUE이면 TRUE, 그렇지 않으면 FALSE |
A OR B (A || B) |
boolean |
A 또는 B, 또는 A와 B가 모두 TRUE이면 TRUE, 그렇지 않으면 FALSE |
NOT A (!A) |
boolean |
A가 FALSE이면 TRUE, 그렇지 않으면 FALSE |
-- 논리 연산자
SELECT * FROM my_table WHERE var_3>=100 && var_2 <= 2.0;
(5) HIVE 복합 연산자 (Complex Operators)
연산자 |
데이터형 |
설명 |
A[n] |
A : Array n : int |
Array A에서 n번째 값을 출력. 첫번째 값은 index 0 부터 시작함. (* 참고 : R은 index 1 부터 시작함) |
M[key] |
M : Map<K, V> Key has type K |
Key에 해당하는 Value를 출력함 |
S.x |
S : STRUCT |
STRUCT의 x field를 출력함 |
-- subset selection from ARRAY : [index number]
SELECT var_1, var_4[0] FROM my_table; -- index starts from '0' (not from '1')
-- subset selection from MAP : ["key"]
SELECT var_1, var_5["key1"] FROM my_table;
-- subset selection from STRUCT : dot notation
SELECT var_1, var_6.aa FROM my_table;
다음 포스팅에서는 Hive에 내장되어 있는 수학 함수와 집계함수에 대해서 알아보겠습니다.
[Reference]
1) Programing Hive, Edward Capriolo, Dean Wampler, Jason Rutherglen, O'REILLY
2) http://www.tutorialspoint.com/hive/hive_built_in_operators.htm
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.