Горизонтальное разделение таблицы фактов в SQL Server 2005 - Создаем функцию разделения на секции

ОГЛАВЛЕНИЕ


Создаем функцию разделения на секции

Чтобы разбить таблицу на разделы, нужно использовать функцию, состоящую из столбца разделения и ограничений. Чтобы создать функцию разбиения на разделы таблицы фактов SALES, которая показана на рисунке 1, выполните команду


CREATE PARTITION FUNCTION
  MyPartitionFunctionLeft
  (datetime)
  AS RANGE LEFT
  FOR VALUES (‘1/01/2003',
  ‘1/01/2005', ‘1/01/2007)

MyPartitionFunctionLeft - это название функции разделения, datetime - тип данных столбца разделения, а RANGE LEFT указывает, как делить значения данных, которые подвязаны к датам FOR VALUES.

Для задания ограничений есть два пути: RANGE LEFT или RANGE. RIGHT.Условие RANGE LEFT делит данные от самого низкого значения до самой высокой величины (то есть по возрастанию). Условие RANGE RIGHT делит данные от самого высокого значения до самого низкого (то есть по  убыванию).

Столбец разделения часто имеет тип данных datetime вроде столбца Date_of_Event (показанного на рисунке 1). Разделить записи типа datetime на непересекающиеся группы просто. Например, если правила бизнеса и известные рабочие запросы указывают, что разделение таблицы на секции по датам продаж разумно, тогда можно делить данные на двухлетние группы, как это сделано в предыдущей команде с  функцией разделения. Разделение на секции RANGE LEFT делит данные в диапазонах значений, показанных на Рисунке 2.


Если дата продажи была 23 июня 2004, запись найдется в разделе 2 (P2). Если захотите создать функцию разделения на секции с условием RANGE RIGHT, выполните команду

CREATE PARTITION FUNCTION
  MyPartitionFunction datetime
  AS RANGE RIGHT
  FOR VALUES (‘1/01/2003',
  ‘1/01/2005', ‘1/01/2007)

Секционирование RANGE RIGHT разбивает данные на диапазоны значений, показанные на Рисунке 3. Я рекомендую ради соответствия и простоты запросов выбирать одно описание диапазона (то есть RANGE LEFT или RANGE RIGHT) и следовать ему во всех секционированных таблицах.


Каждая область значений в секции имеет границы, которые определены в операторе FOR VALUES. Обратите внимание, что если для граничных величин используется тип данных datetime и если компания имеет офис в Европе, то нужно остановиться на международном стандарте для datetime, так, чтобы это было унифицировано по всей компании. SQL Server предполагает, что язык для сеанса us_english задается по умолчанию. Если это не тот случай, можно создать определяемую пользователем функцию UDF, которая преобразует различные форматы даты в us_english, и ссылку на UDF в  условии FOR VALUES. Нельзя использовать константы в UDF в условии FOR VALUES;  можно ссылаться на переменные, функции и UDF.