2016-04-10 11 views
1

ハイブの特定のフィールドで重複する値を持つ連続する行を削除する効率的な方法は何ですか?例えば:ハイブの連続する行を削除

入力:

ID field1 field2 date 
1 a  b  2015-01-01 
1 a  b  2015-01-02 
2 e  d  2015-01-03 

出力:事前に

ID field1 field2 date 
1 a  b  2015-01-01 
2 e  d  2015-01-03 

おかげ連続重複を削除する

答えて

2

一つの方法は、以前idをチェックして、唯一保つためにlagを使用することです前のidが異なる行:

select * from (
    select * , 
     lag(id) over (order by date) previous_id 
    from mytable 
) t where t.previous_id <> t.id 
or t.previous_id is null -- accounts for the 1st row 

あなたもfield1field2を確認する必要がある場合は、その後、あなたはフィールドごとに別々のlag文を追加することができます

select * from (
    select * , 
     lag(id) over (order by date) previous_id, 
     lag(field1) over (order by date) previous_field1 
    from mytable 
) t where (t.previous_id <> t.id and t.previous_field1 <> field1) 
or t.previous_id is null 
+0

は非常に多くの@Fuzzy Tree..this方法は.. :) – user2895589

+0

@に動作しますありがとうuser2895589うれしかった – FuzzyTree

関連する問題