Hive 跨多个分区的配置单元表重复数据消除
我正在尝试消除一个跨分区可能存在重复项的表的重复项。比如说Hive 跨多个分区的配置单元表重复数据消除,hive,duplicates,hiveql,hive-partitions,Hive,Duplicates,Hiveql,Hive Partitions,我正在尝试消除一个跨分区可能存在重复项的表的重复项。比如说 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 2
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
使用
row\u 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
;
重复数据消除后,某些分区可能会消失,但如果您正在重写同一个表,则“插入覆盖”将不会删除这些分区,因此,如果您希望在同一个表中保存数据,那么最好像初始表一样创建表,在其中插入消除重复的数据,然后删除初始表并重命名已消除重复的表。使用
行号
可以筛选重复项:
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
;
重复数据消除后,某些分区可能会消失,但如果您正在重写同一个表,则“插入覆盖”将不会删除这些分区。因此,如果您希望将数据保存在同一个表中,则最好创建与初始表类似的表,在其中插入已消除重复的数据,然后删除初始表并重命名已消除重复的表