[HADOOP] 하이브 테이블에서 중복 레코드를 삭제하는 방법?
HADOOP하이브 테이블에서 중복 레코드를 삭제하는 방법?
하이브 테이블에서 중복 된 레코드를 삭제하는 방법을 배우려고합니다.
내 하이브 테이블 : 열이있는 'dynpart': ID, 이름, 기술
Id Name Technology
1 Abcd Hadoop
2 Efgh Java
3 Ijkl MainFrames
2 Efgh Java
선택 쿼리에서 'Distinct'와 같은 옵션을 사용할 수 있지만 선택 쿼리는 테이블에서 데이터를 검색합니다. 누구도 삭제 쿼리를 사용하여 하이브 테이블에서 중복 행을 제거하는 방법을 말할 수 있습니까?
Hive에서 레코드를 삭제 / 업데이트하는 것은 권장되지 않거나 표준이 아닙니다. 그러나 나는 우리가 그것을 어떻게하는지 배우고 싶다.
해결법
-
==============================
1.삽입 덮어 쓰기 문을 사용하여 데이터를 업데이트 할 수 있습니다.
삽입 덮어 쓰기 문을 사용하여 데이터를 업데이트 할 수 있습니다.
insert overwrite table dynpart select distinct * from dynpart;
-
==============================
2.레코드를 다른 테이블에 삽입 할 수 있습니다.
레코드를 다른 테이블에 삽입 할 수 있습니다.
create table temp as select distinct * from dynpart
-
==============================
3.테이블에 소수 또는 선택된 열에 중복 행이있는 경우를 대비하여. 아래와 같이 테이블 구조가 있다고 가정 해보십시오.
테이블에 소수 또는 선택된 열에 중복 행이있는 경우를 대비하여. 아래와 같이 테이블 구조가 있다고 가정 해보십시오.
id Name Technology 1 Abcd Hadoop 2 Efgh Java --> Duplicate 3 Ijkl Mainframe 2 Efgh Python --> Duplicate
여기에 ID 및 이름 열에 중복 행이 있습니다. 분석 함수를 사용하여 중복 행을 다음과 같이 얻을 수 있습니다.
select * from (select Id,Name,Technology, row_Number() over (partition By Id,Name order by id desc) as row_num from yourtable)tab where row_num > 1;
그러면 다음과 같이 출력됩니다.
id Name Technology row_num 2 Efgh Python 2
중복 행을 모두 가져와야하는 경우 :
select * from (select Id,Name,Technology, count(*) over (partition By Id,Name order by id desc) as duplicate_count from yourtable)tab where duplicate_count> 1;
다음 형식으로 출력 :
id Name Technology duplicate_count 2 Efgh Java 2 2 Efgh Python 2
from https://stackoverflow.com/questions/43280052/how-to-delete-duplicate-records-from-hive-table by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 단어를 기준으로 문자열 필터링 (0) | 2019.07.13 |
---|---|
[HADOOP] hadoop없이 Hive를 사용하는 방법 (0) | 2019.07.13 |
[HADOOP] 자바 8에서 작동하지 않는 spark로 원사를 실 행한다. (0) | 2019.07.12 |
[HADOOP] 로깅 기능을 사용하더라도 내 원사 응용 프로그램에 로그가없는 이유는 무엇입니까? (0) | 2019.07.12 |
[HADOOP] webhdfs에 대한 http 요청이지만 서버의 응답 없음 (0) | 2019.07.12 |