logo
Фёдор Самородов  Преподаватель специального назначения
О проекте Просмотр Уровни подписки Фильтры Обновления проекта Контакты Поделиться Метки
Все проекты
О проекте
Учебные материалы по работе с данными и смежным темам для ИТ-специалистов.
Хранение, обработка и анализ данных на пределе возможностей.
Публикации, доступные бесплатно
Уровни подписки
Единоразовый платёж

Безвозмездное пожертвование без возможности возврата. Этот взнос не предоставляет доступ к закрытому контенту.

Помочь проекту
Уровень 1 500₽ месяц 5 100₽ год
(-15%)
При подписке на год для вас действует 15% скидка. 15% основная скидка и 0% доп. скидка за ваш уровень на проекте Фёдор Самородов

Доступ к платным материалам.

Оформить подписку
Фильтры
Обновления проекта
Контакты
Поделиться
Читать: 2+ мин
logo Фёдор Самородов

Как рассчитать Row_Number в ETL-пакете в Integration Services

В ‎интеграционных‏ ‎службах ‎SQL-сервера ‎не ‎хватает ‎полезной‏ ‎трансформации ‎Row_Number.‏ ‎И‏ ‎встроенной ‎функции, ‎через‏ ‎которую ‎можно‏ ‎было ‎бы ‎реализовать ‎эту‏ ‎трансформацию,‏ ‎тоже ‎нет.‏ ‎Так ‎что,‏ ‎засучив ‎рукава, ‎придётся ‎взяться ‎за‏ ‎скрипты.

Решение‏ ‎очень ‎простое‏ ‎и ‎гибкое‏ ‎— ‎у ‎вас ‎не ‎будет‏ ‎с‏ ‎ним‏ ‎никаких ‎проблем.‏ ‎Готовый ‎пакет‏ ‎прикреплён ‎(см.‏ ‎ниже).

В‏ ‎пакете ‎демонстрируется‏ ‎два ‎роунамбера:

  1. Простая ‎расстановка ‎номеров
  2. Расстановка ‎номеров‏ ‎с ‎секционированием

Ниже‏ ‎пошаговое‏ ‎решение.

Сначала ‎сортируем ‎строки‏ ‎в ‎том‏ ‎порядке, ‎в ‎каком ‎надо‏ ‎генерировать‏ ‎номера:

Отсортированный ‎поток‏ ‎заводим ‎в‏ ‎Script ‎Transformation ‎и ‎создаём ‎в‏ ‎нём‏ ‎дополнительную ‎колонку‏ ‎для ‎роунамбера:

Далее‏ ‎открываем ‎редактор ‎кода:

Далее ‎добавляем ‎в‏ ‎сгенерированный‏ ‎шаблон‏ ‎кода ‎пару‏ ‎строк:

Всё.

Ранжирование ‎с‏ ‎секционированием ‎чуть‏ ‎посложнее.‏ ‎Надо ‎чуть‏ ‎больше ‎кода ‎написать ‎— ‎вот‏ ‎так:

И ‎поле‏ ‎с‏ ‎секцией ‎надо ‎подать‏ ‎на ‎вход‏ ‎скрипта. ‎Вот ‎так:


Читать: 2+ мин
logo Фёдор Самородов

Как составить строку соединения (connection string) с источником данных

При ‎работе‏ ‎с ‎данными ‎часто ‎приходится ‎использовать‏ ‎«строки ‎соединения‏ ‎с‏ ‎источником ‎данных» ‎(connection‏ ‎string). ‎Синтаксис‏ ‎этих ‎строк ‎и ‎набор‏ ‎параметров,‏ ‎которые ‎можно‏ ‎в ‎них‏ ‎использовать, ‎зависит ‎от ‎типа ‎хранилища‏ ‎и‏ ‎версии ‎драйвера.‏ ‎Держать ‎всё‏ ‎это ‎в ‎уме ‎проблематично.

К ‎счастью,‏ ‎есть‏ ‎способ‏ ‎быстро ‎и‏ ‎без ‎ошибок‏ ‎сконструировать ‎такую‏ ‎строку.‏ ‎Редактор ‎для‏ ‎работы ‎со ‎строками ‎соединения ‎уже‏ ‎имеется ‎в‏ ‎Windows.

Создайте‏ ‎пустой ‎файл ‎с‏ ‎расширением ‎«UDL»:

По‏ ‎двойному ‎щелчку ‎на ‎UDL-файле‏ ‎по‏ ‎умолчанию ‎открывается‏ ‎конструктор ‎соединений.‏ ‎Он-то ‎нам ‎и ‎нужен! ‎Здесь‏ ‎мы‏ ‎удобным ‎образом‏ ‎настраиваем ‎все‏ ‎параметры ‎подключения, ‎причём ‎этот ‎редактор‏ ‎использует‏ ‎свой‏ ‎вариант ‎интерфейса‏ ‎для ‎каждого‏ ‎драйвера.

Когда ‎всё‏ ‎настроили,‏ ‎нажмите ‎кнопку‏ ‎проверки ‎соединения, ‎чтобы ‎убедиться, ‎что‏ ‎подключение ‎проходит,‏ ‎а‏ ‎затем ‎кнопку ‎«Ок»‏ ‎для ‎сохранения‏ ‎настроек ‎в ‎файле.

UDL ‎—‏ ‎это‏ ‎обыкновенный ‎текстовый‏ ‎формат. ‎Откройте‏ ‎теперь ‎этот ‎файл ‎блокнотом…

…и ‎получите‏ ‎готовую‏ ‎строку ‎соединения:


Читать: 2+ мин
logo Фёдор Самородов

Как ускорить работу конвейера потока данных в пакете служб интеграции

В ‎конвейере‏ ‎потока ‎данных ‎(data ‎flow ‎task)‏ ‎зачастую ‎участвует‏ ‎большое‏ ‎количество ‎преобразований. ‎Но‏ ‎не ‎все‏ ‎они ‎встраиваются ‎в ‎конвейер‏ ‎одинаково.

Преобразования‏ ‎бывают ‎блокирующие‏ ‎и ‎неблокирующие. Неблокирующая‏ ‎трансформация ‎обрабатывает ‎одну ‎строку ‎и‏ ‎тут‏ ‎же ‎передаёт‏ ‎её ‎дальше‏ ‎по ‎конвейеру. ‎А ‎блокирующая ‎сначала‏ ‎собирает‏ ‎все‏ ‎строки ‎и‏ ‎только ‎после‏ ‎этого ‎их‏ ‎обрабатывает,‏ ‎то ‎есть‏ ‎на ‎некоторое ‎время ‎блокирует ‎работу‏ ‎конвейера.

Посмотрите ‎внимательно‏ ‎на‏ ‎пример:

Заметили ‎неприятный ‎эффект‏ ‎блокировки? ‎Операция‏ ‎сортировки ‎втянула ‎в ‎себя‏ ‎уже‏ ‎более ‎пяти‏ ‎миллионов ‎строк,‏ ‎но ‎так ‎и ‎не ‎выпустила‏ ‎из‏ ‎себя ‎ни‏ ‎одной ‎строки.‏ ‎Остальная ‎часть ‎конвейера ‎простаивает.

И ‎только‏ ‎после‏ ‎того,‏ ‎как ‎все‏ ‎строки ‎поступили‏ ‎на ‎сортировку,‏ ‎эта‏ ‎операция ‎начинает‏ ‎отдавать ‎их ‎на ‎дальнейшую ‎обработку:

Давайте‏ ‎просто ‎поменяем‏ ‎местами‏ ‎сортировку ‎и ‎аудит‏ ‎и ‎запустим‏ ‎пакет ‎ещё ‎раз. ‎Извлечение‏ ‎строк‏ ‎только-только ‎началось,‏ ‎а ‎у‏ ‎нас ‎уже ‎одновременно ‎работают ‎четыре‏ ‎операции,‏ ‎а ‎не‏ ‎три, ‎как‏ ‎раньше:

Первый ‎вариант ‎работает ‎16 ‎минут,‏ ‎второй‏ ‎—‏ ‎11.

А ‎сам‏ ‎совет ‎звучит‏ ‎очень ‎просто.‏ ‎Старайтесь‏ ‎ставить ‎неблокирующие‏ ‎операции ‎рядом. По ‎возможности, ‎не ‎разбивайте‏ ‎параллельно ‎работающую‏ ‎цепочку‏ ‎блокирующими ‎операциями.

Читать: 2+ мин
logo Фёдор Самородов

Как удалить дублирующиеся строки в SSIS-пакете

В ‎интеграционные‏ ‎службы ‎SQL-сервера ‎включено ‎множество ‎полезных‏ ‎трансформаций. ‎Но‏ ‎простой‏ ‎операции ‎удаления ‎дублирующихся‏ ‎строк ‎среди‏ ‎них ‎нет. ‎Как ‎средствами‏ ‎SSIS‏ ‎удалить ‎дубликаты‏ ‎в ‎потоке‏ ‎данных?

Вот ‎на ‎вход ‎поступает ‎поток‏ ‎данных,‏ ‎содержащий ‎дубликаты.‏ ‎Как ‎удалить‏ ‎повторяющиеся ‎строки? ‎В ‎конструкторе ‎пакета‏ ‎для‏ ‎интеграционных‏ ‎служб ‎SQL-сервера‏ ‎нет ‎стандартной‏ ‎трансформации, ‎предназначенной‏ ‎для‏ ‎решения ‎этой‏ ‎задачи.

Но ‎это ‎не ‎страшно. ‎Для‏ ‎такого ‎простого‏ ‎преобразования‏ ‎мы ‎легко ‎можем‏ ‎приспособить ‎одну‏ ‎из ‎двух ‎простых ‎трансформаций:‏ ‎агрегацию‏ ‎или ‎сортировку.

Если‏ ‎вы ‎выбрали‏ ‎агрегацию, ‎то ‎нужно ‎просто ‎перевести‏ ‎все‏ ‎столбцы ‎в‏ ‎режим ‎GROUP‏ ‎BY:

Группировка ‎по ‎всем ‎полям ‎очевидным‏ ‎образом‏ ‎приведёт‏ ‎к ‎схлопыванию‏ ‎дублирующихся ‎строк:

А‏ ‎если ‎используете‏ ‎для‏ ‎этой ‎цели‏ ‎сортировку, ‎то ‎следует ‎выбрать ‎для‏ ‎упорядочения ‎все‏ ‎столбцы‏ ‎и ‎установить ‎флаг‏ ‎исключения ‎дубликатов:

Результат‏ ‎будет ‎тот ‎же ‎самый:


Подарить подписку

Будет создан код, который позволит адресату получить бесплатный для него доступ на определённый уровень подписки.

Оплата за этого пользователя будет списываться с вашей карты вплоть до отмены подписки. Код может быть показан на экране или отправлен по почте вместе с инструкцией.

Будет создан код, который позволит адресату получить сумму на баланс.

Разово будет списана указанная сумма и зачислена на баланс пользователя, воспользовавшегося данным промокодом.

Добавить карту
0/2048