Регулярные выражения в пакетах SSIS

Самый простой и, пожалуй, правильный способ проверить корректность данных, обрабатываемых пакетом SSIS – использовать регулярные выражения.

Реальный пример – проверка номеров ГТД
Идентификатор государственной таможенной декларации состоит из трех частей, разделенных слэшами. Первые 8 символов содержат уникальный идентификатор таможенного органа, оформившего ГТД, вторая часть включает в себя дату оформления ГТД вида ‘ddMMyy’, третья – уникальный семизначный номер. Итого 23 символа. Более того, в номере ГТД могут содержаться только цифры от 0 до 9 и слэши.
Соответственно задача состоит в том, чтобы с помощью регулярных выражений проверить корректность номера ГТД, и отправить все номера, не прошедшие проверку, в отдельный поток данных.

Конечно же в SSIS нет готового компонента, позволяющего решить эту задачу, зато есть Script Task.

Прежде чем начать кодить, необходимо настроить Scrip Task таким образом, чтоб у него было два выхода, на которые пойдут корректные и неправильные номера ГТД, соответственно.

Для обоих выходов должна быть указана идентичная ExclusionGroup, а в качестве SyncronousInputID должен быть выбран идентификатор входа, по которому придут данные для проверки, в данном случае ‘Input 0’.

В качестве языка я выбрал C# и в результате получился примерно такой код…

using System;
using System.Data;
using System.Text.RegularExpressions; // Add this to use RegExps in code
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void PreExecute()
{
base.PreExecute();
}

public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (IsCorrectCDN(Row.CDN))
{
Row.DirectRowToProperCDN(); // Redirect all correct CDNs to ProperCDN output
}
else
{
Row.DirectRowToWrongCDN(); // All incorrect CDNs go to WrongCDN output
}
}
public bool IsCorrectCDN(string CDN)
{
// Check incoming CDN against RegExp and return boolean result.
string CDNPattern = @"[0-9]{8}/[0-9]{6}/[0-9]{7}";
Regex CDNRegex = new Regex(CDNPattern);
return CDNRegex.IsMatch(CDN);
}
}

Теперь на выходе Script Task будет два потока данных.

Ссылки:
RegExLib.com Regular Expression Cheat Sheet (.NET): http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1

Запись опубликована в рубрике Business Intelligence с метками , . Добавьте в закладки постоянную ссылку.

2 Responses to Регулярные выражения в пакетах SSIS

  1. we want science пишет:

    If you desire to improve your knowledge only keep visiting this web page and be updated with the
    hottest information posted here.

Добавить комментарий для Long Stay Hotel Wan Chai Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *