在同一分区列中删除 Hive 中具有不同日期格式的分区
Drop partitions in Hive with different date format in the same partition column
我在字符串数据类型的分区列中有两种类型的值:
yyyyMMdd
yyyy-MM-dd
例如有分区列值20200301
、2020-03-05
、2020-05-07
、20200701
等
我需要使用
这样的 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);
随时需要。
我在字符串数据类型的分区列中有两种类型的值:
yyyyMMdd
yyyy-MM-dd
例如有分区列值20200301
、2020-03-05
、2020-05-07
、20200701
等
我需要使用
这样的 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
:
alter table tblnm drop partition(partcol < 20200501, partcol >= 20200101);
请注意前几年的分区不会被删除,但您可以运行像
这样的东西alter table tblnm drop partition(partcol <= 20191231, partcol >= 20190101);
随时需要。