我在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中实现这一目标?
答案 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)))
答案 1 :(得分:0)
我假设您的重点是问题的“在任何时间点”部分。我想是两种解决方案中的一种。
向您的加载作业添加一个脚本,找到任何早于您的阈值的分区并删除它们(查看partitions
系统视图,如果您尝试提供更通用的方法,则可以从tables
系统视图中提取分区表达式。
您可以在表格周围创建一个视图,而不是必须位于分区的顶部,而只是显示过去1年的数据。示例:
create view myview
as
select * from mytable
where mydate >= current_timestamp - interval '1 year'
或类似的内容,例如trunc(current_timestamp - interval '1 year','MM')
等。然后您可以随意放置分区。