Hive - 열 회전 과 행 회전 열
user_basic_info:
id
name
1
a
2
b
3
c
4
d
user_address;
name
address
a
add1
a
add2
b
add3
c
add4
d
add5
우 리 는 같은 사용자 가 한 주소 만 있 는 것 을 볼 수 있 습 니 다. 우 리 는 데 이 터 를 다음 과 같은 형식 으로 바 꿔 야 합 니 다.
id
name
address
1
a
add1,add2
2
b
add3
3
c
add4
4
d
add5
collect_set
이것 은 hive 의 행 열 지식 을 사 용 했 습 니 다. UDF: collect 두 개 를 내장 해 야 합 니 다.set, concat_ws,
두 함수 의 설명 은 다음 과 같다.http://www.cnblogs.com/end/archive/2012/06/18/2553682.html
작성 표:
create table user_basic_info(id string, name string);
create table user_address(name string, address string);
데이터 불 러 오기:
load data local inpath '/home/jthink/work/workspace/hive/row_col_tran/data1' into table user_basic_info;
load data local inpath '/home/jthink/work/workspace/hive/row_col_tran/data2' into table user_address;
병합 실행:
select max(ubi.id), ubi.name, concat_ws(',', collect_set(ua.address)) as address from user_basic_info ubi join user_address ua on ubi.name=ua.name group by ubi.name;
실행 결과:
1 a add1,add2 2 b add3 3 c add4 4 d add5
2. 우리 가 표 한 장 을 가지 고 있다 고 가정 하면:
user_info:
id
name
address
1
a
add1,add2
2
b
add3
3
c
add4
4
d
add5
address 를 나 누 어 다음 으로 바 꿔 야 합 니 다.
id
name
address
1
a
add1
1
a
add2
2
b
add3
3
c
add4
4
d
add5
우 리 는 UDTF, explode () 를 사용 할 생각 을 하기 쉽다.
select explode(address) as address from user_info;
이렇게 실 행 된 결 과 는 address 뿐 이지 만 완전한 정보 가 필요 합 니 다.
select id, name, explode(address) as address from user_info;
이렇게 하 는 것 은 옳지 않다. UDTF's are not supported outside the SELECT clause, nor nested in expressions
그래서 우 리 는 이렇게 해 야 한다.
select id, name, add from user_info ui lateral view explode(ui.address) adtable as add;
결 과 는:
1 a add1 1 a add2 2 b add3 3 c add4 4 d add5
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spark 의 2: 원리 소개Google Map/Reduce 를 바탕 으로 이 루어 진 Hadoop 은 개발 자 에 게 map, reduce 원 어 를 제공 하여 병렬 일괄 처리 프로그램 을 매우 간단 하고 아름 답 게 만 들 었 습 니 다.S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.