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

Откуда: СПб
Сообщений: 126
Доброго времени суток.

Решил переложить операционную нагрузку по удалению повторов на пакет заливки в БД.
Столкнулся с рядом трудностей....

Входные данные в виде плоских файлов размером от 100Мб до 50Гб. В сутки примерно 50 - 60 Гб.
Количество записей в сутки - 100 000 000 (около того). Раз в 5 - 20 минут (со временем поэкспериментирую) запускается JOB, выполняющий пакет SSIS.

А теперь непосредственно к проблемам:
В плоских файлах присутствуют повторы (от10 до 20%), соответственно их надо удалять. Стоит отметить что повторы имеют некотурую кореляционность т.е. одна запись находиться от другой не далее чем в 100 000 записей.

Для удаления повторов использую компоненты SORT и SCRIPT COMPONENT. При помощи компонента SORT набор данных сортируется по уникальным полям, далее строки последовательно поступают на SCRIPT. В скрипте запоминается предыдущая строка и если вновь поступившая строка по уникальным полям совпадает с предыдущей, то данная строка выбрасывается на другой выход.

Данный механизм прекрасно работает на малых наборах данных. Но есть проблема! Перед тем как начать сортировать, компонент SORT буферизирует входной поток данных в оперативной памяти до тех пор, пока не получит от предыдущего компонента событие об окончании потока данных. Соответственно все вышеперечисленное приводит к разрастанию пакета в оперативной памяти вплоть до зависания VS.

Есть идея, что сортировка должна производиться на маленьких наборах... В этом в принципе и заключается вопрос.
Подскажите пожалуйста как реализовать. Или каким еще образом реализовать удаление повторов????

За ранее спасибо
26 апр 12, 20:46    [12476480]     Ответить | Цитировать Сообщить модератору
 Re: Удаление повторов при помощи integration services  [new]
aleks2
Guest
Откройте для себя.
IGNORE_DUP_KEY = { ON | OFF } 
Specifies the error response to duplicate key values in a multiple-row insert operation on a unique clustered or unique nonclustered index. The default is OFF.

ON
A warning message is issued and only the rows violating the unique index fail.

OFF
An error message is issued and the entire INSERT transaction is rolled back.

The IGNORE_DUP_KEY setting applies only to insert operations that occur after the index is created or rebuilt. The setting has no effect during the index creation operation.

IGNORE_DUP_KEY cannot be set to ON indexes created on a view.

In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

26 апр 12, 21:00    [12476509]     Ответить | Цитировать Сообщить модератору
 Re: Удаление повторов при помощи integration services  [new]
PavluxaF
Member

Откуда: СПб
Сообщений: 126
Не все так просто.

В моем случае уникальным для записи считается набор из 3 полей, одним из которых является DATETIME. Повтором считается явное совпадение значений 2 и 3 полей, и совпадение DATETIME в пределах 1 минуты.
Т.е. записи '1','1','20120427 00:00:01' и '1','1','20120427 00:00:21' являются идентичными и IGNORE_DUP_KEY не может быть использован в данном контексте.
27 апр 12, 10:19    [12477995]     Ответить | Цитировать Сообщить модератору
 Re: Удаление повторов при помощи integration services  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavluxaF
В моем случае уникальным для записи считается набор из 3 полей, одним из которых является DATETIME. Повтором считается явное совпадение значений 2 и 3 полей, и совпадение DATETIME в пределах 1 минуты

И что мешает округлить DATETIME до целой минуты ?
27 апр 12, 10:35    [12478122]     Ответить | Цитировать Сообщить модератору
 Re: Удаление повторов при помощи integration services  [new]
PavluxaF
Member

Откуда: СПб
Сообщений: 126
Ничего не мешает.

Максимальная длинна ключа - 900 байт. В составе моих ключевых полей 2 NVARCHAR(4000)
27 апр 12, 13:47    [12479638]     Ответить | Цитировать Сообщить модератору
 Re: Удаление повторов при помощи integration services  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
в компоненте есть SORT есть св-во "EliminateDuplicates", которое позволит Вкам выкинуть дубоикаты
правда их нельзя никуда будет выгрузить
27 апр 12, 14:21    [12479948]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить