ETL – rozważania luźne

Jako że od wielu lat “siedzę” w branży Business Intelligence, mam po drodze do czynienia z najprzeróżniejszymi, czasem dość ciekawymi zagadnieniami, składającymi się na ową tajemniczą “Inteligencję”.

Dziś opiszę – proszę się nie obawiać, tylko po łebkach i ogólnikowo – co udało mi się niedawno zaobserwować przy okazji ładowania dużych ilości danych XML do hurtowni.

Otóż jakiś czas temu – będzie z rok, a może trochę mniej – zbudowałem dla jednego z moich klientów proces, który najpierw, w pętli, ściąga ze strony internetowej zewnętrznego dostawcy dużo plików XML (za pomocą webservice), a następnie ładuje każdy z tych plików do warstwy STAGE hurtowni danych, gdzie następnie podlegają one dalszej obróbce.

Jak załadować plik XML do tabeli?

Podejście, jakie oryginalnie przyjąłem, było takie, że w pakiecie SSIS utworzyłem sobie (za pomocą skryptu C#.NET) pętlę iterującą po wszystkich plikach XML w folderze z bieżącej sesji, następnie każdy z tych plików wczytywałem (za pomocą innego skryptu C#.NET) do zmiennej tekstowej, której potem używałem w wywołaniu procedury TSQL ładującej te dane do tabeli na serwerze. Interpretacja XML-a odbywa się już wewnątrz procedury TSQL. I działało to całkiem zgrabnie.

Ostatnio jednak, przy całkiem innej okazji, natrafiłem na ten oto artykuł:

http://www.sqlservercentral.com/articles/SQLCLR/65656/

Jest tam przedstawiona prościutka funkcja CLR listująca zawartość folderu. Skopiowałem ją sobie i zacząłem kombinować, do czego by jej użyć.

Okazuje się, że można za jej pomocą bardzo sprawnie ładować dane z plików tekstowych bezpośrednio do bazy SQL, z całkowitym pominięciem technologii SSIS!

Innymi słowy, najpierw listujemy sobie wszystkie pliki, potem – używając OPENROWSET(BULK…) – ładujemy zawartość każdego pliku do lokalnej zmiennej typu XML, a na koniec wyodrębniamy z tej zmiennej wszystkie niezbędne elementy danych i zapisujemy je do docelowej tabeli.

Okazuje się, że takie podejście poskutkowało – w moim konkretnym przypadku – prawie dziesięciokrotnym przyspieszeniem ładowania danych. Zaskoczenie moje było wielkie, bo przecież nie wprowadziłem tu jakiejś jakościowej zmiany – ot, pozbyłem się tylko jednej technologii z łańcucha zdarzeń. Spodziewałem się maksymalnie dwukrotnego przyspieszenia (bo zamiast mieć dwie kopie zmiennej w pamięci, teraz mam tylko jedną) – a tu masz ci los, zamiast 12 plików na minutę teraz ładuje mi się prawie 100.

Dziwny świat…


Liczba słów w tym wpisie: 430

Sprawdź też

Siedem tygodni, czyli rzecz o szukaniu pracy w czasach zarazy

Blog mi ostatnio zwolnił do ślimaczego tempa. Trochę dlatego, że postanowiłem sobie zrobić przerwę od …

Pchełki Powershell: odzyskujemy klucz aktywacyjny do Windows 10

Niedawno zachciało mi się na jednym z domowych laptopów przetestować Docker for Windows. Niektóre opcje …

Zapisz się
Powiadom o
guest
2 komentarzy
Inline Feedbacks
Zobacz wszystkie komentarze
2
0
Zapraszam do skomentowania wpisu.x
()
x