Amazon web services AWS雅典娜:删除日期范围之间的分区

Amazon web services AWS雅典娜:删除日期范围之间的分区,amazon-web-services,amazon-athena,presto,Amazon Web Services,Amazon Athena,Presto,我有一个雅典娜表,根据日期进行分区,如下所示: 20190218 我想删除去年创建的所有分区 我尝试了下面的查询,但不起作用 ALTER TABLE tblname DROP PARTITION (partition1 < '20181231'); ALTER TABLE tblname DROP PARTITION (partition1 > '20181010'), Partition (partition1 < '20181231'); ALTER TABLE tb

我有一个雅典娜表,根据日期进行分区,如下所示:

20190218
我想删除去年创建的所有分区

我尝试了下面的查询,但不起作用

ALTER TABLE tblname DROP PARTITION (partition1 < '20181231');

ALTER TABLE tblname DROP PARTITION (partition1 > '20181010'), Partition (partition1 < '20181231');
ALTER TABLE tblname DROP PARTITION(partition1<'20181231');
ALTER TABLE tblname DROP PARTITION(分区1>'20181010')、PARTITION(分区1<'20181231');
根据,
ALTER TABLE tblname DROP PARTITION
采用分区规范,因此不允许使用范围

在Presto中,您可以从tblname中执行
删除操作,其中…
,但是雅典娜也不支持
删除

出于这些原因,您需要利用一些外部解决方案

例如:

  • 按中所示列出文件
  • 删除文件和包含目录
  • 更新分区信息(应该有帮助)

  • 虽然Athena SQL此时可能不支持它,但Glue API调用
    GetPartitions
    (Athena在引擎盖下用于查询)支持复杂的筛选表达式,类似于您可以在SQL
    WHERE
    表达式中编写的表达式


    除了通过Athena删除分区之外,您还可以使用Glue API来执行此操作。

    还需要注意的是,
    alter table drop partition
    不会删除任何数据,只会删除分区元数据对象。删除文件是一项独立的操作,如果需要,可以按任何顺序执行。@Davos,我认为这对于外部表是正确的。我使用aws cli检索分区。然后,我使用bash脚本运行awscli命令,如果分区超过某个日期,则删除该分区。这是一个非常有趣的答案,感谢分享Theo!