W ostatnim artykule opisywałem w jaki sposób można wdrożyć i skonfigurować Partition Managera, a także pokazywałem jak uruchomić to narzędzie z poziomu Azure Functions. Dzisiaj zaprezentuję coś bardzo praktycznego, a mianowicie dodawanie procesowania modelu AAS do naszego procesu ETL w Azure Data Factory! Oznacza to, że Partition Manager będzie działał codziennie na samym końcu procesu ETL w pełni automatycznie. Zapraszam do lektury!
Co będzie potrzebne?
Przede wszystkim wdrożony Partition Manager, instancja AAS, którą chcemy procesować, no i oczywiście Azure Data Factory. Samo wdrożenie rozwiązania będzie dosyć proste z uwagi na to, że przepływy ADF możemy opisywać w JSONie. Dlatego też przygotowałem taki przepływ i umieściłem go w repozytorium. Dzięki temu wystarczy tylko go przekleić, wykonać kilka dodatkowych czynności, po których wszystko powinno działać.
Zaczynamy – wdrażamy gotowy pipeline do procesowania
Na wstępie ważna uwaga. Teoretycznie możliwe jest uruchomienie Partition Managera tylko jednym blokiem Azure Functions w Azure Data Factory. Natomiast z uwagi na to, że korzystamy ze wzorca funkcji trwałych nie będziemy mogli kontrolować procesu, a ADF nie dostanie informacji o statusie jego zakończenia. Taka informacja jest ważna, ponieważ chcemy wiedzieć czy procesowanie zakończyło się sukcesem, czy może błędem. Aby status trafił do naszego procesu ETL należy zastosować specjalną konstrukcję, która po prostu uruchamia proces i co chwilę sprawdza jego działanie. Samo rozwiązanie nie jest mojego autorstwa, pochodzi z tego bloga, ja dostosowałem je tylko do potrzeb Partition Managera. Dlatego zachęcam do zapoznania się z treścią podlinkowanego artykułu.
Wdrażanie rozwiązania
Pierwszą czynnością, jaką musimy wykonać, jest utworzenie Linked Service’u do naszego Partition Managera i bazy z jego logami. Następnie:
- Otwieramy Azure Data Factory i klikamy na Connections:
- Wybieramy połącznie do Azure Functions:
- Wybieramy funkcję z naszej subskrypcji i podajemy jej klucz*. Powinien on znajdować się w Key Vault:
*Aby wygenerować taki klucz należy wejść w Funkcję -> Ustawienia Aplikacji Funkcji -> Dodaj nowy klucz hosta.
- Następnie musimy utworzyć Linked Service do naszej bazy administracyjnej, aby móc pobierać status, z jakim procesowanie się zakończyło:
- Kolejnym krokiem jest otwarcie projektu i skopiowanie kodu JSON z pliku ADFpipeline, utworzenie nowego pipelinu i wklejenie kodu do naszego ADF:
Po wklejeniu kodu otrzymujemy proces, który uruchomi Partition Managera i co 10 sekund będzie sprawdzał jego status. Jeżeli działanie zostanie zakończone, proces przejdzie do następnego kroku. Następnie sprawdzony zostanie status ostatniego wykonania, ale o tym opowiem więcej w następnym paragrafie.
Sprawdzanie rezultatu procesowania
Po wdrożeniu powyższych czynności nasz mechanizm powinien już zacząć działać. W przypadku Analysis Services bardzo istotne jest, aby kiedy procesowanie zakończy się błędem, cały proces ETL zakończył się błędem. Dlaczego? Ponieważ wtedy nie mamy najświeższych danych, a to może w niektórych sytuacjach doprowadzić do niepoprawnych wniosków z analizy. Aby zweryfikować status procesu powinniśmy po jego wykonaniu sprawdzić logi w tabeli ProcessingLog. Jeśli ostatni status będzie równy Finish to znaczy, że całe procesowanie zakończyło się sukcesem.
Jak wykonać takie sprawdzenie z poziomu ADF? Najprościej będzie napisać procedurę, która po prostu odpytuje tabelę i zwraca wartość „1” (w przypadku sukcesu) lub błąd (w przypadku porażki). Aby uruchomić procedurę składowaną z poziomu ADF wystarczy użyć specjalnego do tego typu działania bloku – Stored Procedure. Sama procedura jak i bloczek są oczywiście dostępne w repozytorium i zachęcam do zapoznania się z kodem.
Podsumowanie
Jak widać podpięcie Partition Managera do procesu ETL jest bardzo proste i jedyne co należy zrobić to wykorzystać gotowy kod z repozytorium. Natomiast warto zapoznać się też z kodem procedury, a także mechanizmem działania procesu, aby w razie konieczności jakiejś modyfikacji nie mieć z tym problemu.