복붙노트

[HADOOP] 하이브 문자열에서 중복을 제거하는 방법?

HADOOP

하이브 문자열에서 중복을 제거하는 방법?

나는 열 (문자열) 쉼표를 중복 값으로 구분했습니다. 중복을 제거하고 싶습니다. 예 : column_name ----------------- 총, 총, 남자, 총, 남자 셔틀, 적, 적, 실행 명중하다, 추격하다

나는 아래와 같은 결과를 원한다.

column_name ---------------- 총기 경비원 셔틀, 적, 달려라. 명중하다, 추격하다

하이브 데이터베이스를 사용하고 있습니다. 제발 도와주세요.

해결법

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

    1.이것은 모든 단어의 마지막 발생을 유지합니다. 예 : 'hello, world, hello, world, hello'는 '세계, 안녕하세요'가 될 것입니다.

    이것은 모든 단어의 마지막 발생을 유지합니다. 예 : 'hello, world, hello, world, hello'는 '세계, 안녕하세요'가 될 것입니다.

    select  regexp_replace
            (
                column_name
               ,'(?<=^|,)(?<word>.*?),(?=.*(?<=,)\\k<word>(?=,|$))'
               ,''
            )
    
    from    mytable
    ;
    
    +-------------------+
    | gun,man           |
    | shuttle,enemy,run |
    | hit,chase         |
    +-------------------+
    

    이렇게하면 모든 단어가 처음으로 나옵니다. 예 : '안녕하세요, 세상, 안녕하세요, 세계, 안녕하세요'는 '안녕하세요, 세상'

    select  reverse            
            (
                regexp_replace
                (
                    reverse(column_name)
                   ,'(?<=^|,)(?<word>.*?),(?=.*(?<=,)\\k<word>(?=,|$))'
                   ,''
                )
            )
    
    from    mytable
    ;
    

    예 : '체리, 애플, 체리, 체리, 체리, 바나나, 애플'은 '애플, 바나나, 체리'

    select  regexp_replace
            (
                concat_ws(',',sort_array(split(column_name,',')))
               ,'(?<=^|,)(?<word>.*?)(,\\k<word>(?=,|$))+'
               ,'${word}'
            )
    
    from    mytable
    ;
    
  2. from https://stackoverflow.com/questions/42874823/how-to-remove-duplicates-in-hive-string by cc-by-sa and MIT license