SSIS Script Component Destination – własny zapis danych

2012-08-04

W dwóch poprzednich tematach poświęconych Integration Services przedstawiłem wykorzystanie Script Component do tworzenia własnego źródła danych oraz ich transformacji. W dzisiejszym wpisie omówię jego ostatnie zastosowanie – implementację własnego zapisu danych. Po dodaniu komponentu do elementu Data Flow oraz podpięciu danych wejściowych, przechodzimy do jego konfiguracji:

1. Skrypt ustawiamy jako miejsce docelowe danych:

2. W sekcji Script poprzez właściwości ReadOnlyVariables i ReadWriteVariables udostępniamy dla skryptu zmienne:

3. W sekcji Input Columns wybieramy dostępne kolumny wejściowe:

4. W sekcji Inputs and Outputs określamy nazwę wejściowego zbioru danych.

5. W sekcji Connection Managers udostępniamy dla skryptu istniejące połączenia (oczywiście jeżeli chcemy z nich skorzystać).

Po skonfigurowaniu komponentu przechodzimy do edycji kodu C# (sekcja Script -> Edit Script). Skrypt składa się z klasy ScriptMain, w której implementujemy wybrane metody w celu zapisania danych wejściowych. Są to metody:

  • AcquireConnections – metoda, w której możemy nawiązać połączenie z zewnętrznym źródłem (możemy zdefiniować nowe połączenie lub wykorzystać udostępnione, w drugim przypadku używamy obiektu Connections zawierającego listę połączeń oraz metody AcquireConnection udostępniającej konkretne połączenie);
  • PreExecute – metoda wykonywana jest przed rozpoczęciem procesu przetwarzania danych wejściowych;
  • <nazwa_wejścia>_ProcessInputRow – metoda wykonywana dla każdego rekordu wejściowego, tutaj implementujemy zapis danych;
  • PostExecute – metoda wykonywana po zakończeniu procesu przetwarzania danych;
  • ReleaseConnections – w tej metodzie należy zamknąć połączenia do zewnętrznych źródeł;

Wszystkie dostępne metody: ScriptComponent Class

Poniższy skrypt zapisuje dane wejściowe do pliku XML, którego lokalizację przekazujemy w zmiennej XmlFilePath (aby skorzystać z typu XDocument należy dodać referencję do System.Xml.Linq):

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Xml.Linq;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    XDocument xmlDocument;

    public override void PreExecute()
    {
        base.PreExecute();

        xmlDocument = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XComment("SSIS Script Component Destination"),
            new XElement("rows"));
    }

    public override void MyInput_ProcessInputRow(MyInputBuffer Row)
    {
        XElement xmlElement = new XElement("row");
        xmlElement.Add(new XElement("Id", Row.Id.ToString()));
        xmlElement.Add(new XElement("Name", Row.Name));

        xmlDocument.Root.Add(xmlElement);
    }

    public override void PostExecute()
    {
        base.PostExecute();

        xmlDocument.Save(Variables.XmlFilePath);
    }
}

Użycie przygotowanego komponentu:

Dane wejściowe:

Wynikowy plik XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--SSIS Script Component Destination-->
<rows>
  <row>
    <Id>1</Id>
    <Name>AAA</Name>
  </row>
  <row>
    <Id>2</Id>
    <Name>BBB</Name>
  </row>
  <row>
    <Id>3</Id>
    <Name>CCC</Name>
  </row>
</rows>

Więcej informacji na ten temat: MSDN.

Reklamy

Posted on 2012-08-04, in .NET/C# and tagged , , , , . Bookmark the permalink. 2 komentarze.

  1. Witam,
    mam plik z danym w formacie BibTeX. Są to streszczenia 900 artykułow.Potrzebuję je wczytać do sql 2012. Czy Integration Services pozwoli mi na to?
    Prosiłabym o jakąś podpowiedź jak to zrobić.
    Pozdrawiam

    • W SSIS nie ma providera, który umożliwia interpretację plików w formacie BibTeX. Jeżeli dane z nich chcesz wczytać do SQL Server w postaci relacyjnej to pozostaje Ci stworzyć własny komponent źródła danych (opisywałem to w temacie z 2012-07-22) i zaimplementować odczyt plików w tym formacie.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: