하이브에 대한 연습.

4784 단어 Hive 연습
시작하기 전에 몇 가지 명령에 대해 알아보십시오.
Hive CLI에서 다음 명령을 사용할 수 있습니다.
현재 세션에서 사용할 수 있는 함수를 표시합니다.
show functions;
함수에 대한 설명 정보 표시
desc function concat;
함수의 확장 설명 정보 보이기
desc function   extended concat;
이제 Hive에서 자주 사용하는 내장 함수를 연습해 보겠습니다.
먼저 다음 표를 보십시오. winfunc:
hive (default)> desc winfunc;
OK
col_name	data_type	comment
id                  	int                 	                    
money               	float               	                    
type                	string              	                    
Time taken: 0.132 seconds, Fetched: 3 row(s)
hive (default)> select * from winfunc;
OK
winfunc.id	winfunc.money	winfunc.type
1001	100.0	ABC
1001	150.0	BCD
1001	200.0	CDE
1001	150.0	DEF
1002	200.0	ABC
1002	200.0	ABC
1002	100.0	BCD
1002	300.0	CDE
1002	50.0	DEF
1002	400.0	EFG
1003	100.0	ABC
1003	50.0	BCD
1004	60.0	ABC
Time taken: 1.177 seconds, Fetched: 13 row(s)

1. and와 or의 우선 순위
지금 id가 1001, 1002인 두 사람의 월급이 100.0일 때의 기록을 요구하려고 합니다.
hive (default)> select id,money,type from winfunc where id=1001 or id=1002 and money=100.0;
OK
id	money	type
1001	100.0	ABC
1001	150.0	BCD
1001	200.0	CDE
1001	150.0	DEF
1002	100.0	BCD
Time taken: 0.13 seconds, Fetched: 5 row(s)

결과가 우리가 원하는 것이 아니라는 것을 발견했는데, 왜?사실 or와 and의 우선순위가 다르기 때문에 발생한 것입니다. and의 우선순위가 or보다 높기 때문에 위의 결과가 나왔습니다. 만약에 우리가 원하는 결과를 얻으려면 어떻게 처리해야 합니까?
hive (default)> select id,money,type from winfunc where (id=1001 or id=1002) and money=100.0;
OK
id	money	type
1001	100.0	ABC
1002	100.0	BCD
Time taken: 0.147 seconds, Fetched: 2 row(s)

2.cast 유형 변환
위의 결과의money 형식을 int 형식으로 바꾸려면 어떻게 해야 합니까?
hive (default)> select id,cast(money as int),type from winfunc where (id=1001 or id=1002) and money =100.0;
OK
id	money	type
1001	100	ABC
1002	100	BCD
Time taken: 2.489 seconds, Fetched: 2 row(s)

3. case...when
hive (default)> select case 
              >  when id='1001' then 'tom' 
              >  when id='1002' then 'kitty'
              >  when id='1003' then 'jerry'
              >  else 'others'
              > end
              > from winfunc group by id;
OK
_c0
tom
kitty
jerry
others
Time taken: 1.505 seconds, Fetched: 4 row(s)

4. parse_url
문법:parse_url(string urlString, string partToExtract [, string keyToExtract]).
반환값:string
URL에서 지정한 부분을 되돌려줍니다.partToExtract의 유효한 값은 HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO입니다.
hive (default)> select 
              > parse_url('http://master:50070/explorer.html#/hive','HOST')
              > from winfunc limit 1;
OK
_c0
master
Time taken: 0.102 seconds, Fetched: 1 row(s)

5. concat
문법: concat(string A,string B...)
반환값:string
설명: 입력 문자열이 연결된 결과를 되돌려주고 임의의 입력 문자열을 지원합니다
hive (default)> select concat(type,'123')
              > from winfunc limit 3;
OK
_c0
ABC123
BCD123
CDE123
Time taken: 0.103 seconds, Fetched: 3 row(s)

6. concat_ws
문법:concat_ws(string SEP, string A, string B…)
반환값:string
설명: 입력 문자열이 연결된 결과를 되돌려줍니다. SEP는 각 문자열 간의 구분자를 나타냅니다.
hive (default)> select concat_ws('_',type,'123')
              > from winfunc limit 3;
OK
_c0
ABC_123
BCD_123
CDE_123
Time taken: 0.99 seconds, Fetched: 3 row(s)

또한 concat_ws는 다음과 같은 배열도 처리할 수 있습니다.
hive (default)> select concat_ws('_',split(type,''))
              > from winfunc limit 1;
OK
_c0
_A_B_C_
Time taken: 0.125 seconds, Fetched: 1 row(s)

먼저 winfunc 테이블의 첫 번째 줄의 type 열의 값을 split 함수를 통해 하나의 그룹으로 나눈 다음concat_ss는 이 수조의 두 개의 원소 사이에 "_"를 추가합니다.
7. collect_set
collect_set(x) - Returns a set of objects with duplicate elements eliminated
hive (default)> select collect_set(id)
              > from winfunc;
OK
_c0
[1001,1002,1003,1004]
Time taken: 1.546 seconds, Fetched: 1 row(s)

8. collect_list
collect_list(x) - Returns a list of objects with duplicates
Time taken: 1.546 seconds, Fetched: 1 row(s)
hive (default)> select collect_list(id)
              > from winfunc;
OK
_c0
[1001,1001,1001,1001,1002,1002,1002,1002,1002,1002,1003,1003,1004]
Time taken: 2.894 seconds, Fetched: 1 row(s)

그러니까 collect_set는 무거워지고,collect_리스트는 무겁지 않아요.

좋은 웹페이지 즐겨찾기