Прошло много времени с тех пор, как я работал с разделами, так что возьмите это с крошкой соли ...
Если это действительно так, что вы имеете дело с 16 фиксированными разделами, ничего после этого, и вынужно только те 16 разделов и никогда больше, тогда можно было бы просто использовать диапазоны диапазона, где первый квартал продолжается до начала времени, а последний квартал - до конца времени (замените дату своей собственной разбивкой):
PARTITION BY RANGE (date)
(PARTITION p2009_q1 VALUES LESS THAN (TO_DATE('2009-04-01', 'YYYY-MM-DD')),
PARTITION p2009_q2 VALUES LESS THAN (TO_DATE('2009-07-01', 'YYYY-MM-DD')),
PARTITION p2009_q3 VALUES LESS THAN (TO_DATE('2009-10-01', 'YYYY-MM-DD')),
PARTITION p2009_q4 VALUES LESS THAN (TO_DATE('2010-01-01', 'YYYY-MM-DD')),
PARTITION p2010_q1 VALUES LESS THAN (TO_DATE('2010-04-01', 'YYYY-MM-DD')),
...
PARTITION p2013_q3 VALUES LESS THAN (TO_DATE('2014-09-01', 'YYYY-MM-DD')),
PARTITION p2013_q4 VALUES LESS THAN MAXVALUE)
Или вы можете просто хэшировать в 16 ведер.
Теперь в сторону.Вопросы, которые сразу же приходят на ум:
- почему его нужно разбивать на квартальные значения?
- почему его нужно разбивать на части?
- почему только до 2013 года?(что будет после этого?)
- после 2013 года, что будет со старыми данными / разделами?
- после начальной загрузки новые записи будут добавляться только в раздел «текущая дата»?
- какие объемы данных мы ожидаем на раздел?
Разделение - это физический атрибут, который будет зависеть от использования данных.С моей точки зрения гранулирование разделов обычно определяется размером данных и требованиями к архивированию.Например, если регистрируется миллион строк данных журнала в день, я могу разбивать разделы по дням, регулярно предварительно создавая разделы на предстоящие дни и меняя старые дни только на чтение.Данные могут быть полезны только в течение недели, после чего самый старый раздел может быть удален или заархивирован.Тогда у нас есть движущееся окно перегородок.Но если бы я получал только 10 000 записей в неделю, я бы просто создал скользящее окно еженедельных разделов.Не то чтобы мне действительно нужен раздел только для одной недели данных, а потому, что он дает мне простой способ отбрасывать / архивировать данные старше недели (через раздел) в соответствии с требованиями к хранению данных.Конечный пользователь может просматривать данные по дням, часам и т. Д.
Поэтому, если данные просматриваются ежеквартально, это не означает, что их нельзя разбивать на месяц, если это имеет смысл.Попробуйте выбрать схему, которая позволит вам легче добавлять разделы позже, если вы можете предвидеть выполнение этого требования.Например, с разделением по диапазонам вы можете начать разделять верхний раздел, когда они просят об этом через год или два.
Да, и, кстати, если вы называете свои разделы в хорошей сортируемой форме (ГГГГММ ДД ...), становится довольно легко написать скрипт, который выполняет немного динамического sql для "изменения таблицы добавления раздела" и следит за созданием раздела (если он еще не был добавлен как функция).Учитывая это, первый и последний разделы должны быть названы немного по-другому.