Удаление разделов в Vertica

У меня есть таблица, как показано ниже в 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 месяцев данных. Если данные за текущие месяцы поступают (16 октября), то нам нужно отбросить разделение по месяцам СЕНТЯБРЯ прошлых лет (15 сентября), сохранив в таблице только 13 разделов (т.е. данные за последние 13 месяцев).

Как мы можем достичь этого в Vertica?

2 ответа

Для этого используйте процедуру удаления раздела

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. Добавьте скрипт к вашей загрузочной работе, который найдет любые разделы старше вашего порога и сбросит их (посмотрите на partitions Если вы пытаетесь придумать более общий подход, вы можете извлечь выражение раздела из tables системный вид).

  2. Вместо того, чтобы располагаться поверх разделов, вы можете просто создать представление вокруг своей таблицы и использовать его вместо отображения только данных за последний год. Пример:

    create view myview
    as
    select * from mytable
    where mydate >= current_timestamp - interval '1 year'
    

Или что-то подобное, как trunc(current_timestamp - interval '1 year','MM')и т. д. Тогда вы можете сбросить разделы на досуге.

Другие вопросы по тегам