SQL_2005.08.pdf

(158 KB) Pobierz
Rozdział 8
Usługi transformacji danych
W tym rozdziale:
Czym są usługi DTS?.................................................................................................137
Pakiety DTS .................................................................................................................138
Możliwości programowego korzystania z usług DTS .....................................141
Podsumowanie ..........................................................................................................143
Niniejszy rozdział poświęcony zostanie omówieniu funkcji, która pozornie może wydać
się znajoma programistom pracującym wcześniej z
Microsoft SQL Server 2000:
usługom
transformacji danych (DTS – ang. Data Transformation Services).
Dlaczego ten temat w ogóle znalazł się w niniejszej książce? Odpowiedź jest prosta: usługi
DTS zostały napisane ponownie od podstaw i posiadają obecnie wiele nowych funkcji, obej-
mujących między innymi pewne nowe możliwości programowania. Dokładne omówienie
tego tematu mogłoby zająć całą książkę, toteż w tym rozdziale zostanie zaprezentowana
jedynie podstawowa koncepcja usług DTS, obejmująca niektóre z ich możliwości progra-
mowych.
Czym są usługi DTS?
Usługi transformacji danych (DTS – ang. Data Transformation Services) będące częścią
Microsoft SQL Server 2005,
są potężnym narzędziem tworzenia globalnych rozwiązań do
przenoszenia, transformowania i konsolidowania danych pochodzących z różnych źródeł.
Usługi DTS mogą wykonywać wiele zadań, takich jak na przykład:
Łączenie danych pochodzących z różnych źródeł
Hurtowe ładowanie danych do różnych baz danych
Aktualizowanie danych na podstawie zewnętrznych źródeł danych
Oczyszczanie oraz inteligentne przetwarzanie danych podczas ich przenoszenia z jed-
nego źródła do innego
Automatyzacja funkcji administracyjnych
137
138 Część III: Inne tryby i usługi obiektowe
Autor tej książki przypomina sobie pewien projekt, w którym należało połączyć dane ist-
niejące w bazie danych z danymi pochodzącym z zewnętrznego źródła, dostarczanymi
za pomocą protokołu FTP (ang. File Transfer Protocol – protokół transferu plików) i mają-
cymi postać wartości oddzielanych przecinkiem (format CSV – ang. Comma Separated
Values). Brzmi to dość prosto, dopóki nie uwzględni się faktu, że każda kolumna danych
przed umieszczeniem jej w pliku CSV została poddana konwersji na typ
varchar(250).
Ponadto do aktualizacji danych należało wykorzystać jedynie część kolumn.
Oczywiście w takim przypadku można by utworzyć niestandardową aplikację ładującą
dane z pliku, a następnie aktualizującą bazę danych
SQL Server,
ale tego rodzaju rozwiąza-
nie mogłoby się okazać dość kosztowne w porównaniu z analogicznym rozwiązaniem posłu-
gującym się usługami DTS. Usługi DTS mają możliwość potokowego przenoszenia danych
z pliku do bazy danych
SQL Server,
dokonując jednocześnie wymaganych transformacji
danych. Zadanie importowania danych przez usługi DTS może zostać łatwo zaplanowane
na porę przypadającą poza godzinami szczytu.
Inny przykład: centralny magazyn danych, zapełniany danymi pochodzącymi z trzech
zasadniczo odmiennych źródeł danych. Dane pochodzące z poszczególnych źródeł należy
umieścić w różnych tabelach docelowych. Dane z określonego źródła danych są powiązane
z danymi pochodzącymi z pozostałych źródeł poprzez wartość pola
RecordID,
ale każde
ze źródeł danych stosuje inny format dla tej wartości. Jest to jeszcze jedna sytuacja, odpo-
wiednia do zastosowania usług DTS. Usługi DTS mogą przekształcać wartości kolumny
RecordID
pochodzące z różnych źródeł danych i zapisywać w docelowej bazie danych jeden
wspólny format wartości
RecordID.
Cel tego przykładu jest jasny: pokazuje on, że usługi DTS mogą przenosić i porządkować
dane na mnóstwo różnych sposobów.
Pakiety DTS
Usługi DTS umożliwiają tworzenie pakietów realizujących zadanie przenoszenia oraz mody-
fikowania danych. Pakiet może składać się ze zbioru połączeń, zadań, transformacji, a nawet
procedur obsługi. Pakiet może wykonywać różne zadania, od tak prostych, jak uruchomienie
procedury składowanej po aż tak złożone, jak przeprowadzanie skomplikowanych trans-
formacji zbiorów danych pochodzących z różnych źródeł, a wymagających ich połączenia,
uporządkowania i umieszczenia w pojedynczym magazynie danych.
Kontrola sterowania
Elementami kontroli sterowania są zadania oraz kontenery umożliwiające wykonywanie
różnych akcji, począwszy od hurtowego wstawiania danych do bazy danych, a skończywszy
na wykonywaniu skryptów w kodzie zarządzalnym. Elementy tego typu umożliwiają nawet
wykonywanie zadań administracyjnych, takich jak na przykład zmniejszanie rozmiarów
bazy danych.
Rozdział 8: Usługi transformacji danych 139
Zadania
W wersji
SQL Server 2000
istniało 17 wstępnie zdefiniowanych zadań. Liczba zadań dostęp-
nych w wersji
SQL Server 2005
została niemalże podwojona. Zadania te mogą wykonywać
wszystko, począwszy od wysyłania wiadomości e-mail lub zarządzania plikami za pomocą
usługi FTP, aż po uruchamianie skryptów SQL lub nawet innych pakietów usług DTS. Za
pomocą tych zadań można na przykład zalogować się na serwer FTP, pobrać do lokalnego
katalogu plik z danymi, uporządkować i poprzestawiać dane, wstawić je do bazy danych,
a następnie wywołać metodę usług webowych znajdującą się na innym serwerze, w celu
zasygnalizowania pomyślnego zakończenia wykonywania zadania.
Istnieje wiele różnych zadań, ale można je podzielić na kilka podstawowych kategorii:
Konserwacja bazy danych
Ta kategoria obejmuje takie zadania, jak
Execute SQL
Server Agent Job
(Wykonanie zadania agenta SQL Server),
Reindex
(Reindeksacja),
Backup
Database
(Kopia zapasowa bazy danych) oraz
Notify Operator
(Powiadamianie opera-
tora). W poprzednich wersjach, pakiet usług DTS mógł realizować tego typu zadania
tylko po utworzeniu odpowiedniej procedury składowanej i wywołaniu jej za pomocą
zadania
Execute SQL.
Pakiety DTS nie były prawie w ogóle używane do konserwacji
bazy danych, ponieważ istniały inne, prostsze sposoby realizacji tego typu zadań.
Usługi analiz
W obecnej wersji usługi DTS zawierają trzy zadania służące do prze-
prowadzania operacji na poziomie logiki biznesowej, obejmujące możliwość wykony-
wania instrukcji języka definicji danych w celu przetwarzania i zarządzania obiektami
analitycznymi.
Zadania skryptowe
Istnieją dwa rodzaje zadań skryptowych, jeden przeznaczony
dla kodu niezarządzalnego i jeden dla kodu zarządzalnego: są to odpowiednio zadanie
ActiveX Sript
(Skrypt ActiveX) oraz nowe zadanie
Script
(Skrypt). Ta dwa rodzaje zadań
umożliwiają rozszerzenie funkcjonalności tworzonych pakietów usług DTS.
Wskazówka
Firma Microsoft zaleca stosowanie zadania
Script
zamiast
ActiveX Script,
ponieważ zadanie
Script
ma kilka zalet, takich jak na przykład możliwość wstępnej kom-
pilacji skryptów, lepsze środowisko do ich tworzenia oraz możliwość odwoływania się
skryptów do zewnętrznych zestawów .NET oraz do obiektów środowiska .NET Framework
i obiektów typu COM.
Zadania SQL Server
Usługi DTS obejmują dwa zadania służące do bezpośredniej
pracy z
SQL Server:
zadanie
Bulk Insert
(Hurtowe wstawianie danych), umożliwiające
hurtowe ładowanie danych z plików do bazy danych
SQL Server,
oraz zadanie
Execute
SQL
(Wykonanie instrukcji SQL), umożliwiające wykonanie w
SQL Server
instrukcji
w języku T-SQL.
Sterowanie kolejnością pracy
Ta kategoria zadań obejmuje zadania mogące urucha-
miać inne pakiety usług DTS, uruchamiać procesy zewnętrzne, przetwarzać elementy
znajdujące się w kolejce komunikatów oraz wysyłać wiadomości e-mail.
140 Część III: Inne tryby i usługi obiektowe
Uwaga
Usługi DTS w SQL Server 2005 mogą uruchamiać pakiety DTS pochodzące z wer-
sji SQL Server 2005 lub z wersji SQL Server 2000. Co ważniejsze, funkcjonalność ta nie
wymaga instalowania SQL Server 2000. Zaleca się jak najszybsze przepisanie istniejących
pakietów DTS na wersję przeznaczaną dla SQL Server 2005, ale w międzyczasie można
kontynuować używanie poprzednich wersji tych pakietów.
Zadania danych
Zadania danych obejmują zadania przygotowujące dane, takie jak
pobieranie danych z zewnętrznych źródeł na lokalny dysk za pomocą usługi FTP, usługi
webowe, oraz możliwość bezpośredniego dostępu do danych w formacie XML istnie-
jących jako wartość zmiennej (w pamięci) lub w plikach systemowych. Ta kategoria
zawiera również bardziej skomplikowane zadanie
Data Flow
(Zadanie sterowania prze-
pływem danych), które zostanie omówione w dalszej części tego rozdziału.
Kontenery
Jednym z ulubionych przez autora tej książki elementów usług DTS w
SQL Server 2005
są kontenery, zawierające elementy sterowania przebiegiem pętli, takie jak na przykład kon-
tener
Foreach Loop
(Dla każdej pętli), umożliwiający tworzenie zadań, które można wielo-
krotnie wykonywać w pętli sterowanej różnego rodzaju licznikami. Załóżmy na przykład,
że istnieje pewien katalog, w którym znajdują się pliki zawierające procedury napisane
w języku T-SQL. Dla każdego z tych plików należy wykonać zawarte w nim instrukcje,
a następnie usunąć ten plik. Zadanie to można łatwo zrealizować za pomocą kontenera
Foreach Loop.
Kontener ten wskazuje na dwa połączenia: jedno to połączenie typu OLE DB
z bazą danych
SQL Server 2005,
a drugie to połączenie wskazujące na katalog z plikami
w języku T-SQL. Do tego kontenera zostały dodane dwa zadania: zadanie
Execute SQL
oraz
zadanie
File System.
Obydwa te zadania używają połączenia z systemem plików jako źródła
odpowiednio: skryptów lub plików.
W jaki sposób to działa? Kontener
Foreach Loop
wskazuje na wszystkie lub tylko na część
plików w katalogu (stosując na przykład filtr *.sql). Wykonanie pakietu powoduje przejście
pętli przez wszystkie wymienione pliki. Połączenie z systemem plików zostaje przełączane
kolejno na wszystkie pliki, i dla każdego pliku zostają wykonane zadania
Execute SQL
i
File
System,
przetwarzając w ten sposób po jednym pliku za każdym obiegiem pętli.
To rozwiązanie jest olśniewające w swojej prostocie. Kontenery
Foreach Loop
oraz
For Loop
pozwalają na sterowanie przebiegiem pętli za pomocą prostych zmiennych lub wartości
zapisanych w węzłach dokumentu w formacie XML.
Przepływ danych
Elementy przepływu danych służą do przetwarzania danych w pewien sposób, przenosząc
je warunkowo z jednego źródła do jednego lub kilku miejsc docelowych albo łącząc dane
pochodzące z kilku różnych źródeł w jeden zbiór docelowy. Elementy te są faktycznie spe-
cjalnym rodzajem zadań.
W wersji
SQL Server 2000
dystrybucja danych była ograniczona do podstawowych
funkcji przekształcających dane, takich jak na przykład proste mapowanie kolumn oraz
Rozdział 8: Usługi transformacji danych 141
możliwość przeszukiwania list. W wersji
SQL Server 2005
zadania przepływu danych
są znacznie bardziej skomplikowane. Obecnie istnieje ponad 30 rodzajów różnych transfor-
macji danych, mogących wykonywać takie zadania, jak na przykład wyszukiwanie rozmyte
(ang.
fuzzy lookup),
pozwalające na odszukiwanie podobnych danych, a nawet na przesta-
wianie danych pomiędzy lokalizacją źródłową i docelową.
Jakie znaczenie dla programisty ma cała ta funkcjonalność? Otóż usługi DTS są obecnie
potężnym narzędziem mogącym służyć do realizacji różnych zadań, począwszy od tak pro-
stych jak przenoszenie danych do bazy danych, a skończywszy na tak złożonych jak migracja
danych do nowych aplikacji.
Możliwości programowego korzystania
z usług DTS
Podobnie jak w przypadku wszystkich pozostałych nowych funkcji
SQL Server 2005,
istnieje również programowy aspekt usług DTS. Możliwości programowego korzystania
z usług DTS obejmują zakres od tworzenia i zarządzania pakietami DTS w środowisku .NET
do stosowania wewnętrznych składników tych pakietów do realizacji własnych zadań lub
przekształceń danych. Pierwsza z tych możliwości jest całkiem prosta w realizacji, zwłaszcza
w porównaniu z niestandardowymi transformacjami i zadaniami.
Wydruk 8-1 pokazuje sposób tworzenia nowego pakietu DTS.
Listing 8-1
private Package CreatePackage(String Name, String Description )
{
Package p = new Package();
p.PackageType = DTSPackageType.DTSDesigner90;
p.Name = Name;
p.Description = Description;
p.CreatorComputerName = System.Environment.MachineName;
p.CreatorName = System.Environment.UserName;
return p;
}
Powyższa metoda zwraca egzemplarz pakietu DTS, do którego można dodawać zadania,
połączenia itd. Powyższy przykład zakłada użycie pokazanej poniżej dyrektywy, wskazującej
na istniejącą podczas wykonywania przestrzeń nazw pakietu DTS.
using Microsoft.SqlServer.Dts.Runtime;
Wydruk 8-2 pokazuje, w jaki sposób dodać do pakietu menedżera połączeń typu OLE DB.
Listing 8-2
private void AddOLEDBConnectionManager(String DatabaseName,
String ConnectionManagerName, ref Package package)
{
ConnectionManager connMgr = package.Connections.Add("OLEDB");
connMgr.Name = ConnectionManagerName;
Zgłoś jeśli naruszono regulamin