스택큐힙리스트

COLLECT_SET() in Hive, 중복 유지? 본문

카테고리 없음

COLLECT_SET() in Hive, 중복 유지?

스택큐힙리스트 2023. 11. 1. 23:13
반응형

하이브에서 수집된 집합(set)에서 중복을 유지하는 방법이 있을까요? 또는 하이브가 제공하는 종합 컬렉션과 비슷한 기능을 다른 방법으로 시뮬레이션할 수 있을까요? 같은 키를 가진 열의 모든 항목을 배열로 집계하고자 합니다.


예:


hash_id | num_of_cats
=====================
ad3jkfk 4
ad3jkfk 4
ad3jkfk 2
fkjh43f 1
fkjh43f 8
fkjh43f 8
rjkhd93 7
rjkhd93 4
rjkhd93 7

다음과 같은 결과를 반환해야 합니다:


hash_agg | cats_aggregate
===========================
ad3jkfk Array<int>(4,4,2)
fkjh43f Array<int>(1,8,8)
rjkhd93 Array<int>(7,4,7)

답변 1

0.13.0 이후에는 COLLECT_LIST(col)를 사용해보세요.


SELECT
hash_id, COLLECT_LIST(num_of_cats) AS aggr_set
FROM
tablename
WHERE
blablabla
GROUP BY
hash_id
;

답변 2

Hive에서의 COLLECT_SET() 함수는 그룹화된 데이터에서 유일한 값을 수집할 때 사용되는 함수입니다. 그러나 이 함수는 기본적으로 중복 값을 제거하여 반환합니다. 이 경우에는 중복 값을 유지하는 방법에 대해 알아보고자 합니다.
COLLECT_SET() 함수는 중복 값을 가진 데이터를 수집할 때 사용되는 함수이며, 중복 값을 제거해서 반환하기 때문에, 수집된 데이터는 중복 없이 유일한 값들만 포함하게 됩니다. 그렇기 때문에 COLLECT_SET() 함수를 사용하면 중복 값을 유지할 수 없습니다.
그러나 중복 값을 유지하기 위해서는 COLLECT_SET() 함수 대신 COLLECT_LIST() 함수를 사용할 수 있습니다. COLLECT_LIST() 함수는 중복 값을 그대로 유지하면서 수집된 값을 리스트로 반환합니다. 이를 통해 기존 데이터의 중복 값을 그대로 가지고 있는 새로운 리스트를 생성할 수 있습니다.
예를 들어, 다음과 같은 테이블이 있다고 가정해봅시다.
```
테이블명: students
+-----+------+
| id | name |
+-----+------+
| 1 | Tom |
| 2 | Jerry |
| 3 | Tom |
| 4 | Jerry |
+-----+------+
```
이 테이블에서 학생들의 이름을 수집하고자 할 때, COLLECT_SET() 함수를 사용하면 중복을 제거하여 유일한 이름만을 수집합니다. 그러면 결과는 다음과 같을 것입니다.
```
결과: [Tom, Jerry]
```
하지만 COLLECT_LIST() 함수를 사용하면 중복 값을 유지할 수 있습니다. 그러면 결과는 다음과 같을 것입니다.
```
결과: [Tom, Jerry, Tom, Jerry]
```
따라서 중복 값을 유지하면서 데이터를 수집하고자 할 때에는 COLLECT_LIST() 함수를 사용하면 됩니다.
이렇듯 COLLECT_SET() 함수와 COLLECT_LIST() 함수는 데이터를 수집할 때 사용되는 함수이지만 중복 값을 제거하고 유일한 값만을 수집하는지, 중복 값을 유지하는지 여부에 따라 사용하는 함수를 선택해야 합니다.

반응형
Comments