Select 在特定列上不同,但 select 其他列也在配置单元中

Select distinct on specific columns but select other columns also in hive

我在配置单元的 table 中有多个列,大约有 80 列。我需要在某些列上应用 distinct 子句,并从其他列中获取第一个值。以下是我要实现的目标的表示。

select distinct(col1,col2,col3),col5,col6,col7
from abc where col1 = 'something';

上面提到的所有列都是文本列。所以我不能应用分组依据和聚合函数。

DISTINCT 是 SQL 中使用最多、理解最少的函数。这是对整个结果集执行的最后一件事,并使用 select 中的所有列删除重复项。您可以使用字符串进行 GROUP BY,实际上这就是答案:

SELECT col1,col2,col3,COLLECT_SET(col4),COLLECT_SET(col5),COLLECT_SET(col6)
FROM abc WHERE col1 = 'something'
GROUP BY col1,col2,col3;

虽然我重新阅读了你的问题,但我不太确定你在寻找什么。您可能必须将 table 加入到其自身的集合中。

您可以使用row_number功能来解决问题。

create table temp as
select *, row_number() over (partition by col1,col2,col3) as rn
from abc 
where col1 = 'something';

select *
from temp
where rn=1

您还可以在分区时对 table 进行排序。

row_number() over (partition by col1,col2,col3 order by col4 asc) as rn