我正在按年和月创建一个分区。假设目标配置单元表中存在的先前分区为year = 2018 and month = 10 and month = 11
。现在,新数据仅包含year = 2018 and month = 11
。
所以我的问题是将插入覆盖删除month = 10
的数据和分区吗?
请提出一个解决方案,因为我也想删除month = 10
的数据和分区。
谢谢
答案 0 :(得分:0)
当Hive尝试“插入覆盖”到现有目录下外部表的分区时,根据分区定义是否已存在于元存储中,Hive的行为将有所不同:
a)如果分区定义不存在,它将不会尝试猜测目标分区目录(静态或动态分区)在哪里,因此它将无法删除将要写入的那些分区下的现有文件。
b)如果分区定义确实存在,它将尝试在将新数据写入那些目录之前删除目标分区目录下的所有文件。
因此,简而言之,它不会删除数据。
答案 1 :(得分:0)
如果要删除所有现有分区并仅保留新的月份数据,则可以将DROP PARTITION
命令与比较器一起使用。
例如::如果有2018年和10月份以及之前的分区。您可以使用任一配置
// If there is always only one partition
alter table part_t drop partition (year=2003,month=1);
// If there are multiple partitions, you can use < comparator
alter table part_t drop partition (year <2003,month<1);