在同一分区列中删除 Hive 中具有不同日期格式的分区

Drop partitions in Hive with different date format in the same partition column

我在字符串数据类型的分区列中有两种类型的值:

  1. yyyyMMdd
  2. yyyy-MM-dd

例如有分区列值202003012020-03-052020-05-0720200701

我需要使用

这样的 DDL 语句删除小于 20200501 的分区
alter table tblnm drop partition(partcol < 20200501);

当我使用 yyyy-MM-dd 格式删除分区时,只有 2020-03-05 分区被删除。 但是,当我使用 yyyyMMdd 格式删除分区时,20200301 以及所有包含连字符 (-) 的分区都会被删除。

如何通过忽略连字符或忽略包含连字符的数据来比较值? 如有必要,我可以在 alter table 查询中替换连字符。

所有带有连字符的分区都被删除的原因是 java 中字符串的比较:每个 2020-XX-XX 字符串小于每个 2020XXXX 字符串。

要将分区限制为没有连字符的分区,您应该 格式为 yyyy0101:

的 DDL
alter table tblnm drop partition(partcol < 20200501, partcol >= 20200101);

请注意前几年的分区不会被删除,但您可以运行像

这样的东西
alter table tblnm drop partition(partcol <= 20191231, partcol >= 20190101);

随时需要。