删除配置单元中的连续行
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
如果您还需要检查 field1
和 field2
,那么您可以为每个字段添加单独的 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
删除 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
如果您还需要检查 field1
和 field2
,那么您可以为每个字段添加单独的 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