복붙노트

[HADOOP] 하이브 테이블에서 중복 레코드를 삭제하는 방법?

HADOOP

하이브 테이블에서 중복 레코드를 삭제하는 방법?

하이브 테이블에서 중복 된 레코드를 삭제하는 방법을 배우려고합니다.

내 하이브 테이블 : 열이있는 'dynpart': ID, 이름, 기술

Id  Name  Technology
1   Abcd  Hadoop
2   Efgh  Java
3   Ijkl  MainFrames
2   Efgh  Java

선택 쿼리에서 'Distinct'와 같은 옵션을 사용할 수 있지만 선택 쿼리는 테이블에서 데이터를 검색합니다. 누구도 삭제 쿼리를 사용하여 하이브 테이블에서 중복 행을 제거하는 방법을 말할 수 있습니까?

Hive에서 레코드를 삭제 / 업데이트하는 것은 권장되지 않거나 표준이 아닙니다. 그러나 나는 우리가 그것을 어떻게하는지 배우고 싶다.

해결법

  1. ==============================

    1.삽입 덮어 쓰기 문을 사용하여 데이터를 업데이트 할 수 있습니다.

    삽입 덮어 쓰기 문을 사용하여 데이터를 업데이트 할 수 있습니다.

    insert overwrite table dynpart select distinct * from dynpart;
    
  2. ==============================

    2.레코드를 다른 테이블에 삽입 할 수 있습니다.

    레코드를 다른 테이블에 삽입 할 수 있습니다.

    create table temp as select distinct * from dynpart
    
  3. ==============================

    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
    
  4. from https://stackoverflow.com/questions/43280052/how-to-delete-duplicate-records-from-hive-table by cc-by-sa and MIT license