Обрезать перед назначением записи в SSIS? - PullRequest
3 голосов
/ 01 октября 2010

У меня есть поток данных, в котором есть источник БД и место назначения плоского текстового файла (ограничено каналом '|'). Источник БД получает запрос SQL из переменной.

Проблема в том, что если размер моего поля БД, скажем, имя и фамилия составляют 30 символов, я получаю вывод в виде (пробел представлен точками)

saurabh......................|kumar.......................

Мне нужно обрезать поля, чтобы фактический результат составил

saurabh|kumar

У меня есть более 40 столбцов для записи, и я не хочу вручную вставлять RTRIM после каждого столбца в моем БОЛЬШОМ sql-запросе: (

Я должен добавить, что в источнике может быть возвращено до 50 000 строк. Я думал о том, чтобы поместить компонент скрипта между ними, но обработка каждой строки может повлиять на производительность.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 01 октября 2010

У вас есть довольно много вариантов, но некоторые из них, очевидно, будут нежелательны или невозможны для выполнения из-за вашей ситуации.

Во-первых, я предположу, что конечные пробелы в данных - потому что типы данныхисходными столбцами являются CHAR или NCHAR.Вы можете изменить типы данных в исходной базе данных на VARCHAR или NVARCHAR.Это, вероятно, не очень хорошая идея.

Если в исходных данных используются типы данных VARCHAR или NVARCHAR, а в данных имеются конечные пробелы, вы можете обновить данные, чтобы удалить конечные пробелы.Это, вероятно, тоже не привлекательно.

Итак, у вас есть SSIS, и лучшее место для этого - поток данных.К сожалению, вы должны разработать решение для каждого столбца, который имеет конечные пробелы.Я не думаю, что вы найдете быстрое и простое решение «исправить все столбцы».

Вы можете выполнить обрезку данных с помощью преобразования скрипта, но вы должны написать код, чтобы выполнить работу.Или вы можете использовать компонент преобразования «Производный столбец».В преобразовании «Производный столбец» необходимо добавить производный столбец для каждого столбца, который необходимо обрезать.Например, у вас будет столбец с именем и столбцом с фамилией.Производное значение столбца заменит существующее значение столбца.

В преобразовании «Производный столбец» для обрезки данных будет использоваться синтаксис выражения SSIS.Выражения обрезания имени и фамилии будут иметь вид

RTRIM(firstname)
RTRIM(lastname)

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

0 голосов
/ 28 апреля 2014

См. Это: http://masstrimmer.codeplex.com

Он будет обрезать строки с помощью параллелизма.

0 голосов
/ 01 октября 2010

Вы можете попробовать использовать компонент скрипта в потоке данных?В отличие от потока управления, компонент сценария потока данных имеет входы и выходы.

Посмотрите на этот пример в MSDN: http://msdn.microsoft.com/en-us/library/ms345160.aspx

Если вы можете выполнять итерацию каждого столбца строки (?)поскольку он проходит через компонент сценария, вы можете выполнить .Net обрезку данных столбца, а затем передать обрезанную строку на выход.

Преимущество, конечно, в том, что она будет обрезать будущие строки, которые вы добавите позже.

Просто идея, я сам не пробовал.Оставьте сообщение, если оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...