[HADOOP] 구조체 배열로 데이터 선택 하이브
HADOOP구조체 배열로 데이터 선택 하이브
나는 Hive에서 플랫 소스로부터 데이터를 선택하고 구조체의 배열로 출력하는 방법을 찾아 내려하고있다. 다음은 내가 찾고있는 것의 예입니다 ...
샘플 데이터 :
house_id,first_name,last_name
1,bob,jones
1,jenny,jones
2,sally,johnson
3,john,smith
3,barb,smith
원하는 출력 :
1 [{"first_name":"bob","last_name":"jones"},{"first_name":"jenny","last_name":"jones"}]
2 [{"first_name":"sally","last_name":"johnson"}]
3 [{"first_name":"john","last_name":"smith"},{"first_name":"barb","last_name":"smith"}]
collect_list 및 collect_set을 시도했지만 기본 데이터 유형만 허용합니다. 하이브에서 내가 어떻게 할 수 있을지에 대한 생각?
해결법
-
==============================
1.이 항아리를 사용할 것이고, collect (그리고 복잡한 데이터 유형을 취하는)를 훨씬 더 잘 구현할 수 있습니다.
이 항아리를 사용할 것이고, collect (그리고 복잡한 데이터 유형을 취하는)를 훨씬 더 잘 구현할 수 있습니다.
질문:
add jar /path/to/jar/brickhouse-0.7.1.jar; create temporary function collect as 'brickhouse.udf.collect.CollectUDAF'; select house_id , collect(named_struct("first_name", first_name, "last_name", last_name)) from db.table group by house_id
산출:
1 [{"first_name":"bob","last_name":"jones"}, {"first_name":"jenny","last_name":"jones"}] 2 [{"first_name":"sally","last_name":"johnson"}] 3 [{"first_name":"john","last_name":"smith"},{"first_name":"barb","last_name":"smith"}]
-
==============================
2.대안을 사용할 수도 있습니다.
대안을 사용할 수도 있습니다.
select collect_list(full_name) full_name_list from ( select concat_ws(',', concat("first_name:",first_name), concat("last_name:",last_name) ) full_name, house_id from house) a group by house_id
from https://stackoverflow.com/questions/32385425/hive-select-data-into-an-array-of-structs by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 스칼라 디렉토리에 폴더 나열하기 (0) | 2019.06.04 |
---|---|
[HADOOP] Java로 Sqoop을 실행하려면 어떻게해야합니까? (0) | 2019.06.04 |
[HADOOP] 하이브 및 정규 표현 (0) | 2019.06.04 |
[HADOOP] 새 API에서의 AlternTextOutputFormat 대체 (0) | 2019.06.04 |
[HADOOP] Hadoop Path 객체를 Java File 객체로 변환하는 방법 (0) | 2019.06.04 |