nik-macmillan-YXemfQiPR_E-unsplash
Łukasz Bielak

Łukasz Bielak

Jak w kilku krokach załadować hurtownię danych w Azure Data Factory

W poprzednich artykułach omówiłem czym jest proces ETL oraz zaprezentowałem usługę Azure Data Factory, która jest narzędziem do budowania tego procesu. Dzisiaj natomiast zaprezentuję w jaki sposób można wykorzystać ADF do ładowania hurtowni danych. Dla przykładu utworzę prosty proces ETL, wykorzystując podstawowe elementy Azure Data Factory V2.

W poprzednich artykułach omówiłem czym jest proces ETL oraz zaprezentowałem usługę Azure Data Factory, która jest narzędziem do budowania tego procesu. Dzisiaj natomiast zaprezentuję w jaki sposób można wykorzystać ADF do ładowania hurtowni danych. Dla przykładu utworzę prosty proces ETL, wykorzystując podstawowe elementy Azure Data Factory V2.

Środowisko developerskie

Do zbudowania procesu ETL niezbędna będzie oczywiście subskrypcja Azure. Druga sprawa to źródło danych – w tym przypadku wykorzystamy Azure SQL Database z domyślnie utworzoną bazą AdventureWorksLT. Miejscem docelowym ładowania danych będzie tabela w usłudze Azure SQL Data Warehouse. W przypadku kiedy byłaby konieczność przenoszenia danych między środowiskami On Premises (czyli na przykład między maszynami wirtualnymi albo maszynami w sieciach lokalnych, które nie są w infrastrukturze Azure), konieczna będzie instalacja Integration Runtime, o której pisałem ostatnio.

Azure Data Factory – ładowanie hurtowni danych

Jako że posiadamy już wiedzę teoretyczną (a jeśli nie, to zachęcam do przeczytania poprzedniego artykułu), to możemy zaczynać.

1. Pierwszą czynnością, jaką powinniśmy wykonać, jest utworzenie instancji usługi Azure Data Factory.

Azure Data Factory

2. Następnie konfigurujemy usługę. Przy tym kroku należy pamiętać, że nazwa musi być globalnie unikatowa. Nie zaznaczamy też opcji Enable GIT, ponieważ w tym przykładzie nie będziemy wersjonować rozwiązania (gdybyśmy jednak chcieli to zrobić – nie ma problemu). Po podłączeniu się do repozytorium zmiany odkładają się w nim niemal niezauważalnie. Pamiętajmy, aby wybrać opcję V2 (Przypominam, że V1 nie umożliwia graficznej edycji procesu).

Azure Data Factory

3. Po utworzeniu instancji możemy rozpocząć budowanie procesu transferu danych. W tym celu musimy otworzyć zasób i wybrać opcję Author & Monitor.

Azure Data Factory

4.Teraz zostajemy przekierowani do usługi Azure Data Factory. Aby rozpocząć pracę należy kliknąć na opcję edycji.

Azure Data Factory

5. Po przełączeniu otrzymujemy poniższy widok:

Azure Data Factory

6. Kolejnym krokiem jest utworzenie Linked Service’u do bazy danych i do hurtowni. Jest to nic innego jak utworzenie połączenia do obu baz.

Azure Data Factory

7. Konfigurację Linked Service’u zaprezentowałem na obrazku poniżej. To, na co należy zwrócić uwagę, to infrastruktura Integration Runtime, którą w tym kroku należy utworzyć (w rozwijanym pasku wystarczy wybrać opcję New). Druga istotna kwestia to sposób podłączenia się do bazy. Na potrzeby tego przykładu możemy bezpośrednio wpisać hasło administratora, ale nie jest to dobra praktyka. W normalnej sytuacji powinniśmy skorzystać z usługi KeyValut.

Azure Data Factory

8. Kiedy mamy już do dyspozycji dwa połączenia, powinniśmy utworzyć Datasety, czyli swego rodzaju podłączenie do tabeli źródła i destynacji.

Azure Data Factory

9. Konfiguracja przykładowego Datasetu wygląda następująco:

  • W zakładce General należy wpisać nazwę – w tym przypadku będzie to nazwa tabeli źródłowej.
Azure Data Factory
  • Zakładka Connection – w niej należy wybrać tabelę, z której zostaną pobrane/załadowane dane.
Azure Data Factory
  • Schema – tu konfigurowany jest schemat tabeli. Po kliknięciu na opcję Import schema, schemat (łącznie z typami danych) zostaje zaimportowany.
Azure Data Factory
  • Parameters – ta zakładka nie będzie wykorzystywana w przykładzie.

10. Kolejnym krokiem jest utworzenie Pipeline’u, czyli procesu transferującego dane z bazy do hurtowni. Do tego wykorzystamy aktywność Copy Activity.

Azure Data Factory
Azure Data Factory

11. Teraz musimy wskazać źródło – w tym przykładzie jest to tabela SalesOrderDetail. Źródłem może być także zapytanie lub procedura składowana.

Azure Data Factory

12. Następnie wskazujemy destynację (Sink). Zaznaczenie opcji Polybase jest możliwe w przypadku, gdy posiadamy konto magazynu (Storage Account), które jest niezbędne do wykonania tej operacji. Warto dodać, że opcja ta może znacznie przyspieszyć ładowanie danych.

Azure Data Factory

13. W kolejnym kroku powinniśmy sprawdzić mapowanie – głównie chodzi tu o typy danych. W przypadku kiedy są niezgodne – otrzymamy błąd.

Azure Data Factory

14. Następnie konfigurujemy opcje wydajności – w tym przykładzie wykorzystamy ustawienia domyślne. Aby Polybase zadziałała prawidłowo należy włączyć opcję Stage i wskazać konto magazynu.

Azure Data Factory

15. Teraz uruchamiamy proces w trybie debugowania.

Azure Data Factory

W trakcie dostajemy informacje o postępie procesu:

Azure Data Factory

A także o jego zakończeniu:

Azure Data Factory

Status Succeeded informuje nas o tym, że dane zostały pomyślnie załadowane! Gdyby zaistniała potrzeba uruchamiania procesu o określonej godzinie, konieczne będzie utworzenie wyzwalacza – taki proces opisywałem w poprzednim artykule – dodać link.  

Dla zainteresowanych

Tak wygląda przykładowy plik JSON pipeline’u:

{
    "name": "pipeline1",
    "properties": {
        "activities": [
            {
                "name": "Copy Data1",
                "type": "Copy",
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "typeProperties": {
                    "source": {
                        "type": "SqlSource"
                    },
                    "sink": {
                        "type": "SqlSink",
                        "writeBatchSize": 10000
                    },
                    "enableStaging": false,
                    "translator": {
                        "type": "TabularTranslator",
                        "columnMappings": {
                            "AddressID": "AddressID",
                            "AddressLine1": "AddressLine1",
                            "AddressLine2": "AddressLine2",
                            "City": "City",
                            "StateProvince": "StateProvince",
                            "CountryRegion": "CountryRegion",
                            "PostalCode": "PostalCode",
                            "rowguid": "rowguid",
                            "ModifiedDate": "ModifiedDate"
                        }
                    }
                },
                "inputs": [
                    {
                        "referenceName": "AzureSqlTable1",
                        "type": "DatasetReference"
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "AzureSqlTable2",
                        "type": "DatasetReference"
                    }
                ]
            }
        ]
    }
}

Słowo na zakończenie

Jak widać – transfer danych między dwoma źródłami jest dosyć prostym zadaniem. Oczywiście sprawa komplikuje się w przypadku, gdy dochodzą jakieś wymagania biznesowe. Niemniej, chciałem zainteresować tematyką Data Factory i zachęcić do stosowania tej usługi w projektach. Mam nadzieję, że ten artykuł zachęci do korzystania z tego narzędzia w przypadku nowych projektów opartych o Azure.

Udostępnij post

Share on facebook
Share on twitter
Share on linkedin
Share on print
Share on email