Samouczek: migrowanie przechwyconych danych z usługi Azure Storage do usługi Azure Synapse Analytics przy użyciu usługi Azure Event Grid i usługi Azure Functions

W tym samouczku przeprowadzisz migrację przechwyconych danych z usługi Event Hubs z usługi Azure Blob Storage do usługi Azure Synapse Analytics, w szczególności dedykowanej puli SQL przy użyciu usługi Azure Event Grid i usługi Azure Functions.

Application overview

Ten diagram przedstawia przepływ pracy rozwiązania, które tworzysz w ramach tego samouczka:

  1. Dane wysłane do centrum zdarzeń platformy Azure są przechwytywane w magazynie obiektów blob Azure.
  2. Po zakończeniu przechwytywania danych zdarzenie jest generowane i wysyłane do usługi Azure Event Grid.
  3. Usługa Azure Event Grid przekazuje te dane zdarzeń do aplikacji funkcji platformy Azure.
  4. Aplikacja funkcji pobiera obiekt blob z magazynu, używając adresu URL obiektu blob.
  5. Aplikacja funkcji migruje dane obiektu blob do usługi Azure Synapse Analytics.

W tym artykule wykonasz następujące kroki:

  • Wdrażanie wymaganej infrastruktury na potrzeby samouczka
  • Publikowanie kodu do aplikacji usługi Functions
  • Tworzenie subskrypcji usługi Event Grid
  • Przesyłanie strumieniowe przykładowych danych do usługi Event Hubs
  • Weryfikowanie przechwyconych danych w usłudze Azure Synapse Analytics

Wymagania wstępne

Do ukończenia tego samouczka niezbędne są następujące elementy:

  • W tym artykule założono, że znasz usługę Event Grid i event hubs (zwłaszcza funkcję przechwytywania). Jeśli nie znasz usługi Azure Event Grid, zobacz Wprowadzenie do usługi Azure Event Grid. Aby dowiedzieć się więcej o funkcji przechwytywania usługi Azure Event Hubs, zobacz Przechwytywanie zdarzeń za pośrednictwem usługi Azure Event Hubs w usłudze Azure Blob Storage lub Azure Data Lake Storage.
  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Program Visual Studio z obciążeniami dla: programowanie aplikacji klasycznych .NET, programowanie na platformie Azure, tworzenie ASP.NET i tworzenie aplikacji internetowych, programowanie Node.js i programowanie w języku Python.
  • Pobierz na komputer przykładowy projekt EventHubsCaptureEventGridDemo.
    • WindTurbineDataGenerator — prosty wydawca, który wysyła przykładowe dane turbiny wiatrowej do centrum zdarzeń z włączoną funkcją Przechwytywanie.
    • FunctionDWDumper — funkcja platformy Azure, która odbiera powiadomienie z usługi Azure Event Grid po przechwyceniu pliku Avro do obiektu blob usługi Azure Storage. Otrzymuje ścieżkę identyfikatora URI obiektu blob, odczytuje jego zawartość i wypycha te dane do usługi Azure Synapse Analytics (dedykowana pula SQL).

Wdrażanie infrastruktury

W tym kroku wdrożysz wymaganą infrastrukturę za pomocą szablonu usługi Resource Manager. Podczas wdrażania szablonu tworzone są następujące zasoby:

  • Centrum zdarzeń z włączoną funkcją Capture
  • Konto magazynu na potrzeby przechwyconych plików
  • Plan usługi aplikacji do hostowania aplikacji funkcji
  • Aplikacja funkcji do przetwarzania zdarzeń
  • Rozwiązanie SQL Server do hostowania magazynu danych
  • Usługa Azure Synapse Analytics (dedykowana pula SQL) do przechowywania migrowanych danych

Wdrażanie infrastruktury przy użyciu interfejsu wiersza polecenia platformy Azure

  1. Zaloguj się w witrynie Azure Portal.

  2. Wybierz przycisk Cloud Shell u góry.

    Screenshot of Azure portal showing the selection of Cloud Shell button.

  3. W dolnej części przeglądarki zostanie otwarta usługa Cloud Shell.

    1. Jeśli używasz usługi Cloud Shell po raz pierwszy:
      1. Jeśli zobaczysz opcję wyboru między powłoką Bash i programem PowerShell, wybierz pozycję Bash.

      2. Utwórz konto magazynu, wybierając pozycję Utwórz magazyn. Usługa Azure Cloud Shell wymaga konta magazynu platformy Azure do przechowywania niektórych plików.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Zaczekaj na zainicjowanie usługi Cloud Shell.

        Screenshot showing the Cloud Shell initialized.

  4. W usłudze Cloud Shell wybierz pozycję Bash , jak pokazano na powyższej ilustracji, jeśli nie została jeszcze wybrana.

  5. Utwórz grupę zasobów platformy Azure, uruchamiając następujące polecenie interfejsu wiersza polecenia:

    1. Skopiuj poniższe polecenie i wklej je w oknie usługi Cloud Shell. Zmień nazwę i lokalizację grupy zasobów, jeśli chcesz.

      az group create -l eastus -n rgDataMigration
      
    2. Naciśnij klawisz ENTER.

      Oto przykład:

      user@Azure:~$ az group create -l eastus -n rgDataMigration
      {
        "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration",
        "location": "eastus",
        "managedBy": null,
        "name": "rgDataMigration",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null
      }
      
  6. Wdróż wszystkie zasoby wymienione w poprzedniej sekcji (centrum zdarzeń, konto magazynu, aplikację funkcji, usługę Azure Synapse Analytics), uruchamiając następujące polecenie interfejsu wiersza polecenia:

    1. Skopiuj polecenie i wklej je w oknie usługi Cloud Shell. Alternatywnie możesz skopiować/wkleić do wybranego edytora, ustawić wartości, a następnie skopiować polecenie do usługi Cloud Shell. Jeśli wystąpi błąd z powodu nazwy zasobu platformy Azure, usuń grupę zasobów, napraw nazwę i ponów próbę wykonania polecenia.

      Ważne

      Przed uruchomieniem polecenia określ wartości dla następujących jednostek:

      • Nazwa utworzonej wcześniej grupy zasobów.
      • Nazwa przestrzeni nazw centrum zdarzeń.
      • Nazwa centrum zdarzeń. Możesz pozostawić wartość bez zmian (hubdatamigration).
      • Nazwa serwera SQL.
      • Nazwa użytkownika i hasło SQL.
      • Nazwa bazy danych.
      • Nazwa konta magazynu
      • Nazwa aplikacji funkcji.
      az deployment group create \
          --resource-group rgDataMigration \
          --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \
          --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
      
    2. W oknie usługi Cloud Shell naciśnij klawisz ENTER, aby uruchomić polecenie. Ten proces może zająć trochę czasu, ponieważ tworzysz kilka zasobów. W wyniku wykonania polecenia upewnij się, że nie wystąpiły żadne błędy.

  7. Zamknij usługę Cloud Shell, wybierając przycisk Cloud Shell w portalu (lub) X w prawym górnym rogu okna usługi Cloud Shell.

Sprawdzanie, czy są tworzone zasoby

  1. W witrynie Azure Portal wybierz pozycję Grupy zasobów w menu po lewej stronie.

  2. Przefiltruj listę grup zasobów, wprowadzając w polu wyszukiwania nazwę grupy zasobów.

  3. Wybierz grupę zasobów na liście.

    Screenshot showing the selection of your resource group.

  4. Sprawdź, czy w grupie zasobów są wyświetlane następujące zasoby:

    Screenshot showing resources in the resource group.

Tworzenie tabeli w usłudze Azure Synapse Analytics

W tej sekcji utworzysz tabelę w dedykowanej puli SQL utworzonej wcześniej.

  1. Na liście zasobów w grupie zasobów wybierz dedykowaną pulę SQL.

  2. Na stronie Dedykowana pula SQL w sekcji Typowe zadania w menu po lewej stronie wybierz pozycję Edytor zapytań (wersja zapoznawcza).

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the Azure portal.

  3. Wprowadź nazwę użytkownika i hasło dla serwera SQL, a następnie wybierz pozycję OK. Jeśli zostanie wyświetlony komunikat informujący o umożliwieniu klientowi dostępu do serwera SQL, wybierz pozycję Zezwalaj na adres IP><na serwerze <programu SQL Server>, a następnie wybierz przycisk OK.

  4. W oknie zapytania skopiuj i uruchom następujący skrypt SQL:

    CREATE TABLE [dbo].[Fact_WindTurbineMetrics] (
        [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MeasureTime] datetime NULL,
        [GeneratedPower] float NULL,
        [WindSpeed] float NULL,
        [TurbineSpeed] float NULL
    )
    WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
    

    Screenshot showing the query editor.

  5. Nie zamykaj tej karty lub okna, aby na końcu tego samouczka można było sprawdzić, czy dane zostały utworzone.

Publikowanie aplikacji usługi Azure Functions

Najpierw pobierz profil publikowania aplikacji Usługi Functions z witryny Azure Portal. Następnie użyj profilu publikowania, aby opublikować projekt lub aplikację usługi Azure Functions z poziomu programu Visual Studio.

Pobieranie profilu publikowania

  1. Na stronie Grupa zasobów wybierz aplikację usługi Azure Functions na liście zasobów.

    Screenshot showing the selection of the function app in the list of resources for a resource group.

  2. Na stronie Aplikacja funkcji dla aplikacji wybierz pozycję Pobierz profil publikowania na pasku poleceń.

    Screenshot showing the selection of the **Get Publish Profile** button on the command bar of the function app page.

  3. Pobierz i zapisz plik w podfolderze FunctionEGDDumper folderu EventHubsCaptureEventGridDemo.

Publikowanie profilu publikowania w celu opublikowania aplikacji usługi Functions

  1. Uruchom program Visual Studio.

  2. Otwórz rozwiązanie EventHubsCaptureEventGridDemo.sln, które zostało pobrane z repozytorium GitHub w ramach wymagań wstępnych. Można go znaleźć w folderze /samples/e2e/EventHubsCaptureEventGridDemo .

  3. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt FunctionEGDWDumper, a następnie wybierz pozycję Publikuj.

  4. Na poniższym ekranie wybierz pozycję Uruchom lub Dodaj profil publikowania.

  5. W oknie dialogowym Publikowanie wybierz pozycję Importuj profil dla pozycji Cel, a następnie wybierz przycisk Dalej.

    Screenshot showing the selection **Import Profile** on the **Publish** dialog box.

  6. Na karcie Importowanie profilu wybierz plik ustawień publikowania zapisany wcześniej w folderze FunctionEGDWDumper, a następnie wybierz pozycję Zakończ.

  7. Gdy program Visual Studio skonfiguruje profil, wybierz pozycję Opublikuj. Upewnij się, że publikowanie zakończyło się pomyślnie.

  8. W przeglądarce internetowej z otwartą stroną funkcji platformy Azure wybierz pozycję Funkcje w środkowym okienku. Upewnij się, że na liście jest wyświetlana funkcja EventGridTriggerMigrateData . Jeśli go nie widzisz, spróbuj opublikować go ponownie w programie Visual Studio, a następnie odśwież stronę w portalu.

    Screenshot showing the confirmation of function creation.

Po opublikowaniu funkcji możesz przystąpić do subskrybowania zdarzenia.

Subskrybowanie zdarzenia

  1. W nowej karcie lub nowym oknie przeglądarki internetowej zaloguj się do witryny Azure Portal.

  2. W witrynie Azure Portal wybierz pozycję Grupy zasobów w menu po lewej stronie.

  3. Przefiltruj listę grup zasobów, wprowadzając w polu wyszukiwania nazwę grupy zasobów.

  4. Wybierz grupę zasobów na liście.

  5. Wybierz przestrzeń nazw usługi Event Hubs z listy zasobów.

  6. Na stronie Przestrzeń nazw usługi Event Hubs wybierz pozycję Zdarzenia w menu po lewej stronie, a następnie wybierz pozycję + Subskrypcja zdarzeń na pasku narzędzi.

    Screenshot of the Events page for an Event Hubs namespace with Add event subscription link selected.

  7. Na stronie Tworzenie subskrypcji zdarzeń wykonaj następujące kroki:

    1. Wprowadź nazwę subskrypcji zdarzeń.

    2. Wprowadź nazwę tematu systemowego. Temat systemowy zawiera punkt końcowy nadawcy do wysyłania zdarzeń. Aby uzyskać więcej informacji, zobacz Tematy systemowe

    3. W polu Typ punktu końcowego wybierz pozycję Funkcja platformy Azure.

    4. W polu Punkt końcowy wybierz link.

    5. Na stronie Wybieranie funkcji platformy Azure wykonaj następujące kroki, jeśli nie zostaną wypełnione automatycznie.

      1. Wybierz subskrypcję platformy Azure z funkcją platformy Azure.
      2. Wybierz grupę zasobów dla funkcji.
      3. Wybierz aplikację funkcji.
      4. Wybierz miejsce wdrożenia.
      5. Wybierz funkcję EventGridTriggerMigrateData.
    6. Na stronie Wybieranie funkcji platformy Azure wybierz pozycję Potwierdź wybór.

    7. Następnie ponownie na stronie Tworzenie subskrypcji zdarzeń wybierz pozycję Utwórz.

      Screenshot of the Create an event subscription page.

  8. Sprawdź, czy subskrypcja zdarzeń została utworzona. Przejdź do karty Subskrypcje zdarzeń na stronie Zdarzenia dla przestrzeni nazw usługi Event Hubs.

    Screenshot showing the Event Subscriptions tab on the Events page.

Uruchamianie aplikacji w celu wygenerowania danych

Zakończono konfigurowanie centrum zdarzeń, dedykowaną pulę SQL (dawniej SQL Data Warehouse), aplikację funkcji platformy Azure i subskrypcję zdarzeń. Przed uruchomieniem aplikacji, która generuje dane dla centrum zdarzeń, należy skonfigurować kilka wartości.

  1. W witrynie Azure Portal jak poprzednio przejdź do grupy zasobów.

  2. Wybierz przestrzeń nazw usługi Event Hubs.

  3. Na stronie Przestrzeń nazw usługi Event Hubs wybierz pozycję Zasady dostępu współużytkowanego w menu po lewej stronie.

  4. Z listy zasad wybierz pozycję RootManageSharedAccessKey.

    Screenshot showing the Shared access policies page for an Event Hubs namespace.

  5. Wybierz przycisk kopiowania obok pola tekstowego Parametry połączenia — klucz podstawowy.

  6. Wróć do rozwiązania programu Visual Studio.

  7. Kliknij prawym przyciskiem myszy projekt WindTurbineDataGenerator i wybierz polecenie Ustaw jako projekt startowy.

  8. W projekcie WindTurbineDataGenerator otwórz plik program.cs.

  9. Zastąp ciąg <EVENT HUBS NAMESPACE CONNECTION STRING> parametry połączenia skopiowanymi z portalu.

  10. Jeśli użyto innej nazwy centrum zdarzeń niż hubdatamigration, zastąp <EVENT HUB NAME> ciąg nazwą centrum zdarzeń.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Stwórz rozwiązanie. Uruchom aplikację WindTurbineGenerator.exe.

  12. Po kilku minutach na drugiej karcie przeglądarki, na której jest otwarte okno zapytania, wykonaj zapytanie dotyczące tabeli w magazynie danych dla zmigrowanych danych.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Screenshot showing the query results.

Monitorowanie rozwiązania

Ta sekcja ułatwia monitorowanie rozwiązania lub rozwiązywanie problemów z tym rozwiązaniem.

Wyświetlanie przechwyconych danych na koncie magazynu

  1. Przejdź do grupy zasobów i wybierz konto magazynu używane do przechwytywania danych zdarzeń.

  2. Na stronie Konto magazynu wybierz pozycję Przeglądarka magazynu w menu po lewej stronie.

  3. Rozwiń węzeł KONTENERY OBIEKTÓW BLOB i wybierz pozycję windturbinecapture.

  4. Otwórz folder o takiej samej nazwie jak przestrzeń nazw usługi Event Hubs w okienku po prawej stronie.

  5. Otwórz folder o takiej samej nazwie jak centrum zdarzeń (hubdatamigration).

  6. Przejdź do szczegółów folderów i zobaczysz pliki AVRO. Oto przykład:

    Screenshot showing the captured file in the storage.

Sprawdź, czy wyzwalacz usługi Event Grid wywołał funkcję

  1. Przejdź do grupy zasobów i wybierz aplikację funkcji.

  2. Wybierz kartę Funkcje w środkowym okienku.

  3. Wybierz z listy funkcję EventGridTriggerMigrateData .

  4. Na stronie Funkcja wybierz pozycję Monitor w menu po lewej stronie.

  5. Wybierz pozycję Konfiguruj , aby skonfigurować usługę Application Insights w celu przechwytywania dzienników wywołań.

  6. Utwórz nowy zasób Szczegółowe informacje aplikacji lub użyj istniejącego zasobu.

  7. Wróć do strony Monitorowanie dla funkcji.

  8. Upewnij się, że aplikacja kliencka (WindTurbineDataGenerator), która wysyła zdarzenia, jest nadal uruchomiona. Jeśli nie, uruchom aplikację.

  9. Poczekaj kilka minut (co najmniej 5 minut) i wybierz przycisk Odśwież , aby wyświetlić wywołania funkcji.

    Screenshot showing the Function invocations.

  10. Wybierz wywołanie, aby wyświetlić szczegóły.

    Usługa Event Grid dystrybuuje dane zdarzenia do subskrybentów. Poniższy przykład przedstawia dane zdarzeń wygenerowane po przechwyceniu w obiekcie blob danych przesyłanych strumieniowo za pośrednictwem centrum zdarzeń. W szczególności zwróć uwagę, że właściwość fileUrl w obiekcie data wskazuje obiekt blob w magazynie. Aplikacja funkcji używa tego adresu URL do pobierania pliku obiektu blob zawierającego przechwycone dane.

    {
      "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207",
      "subject": "hubdatamigration",
      "eventType": "Microsoft.EventHub.CaptureFileCreated",
      "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba",
      "data": {
        "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro",
        "fileType": "AzureBlockBlob",
        "partitionId": "0",
        "sizeInBytes": 473444,
        "eventCount": 2800,
        "firstSequenceNumber": 55500,
        "lastSequenceNumber": 58299,
        "firstEnqueueTime": "2020-12-07T21:49:12.556Z",
        "lastEnqueueTime": "2020-12-07T21:50:11.534Z"
      },
      "dataVersion": "1",
      "metadataVersion": "1",
      "eventTime": "2020-12-07T21:50:12.7065524Z"
    }
    

Sprawdź, czy dane są przechowywane w dedykowanej puli SQL

Na karcie przeglądarki, na której jest otwarte okno zapytania, wykonaj zapytanie dotyczące tabeli w dedykowanej puli SQL dla zmigrowanych danych.

Screenshot showing the final query results.

Następne kroki