Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сегментирование таблиц и constraints  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Друзья, прошу критики и помощи с сегментированием, есть вопрос об установке ограничений на сегменты. В качестве аргумента для функции сегментирования выступает дата, а в целях компактности заменил дату на количество секунд после 2000-01-01 00:00:00.
create partition function [pf_date](int) as range right for values()
create partition scheme [ps_date](int) as partition [pf_date] to ([primary])
create table [T_BigTable]
(
	 [id] bigint identity(1,1) not null
	,[DateTime] int not null
	,[ID1] int not null
	,[ID2] int not null
	,[Count] smallint not null
) on [ps_date]([DateTime])
create index [idx_ID1] on [T_BigTable]([ID1]) on [ps_date]([DateTime])
create index [idx_ID2] on [T_BigTable]([ID2]) on [ps_date]([DateTime])

Каждый день создаётся файловая группа с файлом и в ней stage таблица, а в функцию сегментирования добавляется граничное значение.
create table [T_20180620]
(
	 [id] bigint identity(1,1) not null
	,[DateTime] int not null
	,[ID1] int not null
	,[ID2] int not null
	,[Count] smallint not null
) on [ps_date]([DateTime])

Таблица заполняется данными за сутки, Затем создаются индексы по [ID1] и [ID2] и таблица переключается в качестве секции в [T_BigTable].
Для чего на стейдж таблицу нужно накладывать ограничения
alter table [T_20180620] with check add constraint [T_20180620_CK] check ([DateTime] >= cast(datediff(ss,'2000-01-01','2018-06-20 00:00:00')) and [DateTime] <= cast(datediff(ss,'2000-01-01','2018-06-20 23:59:59.997')))

И как нужно эти ограничения описать при создании сегментированной [T_BigTable].
22 июн 18, 10:15    [21511978]     Ответить | Цитировать Сообщить модератору
 Re: Сегментирование таблиц и constraints  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
=Сергей=
И как нужно эти ограничения описать при создании сегментированной [T_BigTable].

При создании сегментированной [T_BigTable] вы указываете схему секционирования ps_date
Когда вы делаете стейж таблицу с ограничением, ограничение попадает на одну из секций большой таблицы, указанных в ps_date
То есть на большую таблицу ограничение делать не надо, оно делается только на переключаемую таблицу.
22 июн 18, 10:38    [21512080]     Ответить | Цитировать Сообщить модератору
 Re: Сегментирование таблиц и constraints  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7658
=Сергей=,

ограничение это не какая-то магия, а гарантия того, что в таблице находится содержимое переключаемого сегмента и не более того.
22 июн 18, 13:20    [21512929]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить