配置单元-使用ROW_NUMBER()删除重复的行

时间:2019-02-05 06:49:15

标签: hive

如何在不列出表中所有列的情况下使用row_number()删除重复项。我有一个包含50多个列的配置单元表。如果我想根据下面的2列删除重复项,请按照以下步骤操作

  • 将临时表创建为Create temptable as select * from (select *,row_number() over(col1,col2) as rn from maintable) where rn=1)

  • Insert overwrite table maintable select * from temptable

但是在这里插入失败,因为新列rn出现在临时表中;为了避免出现此列,我必须列出所有其余列。

并且配置单元中没有Drop列选项。您还需要使用REPLACE函数,该函数再次需要列出所有其余列。

那么,基于2列删除Hive中的重复项有什么更好的主意吗?

1 个答案:

答案 0 :(得分:1)

在查询计算新列时,从insert overwrite的原始表中拼出所有列名。不需要临时表。

Insert overwrite table maintable 
select col1,col2,col3 ---...col50 
from (select t.*
            ,row_number() over(order by col1,col2) as rn 
      from maintable
     ) t
where rn = 1