【问题标题】:Select distinct on specific columns but select other columns also in hive在特定列上选择不同的列,但也在配置单元中选择其他列
【发布时间】:2017-10-13 15:41:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: hadoop hive hql distinct


    【解决方案1】:

    你可以使用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
    

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

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

    【讨论】:

      【解决方案2】:

      DISTINCT 是 SQL 中使用最多、理解最少的函数。这是在整个结果集上执行的最后一件事,并使用您选择的所有列删除重复项。你可以用一个字符串做一个 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;
      

      虽然我重新阅读了您的问题,但我不太确定您想要什么。您可能必须将表加入到自身的聚合中。

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 1970-01-01
        • 2023-03-02
        • 2020-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多