如何删除配置单元串中的重复项?

时间:2017-03-18 13:10:30

标签: hadoop hive

我有以重复值分隔的列(字符串)逗号。我想删除重复项:
例如

列名
-----------------
枪,枪,男子,枪,男子
穿梭,敌人的敌人,运行
命中,追

我想要的结果如下:

列名
----------------
枪,男子
穿梭,敌人,运行
命中,追

我正在使用hive数据库。请帮助。

1 个答案:

答案 0 :(得分:4)

选项1:保持最后一次出现

这将保留每个单词的最后一次出现 例如。 'hello,world,hello,world,hello'会产生'world,hello'

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

from    mytable
;
+-------------------+
| gun,man           |
| shuttle,enemy,run |
| hit,chase         |
+-------------------+

选项2:保持第一次出现

这将保留每个单词的第一次出现 例如。 'hello,world,hello,world,hello'会产生'hello,world'

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

from    mytable
;

选项3:排序

E.g。 'Cherry,Apple,Cherry,Cherry,Cherry,Banana,Apple'会产生'Apple,Banana,Cherry'

select  regexp_replace
        (
            concat_ws(',',sort_array(split(column_name,',')))
           ,'(?<=^|,)(?<word>.*?)(,\\k<word>(?=,|$))+'
           ,'${word}'
        )

from    mytable
;