我有一个雅典娜表,根据日期划分如下:
20190218
我想删除去年创建的所有分区。
我尝试了下面的查询,但没有成功。
ALTER TABLE tblname DROP PARTITION (partition1 < '20181231');
ALTER TABLE tblname DROP PARTITION (partition1 > '20181010'), Partition (partition1 < '20181231');
我有一个雅典娜表,根据日期划分如下:
20190218
我想删除去年创建的所有分区。
我尝试了下面的查询,但没有成功。
ALTER TABLE tblname DROP PARTITION (partition1 < '20181231');
ALTER TABLE tblname DROP PARTITION (partition1 > '20181010'), Partition (partition1 < '20181231');
2条答案
按热度按时间bhmjp9jg1#
根据https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html,
ALTER TABLE tblname DROP PARTITION
采用分区规范,因此不允许使用范围。在普雷斯托你会做什么
DELETE FROM tblname WHERE ...
,但是DELETE
雅典娜也不支持。出于这些原因,您需要利用一些外部解决方案。
例如:
按中所示列出文件https://stackoverflow.com/a/48824373/65458
删除文件和包含目录
更新分区信息(https://docs.aws.amazon.com/athena/latest/ug/msck-repair-table.html 应该有帮助)
b1payxdu2#
虽然AthenaSQL此时可能不支持它,但是glue api调用
GetPartitions
(雅典娜在引擎盖下用于查询)支持复杂的过滤器表达式,类似于您可以在sql中编写的内容WHERE
表情。而不是删除分区通过雅典娜你可以这样做
GetPartitions
然后BatchDeletePartition
使用胶水api。