이번 포스팅에서는 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

 

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.

 

 

Posted by R Friend R_Friend