如何在不列出表中所有列的情况下使用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中的重复项有什么更好的主意吗?
答案 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