删除配置单元中的连续行

remove successive rows in hive

删除 hive 中特定字段中具有重复值的连续行的有效方法是什么?例如:

输入:

 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

提前致谢

删除连续重复项的一种方法是使用 lag 检查前一个 id 并仅保留前一个 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