背景介绍
- 今天用户反馈有个表因为是at least one类型的数据导入,导致某个日期分区下可能存在多条重复的数据,看看如何能够帮忙去重。
- 众所周知Hive上一般是不支持update和delete的,对每个分区都重新查询再insert overwrite的话也是相当的麻烦,因此创建一个过滤后的view视图提供给用户应该是更符合需求的。
- 由于用户是一张分区表,若每天一个视图的话肯定是不行的。因此需要考虑创建分区视图(partitioned view),我使用的hive版本为hive2.3.3。
- 外部表和内部表测试均可,这里仅演示内部表。
创建分区视图
# 先创建表
CREATE TABLE if not exists kantlin (
id int,
name string,
age int
)
PARTITIONED BY (date_id string)
row format delimited fields terminated by ','
stored as textfile;
#插入两条相同的数据
insert into table kantlin partition(date_id='20210618') values (1,'kantlin',3);
insert into table kantlin partition(date_id='20210618') values (1,'kantlin',3);
#创建分区视图
#注意 PARTITIONED ON后面跟的是分区字段,而且这个字段必须是select和group by的最后一个元素!
create view kantlin PARTITIONED ON(date_id) AS SELECT id,name,age,time,date_id from kantlin GROUP BY id,name,age,time,date_id ;
执行效果
![](https://img.haomeiwen.com/i6231724/37839eb36ec44603.png)
实际执行效果
网友评论