删除Vertica中的分区

时间:2016-10-09 14:39:43

标签: partitioning vertica database-partitioning

我在Vertica中有一个如下表格,

Seq_No  CO_NO   DATE
1       PQ01    01-Sep-15
2       XY01    01-Oct-15
3       AB01    01-Nov-15
4       PQ02    01-Dec-15
.       .       .
.       .       .
.       .       .
14      XYZ9    01-Oct-16

根据 DATE 列,表格按月和年分区。

任何时候都必须只有13个分区,即13个月的数据。 如果当前月份数据出现(10月16日),那么我们需要通过在表格中仅保留13个分区(即最近13个月的数据)来减少去年SEP月份分区(SEP-15)。

我们如何在Vertica中实现这一目标?

2 个答案:

答案 0 :(得分:1)

要执行此操作,请使用删除分区过程

SELECT DROP_PARTITION('schema.table',CAST(TO_CHAR(ADD_MONTHS(SYSDATE,-13),'YYYYMM') AS INTEGER));

您需要的是每个月初都会运行的cron作业。

在手动删除13之前的所有分区之前,让它完成工作。

注意:您的表格必须分区为:

PARTITION BY (((date_part('year', Datecol) * 100) + date_part('month', Datecol)))
  • 在使用之前测试drop partition,创建一个虚拟表并运行它。

答案 1 :(得分:0)

我假设您的重点是问题的“在任何时间点”部分。我想是两种解决方案中的一种。

  1. 向您的加载作业添加一个脚本,找到任何早于您的阈值的分区并删除它们(查看partitions系统视图,如果您尝试提供更通用的方法,则可以从tables系统视图中提取分区表达式。

  2. 您可以在表格周围创建一个视图,而不是必须位于分区的顶部,而只是显示过去1年的数据。示例:

    create view myview
    as
    select * from mytable
    where mydate >= current_timestamp - interval '1 year'
    
  3. 或类似的内容,例如trunc(current_timestamp - interval '1 year','MM')等。然后您可以随意放置分区。