在hive中,将不同日期格式的分区放在同一分区列中

mwkjh3gx  于 2021-04-09  发布在  Hive
关注(0)|答案(1)|浏览(742)

我在字符串数据类型的分区列中有2种类型的值。
yyyyMMdd
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 查询中替换连字符。

dgiusagp

dgiusagp1#

为什么所有带连字符的分区都会被删除,原因是java中的字符串比较:每一个2020-XX-XX字符串都小于每一个2020XXXX字符串。
为了限制没有连字符的分区,你应该在 ddl 中添加一个下限,格式为 yyyy0101

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

要注意的是,前几年的分区不会被删除,但你可以自由地运行一些类似于

alter table tblnm drop partition(partcol <= 20191231, partcol >= 20190101);

无论何时,只要您需要。

相关问题