重复—跨多个分区的配置单元表重复数据消除

hvvq6cgz  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(358)

我正在尝试对跨分区可能有重复项的表进行重复数据消除。例如

id   device_id  os   country unix_time app_id      dt
2       2       3a      UK     7       5       2019-12-22
1       2       3a      USA     4       5       2019-12-22
1       2       3a      USA     4       5       2019-12-23
1       2       3a      USA     4       5       2019-12-24

可以看出,除了“dt”是分区列之外,该表还有类似的列值。我想对这样一个表进行重复数据消除,在这个表中,旧分区中的类似记录将被删除,而保留在最新分区中。例如,重复数据消除后,上表应与下表类似。

id   device_id  os   country unix_time app_id      dt
2       2       3a      UK     7       5       2019-12-22
1       2       3a      USA     4       5       2019-12-24
gpnt7bae

gpnt7bae1#

使用 row_number 您可以过滤重复项:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

INSERT OVERWRITE TABLE table_name_de_duplicated PARTITION (dt)    
select id, device_id, os, country, unix_time, app_id, dt
  from 
     (select id, device_id, os, country, unix_time, app_id, dt,
             row_number() over(partition by id, device_id, os, country, unix_time, app_id order by dt desc ) rn
        from table_name 
     ) s
  where rn=1
distribute by dt --to reduce the number of created files
;

有些分区在重复数据消除后可能会消失,但如果要重写同一个表,插入覆盖将不会删除它们,因此,如果要将数据保存在同一个表中,那么最好像初始表那样创建表,在其中插入已消除重复的数据,然后删除初始表并重命名已消除重复的表。

相关问题