大数据中hive sql两种排重方法 group by嵌套与row_number() over() 而不能用distinct
在hive中,面对的是分布式集群的海量数据,使用distinct会非常消耗资源(运行时间很很长且占用计算资源),所以不能用distinct。
(同样的,在使用count计数时,应该用count(1)而不是count(*))
需要排重的情况:使用union all时,会出现重复的记录。为什么不适用union呢?可能是消耗资源或遗漏数据吗?
方法1:使用select + group by 嵌套查询
如
Select column1,column2,…columnn
from
(select column1,column2,…column
From tbl1
Union all
select column1,column2,…columnn
From tbl2) t1
Group by column1,column2,…columnn
方法2:使用row_number() over() as rn + where rn=1 嵌套查询
如:
```sql
select column1,column2
from (
select t1.*, row_number() over(partition by(column1,column2 ),order by dt desc ) as rn
from
(Select column1,column2
from
(select column1,column2、
From tbl1
Union all
select column1,column2,…column
From tbl2) t1
Group by column1,column2,…columnn
) t2
where rn=1;