Hive 在同一分区列中删除配置单元中具有不同日期格式的分区
我在string数据类型的分区列中有两种类型的值:Hive 在同一分区列中删除配置单元中具有不同日期格式的分区,hive,comparison,date-format,hadoop-partitioning,Hive,Comparison,Date Format,Hadoop Partitioning,我在string数据类型的分区列中有两种类型的值: yyyyMMdd yyyy-MM-dd 例如,有分区列值20200301,2020-03-05,2020-05-07,20200701,等等 我需要使用DDL语句删除小于20200501的分区,如 alter table tblnm drop partition(partcol
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:
更改表tblnm放置分区(partcol<20200501,partcol>=20200101);
请注意,前几年的分区不会被删除,但您可以自由运行
alter table tblnm drop partition(partcol=20190101);
无论何时需要。删除所有带连字符的分区的原因是java中字符串的比较:每个
2020-XX-XX
字符串都小于每个2020XXXX
字符串
要将分区限制为不带连字符的分区,您应该使用格式为yyyy0101
的DDL:
更改表tblnm放置分区(partcol<20200501,partcol>=20200101);
请注意,前几年的分区不会被删除,但您可以自由运行
alter table tblnm drop partition(partcol=20190101);
无论何时需要。谢谢您的回复。这很有帮助。但我的情况也需要过去n年的时间。无论如何,非常感谢你还有更多的疑问。。在impala中,我可以使用regexp删除分区。删除后,是否有任何方式反映在hive/hdfsI中,我可能会查看命令感谢您的回复。这很有帮助。但我的情况也需要过去n年的时间。无论如何,非常感谢你还有更多的疑问。。在impala中,我可以使用regexp删除分区。删除后,是否有任何方式可以反映在hive/hdfsI中,我可能会查看命令