2017-10-13 9 views
1

ハイブのテーブルには、約80列あるテーブルが複数あります。私はいくつかの列にdistinct節を適用し、他の列からも最初の値を取得する必要があります。以下は私が達成しようとしていることの表現です。特定の列でdistinctを選択しますが、ハイブでも他の列を選択してください

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

上記のすべての列はテキスト列です。だから私はグループごとに機能を集約することはできません。

答えて

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

0

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; 

、私はあなたが後にしている本当にわかりません。テーブルをそれ自身の集合体に結合しなければならないかもしれません。

関連する問題