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

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

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

  • 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中,我可能会查看命令