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

Откуда: Москва
Сообщений: 4974
Бьюсь над такой проблемой.

В SSIS -> Data Flow, после прохождения ряда блоков получается некоторое кол-во строк. Это кол-во строк неизвестно на этапе выбора из БД, оно становиться известным лишь после после нескольких операций, применяемых относительно двух источников данных. Merge, Conditional Split

Нужно ограничить число строк (как бы сделать SELECT TOP N). При этом хотелось бы, чтобы обработка на этом прекратилась.

Есть компонент Row Sampling. Он может выполнить эту задачу, если бы не одно "но". Он ждет пока через него пройдут все строки, а затем только начинает выдавать какие-то строки на выходе. Плюс он начинает жрать память. Мне этого не нужно. Нужно, чтобы счётчик дощелкал до какого-то предела, а остальные бы были проигнорированы.

Есть компонент Row Count, есть Script Task, может они могут? Кто знает как это сделать? Число строк десятки лимонов, держать всё в памяти не вариант.
9 июл 14, 20:44    [16283385]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Data Flow ограничить число строк  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
SQL 2012
9 июл 14, 20:45    [16283386]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Data Flow ограничить число строк  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
a_voronin,

Разносите на 2 Data Flow и выполняйте последовательно.

Но если уж очень хочется заморочиться, то можно попробовать через два Script Component, один как source который будет периодически читать переменную, и второй Script - Transformation который запишет количество строк в переменную в PostExecute методе. Только переменную нужно лочить вручную, иначе два скрипта заблокируют друг друга намертво.
Creating a Source with the Script Component
Coding and Debugging the Script Component
9 июл 14, 22:09    [16283598]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Data Flow ограничить число строк  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
a_voronin,

Проблема в том, что каждый компонент см решает сколько отдавать строк и только для SQL можно задать TOP N. Даже если сделать Script Trasformation Component, который делает что-то вроде TakeWhile, то Source все равно выплюнет все строки и SSIS будет ждать пока все компоненты не отработают.
9 июл 14, 22:13    [16283606]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Data Flow ограничить число строк  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5146
a_voronin,

- пишите на скрипт таске трансформацию нумерующую строки (если не хотите то качаете готовое Row Number Transformation)
- за ним вешаете сплит по условию "номер меньше чем" (остальные строки сваляться в дефолтный выход сплита)

оба таска не блокирующие так что получите, что хотите
10 июл 14, 00:59    [16284140]     Ответить | Цитировать Сообщить модератору
 Re: SSIS Data Flow ограничить число строк  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
gandjustas
a_voronin,

Проблема в том, что каждый компонент см решает сколько отдавать строк и только для SQL можно задать TOP N. Даже если сделать Script Trasformation Component, который делает что-то вроде TakeWhile, то Source все равно выплюнет все строки и SSIS будет ждать пока все компоненты не отработают.
Поэтому я и говорю, что надо написать свой Source и контролировать сколько он вычитает.
10 июл 14, 20:33    [16289164]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить