Hive_문법행렬 전환
Hive 로 데 이 터 를 처리 할 때 행렬 이 서로 바 뀌 는 수 요 를 자주 만 나 행렬 이 바 뀌 는 흔 한 장면 과 조작 문법 을 정리 하고 기록 합 니 다.
그 중에서 모든 조작 은 문 구 를 직접 복사 하여 자신의 hive 로 실행 하고 결 과 를 볼 수 있다.
선행 지식
hiv 또는 beeline 진입, 실행 을 실행 합 니 다.
desc function explode;
함수 설명 보기;explode(a) - separates the elements of array a into multiple rows, or the elements of a map into multiple rows and columns
, map , Hive UDTF
split(str, regex) - Splits str around occurances that match regex
collect_list(x) - Returns a list of objects with duplicates
collect_set(x) - Returns a set of objects with duplicate elements eliminated
concat_ws(separator, [string | array(string)]+) - returns the concatenation of the strings separated by the separator
max(expr) - Returns the maximum value of expr
준비 데이터
name, subject, score 의 기 말 시험 성적 표를 만 들 고 모든 학생 들 의 학과 별 성적 을 대표 합 니 다.
데 이 터 를 가 져 와 도 텍스트 를 사용자 정의 하고 load 할 수 있 습 니 다. sql 문 구 는 한 걸음 에 도착 하여 테스트 가 간단 하고 편리 합 니 다.
create table school_final_test as
select 'jack' as name, 'english' as subject, 70 as score union all
select 'jack' as name, 'math' as subject, 80 as score union all
select 'jack' as name, 'chinese' as subject, 90 as score union all
select 'tim' as name, 'english' as subject, 10 as score union all
select 'tim' as name, 'math' as subject, 20 as score union all
select 'tim' as name, 'chinese' as subject, 30 as score;
표 1 데이터:
name
subject
score
jack
english
70
jack
math
80
jack
chinese
90
tim
english
10
tim
math
20
tim
chinese
30
create table school_final_test1 as
select 'jack' as name, 70 as english,80 as math, 90 as chinese union all
select 'tim' as name, 10 as english,20 as math, 30 as chinese;
표 2 데이터:
name
english
math
chinese
jack
70
80
90
tim
10
20
30
테스트 시작
수요
다 중 줄 다 중 열, 데이터 원본 은 표 1 입 니 다.
결과 표:
name
english
math
chinese
jack
70
80
90
tim
10
20
30
group by + max + case when
문법 select name,
max(case subject when 'english' then score else 0 end) as english,
max(case subject when 'math' then score else 0 end) as math,
max(case subject when 'chinese' then score else 0 end) as chinese
from school_final_test
group by name;
select max(str) from
(select 'str' as str union all
select 'sts' as str union all
select null as str)t1; -- result : sts
다 중 줄 이 단일 열 로 바 뀌 고 데이터 원본 은 표 1 입 니 다.
결과 표:
name
scores
jack
english:70,math:80,chinese:90
tim
english:10,math:20,chinese:30
group by + collect_list + concat_ws
문법 select name,concat_ws(',',
collect_list(
concat_ws(':',subject,cast(score as string))
)
) as scores
from school_final_test
group by name;
수요
다 열 다 중 줄 전환, 데이터 원본 은 표 2
결과 표:
name
subject
score
jack
english
70
jack
math
80
jack
chinese
90
tim
english
10
tim
math
20
tim
chinese
30
select name,'english' as subject,english as score from school_final_test1
union all
select name,'math' as subject,math as score from school_final_test1
union all
select name,'chinese' as subject,chinese as score from school_final_test1;
수요
일방 통행 다 열
데이터 원본:
create table school_final_test2 as
select name,concat_ws(',',
collect_list(
concat_ws(':',subject,cast(score as string))
)
) as scores
from school_final_test
group by name;
name
scores
jack
english:70,math:80,chinese:90
tim
english:10,math:20,chinese:30
결과 표:
name
scores
jack
english:70
jack
math:80
jack
chinese:90
tim
english:10
tim
math:20
tim
chinese:30
split + explode
문법 select name,table1.scores as scores
from school_final_test2
lateral view explode(split(scores,',')) table1 as scores;
:
에 따라 계속 분할 한 다음 에 배열 의 각 표 방식 {{{arrya[index]
}}} 으로 대응 하 는 필드 select name,split(scores,':')[0] as subject,split(scores,':')[1] as score from (
select name,table1.scores as scores
from school_final_test2
lateral view explode(split(scores,',')) table1 as scores
)t1;
수요
"keyl=valuel&key2=value2...keyn=valuen" , keyx valuex
str_to_map
를 사용 할 수 있다 는 것 이다. 다른 복잡 한 조작 이 있 으 면 UDF 를 사용자 정의 할 수 있다.The first delimiter seperates pairs, and the second delimiter sperates key and value
. If only one parameter is given, default delimiters are used: ',' as delimiter1 and '=' as delimiter2.* select result['key1'] from
(select str_to_map('key1=value1&key2=value2&keyn=valuen','&','=') as result)t1;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Hive 복잡 한 데이터 구조 삽입Hive Hive 기본 데이터 구조 지원 제외 Hive 복잡 한 데이터 구조: 데이터 형식 hive 표 구조 디자인: select :...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.