2016-10-09 3 views
0

У меня есть таблица, как показано ниже в 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 

И таблица имеет раздел по месяцам и годам на основе ДАТА колонке.

В любой момент времени должно быть только 13 разделов, т.е. 13 месяцев данных. Если текущие месячные данные поступают (октябрь-16), нам нужно отбросить последний месяц SEP-месяц (SEP-15), сохранив только 13 разделов таблицы (т.е. Последние 13 месяцев данных).

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

ответ

0

Я предполагаю, что вы сосредоточены на части вашего вопроса в любой момент времени. Полагаю, одно из двух решений.

  1. Добавить скрипт в погрузочной работу, которая находит любые разделы старше вашего порога, и их отбрасывают (смотрите на вид partitions системы, если вы пытаетесь придумать более общий подход можно извлечь раздел выражение из системного представления tables).

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

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

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

0

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

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

Что вам нужно, это хроны работы, которая будет работать каждое начало месяца.

Перед тем, как отбросить все разделы до 13 вручную, и они позволяют работе выполнять свою работу.

Примечание: ваша таблица должна быть разделена как:

PARTITION BY (((date_part('year', Datecol) * 100) + date_part('month', Datecol))) 
  • тест раздел падение, прежде чем использовать его, создать фиктивную таблицу и запустить его.
Смежные вопросы