チュートリアル: ビッグ データをデータ ウェアハウスにストリーミングするTutorial: Stream big data into a data warehouse

Azure Event Grid は、アプリとサービスからの通知 (イベント) への対応を可能にするインテリジェントなイベント ルーティング サービスです。Azure Event Grid is an intelligent event routing service that enables you to react to notifications (events) from apps and services. たとえば、Azure BLOB ストレージや Azure Data Lake Storage にキャプチャされた Event Hubs データを処理する Azure 関数をトリガーして、データを別のデータ リポジトリに移行できます。For example, it can trigger an Azure Function to process Event Hubs data that has been captured to an Azure Blob storage or Azure Data Lake Storage, and migrate the data to other data repositories. この Event Hubs と Event Grid の統合のサンプルでは、Event Hubs と Event Grid を使用して、キャプチャされた Event Hubs データを BLOB ストレージから SQL データ ウェアハウスにシームレスに移行する方法を説明しています。This Event Hubs and Event Grid integration sample shows you how to use Event Hubs with Event Grid to seamlessly migrate captured Event Hubs data from blob storage to a SQL Data Warehouse.

アプリケーションの概要

この図は、このチュートリアルでお客様が作成するソリューションのワークフローを示しています。This diagram depicts the workflow of the solution you build in this tutorial:

  1. Azure イベント ハブに送信されたデータが Azure BLOB ストレージにキャプチャされます。Data sent to an Azure event hub is captured in an Azure blob storage.
  2. データのキャプチャが完了すると、イベントが生成されて Azure イベント グリッドに送信されます。When the data capture is complete, an event is generated and sent to an Azure event grid.
  3. イベント グリッドによって、このイベント データが Azure 関数アプリに転送されます。The event grid forwards this event data to an Azure function app.
  4. 関数アプリによってイベント データの BLOB URL が使用され、ストレージから BLOB が取得されます。The function app uses the blob URL in the event data to retrieve the blob from the storage.
  5. 関数アプリによって BLOB データが Azure SQL データ ウェアハウスに移行されます。The function app migrates the blob data to an Azure SQL data warehouse.

この記事では、次の手順を実行します。In this article, you take the following steps:

  • Azure Resource Manager テンプレートを使用して、インフラストラクチャ (イベント ハブ、ストレージ アカウント、関数アプリ、SQL データ ウェアハウス) をデプロイする。Use an Azure Resource Manager template to deploy the infrastructure: an event hub, a storage account, a function app, a SQL data warehouse.
  • データ ウェアハウスのテーブルを作成する。Create a table in the data warehouse.
  • 関数アプリにコードを追加する。Add code to the function app.
  • イベントをサブスクライブする。Subscribe to the event.
  • イベント ハブにデータを送信するアプリを実行する。Run app that sends data to the event hub.
  • データ ウェアハウスに移行されたデータを表示する。View migrated data in data warehouse.

前提条件Prerequisites

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

このチュートリアルを完了するには、以下が必要です。To complete this tutorial, you must have:

インフラストラクチャをデプロイするDeploy the infrastructure

この手順では、Resource Manager テンプレートを使用して必要なインフラストラクチャをデプロイします。In this step, you deploy the required infrastructure with a Resource Manager template. テンプレートをデプロイすると、次のリソースが作成されます。When you deploy the template, the following resources are created:

  • Capture 機能が有効なイベント ハブEvent hub with the Capture feature enabled.
  • キャプチャされたファイル用のストレージ アカウントStorage account for the captured files.
  • 関数アプリをホストするための App Service プランApp service plan for hosting the function app
  • イベントを処理するための関数アプリFunction app for processing the event
  • データ ウェアハウスをホストするための SQL ServerSQL Server for hosting the data warehouse
  • 移行後のデータを格納するための SQL Data WarehouseSQL Data Warehouse for storing the migrated data

Azure portal で Azure Cloud Shell を起動するLaunch Azure Cloud Shell in Azure portal

  1. Azure Portal にサインインします。Sign in to the Azure portal.

  2. 上部にある [Cloud Shell] ボタンを選択します。Select Cloud Shell button at the top.

    Azure ポータル

  3. ブラウザーの下部に Cloud Shell が開かれるのがわかります。You see the Cloud Shell opened at the bottom of the browser.

    Cloud Shell

  4. Cloud Shell で、 [Bash][PowerShell] のどちらかを選択するオプションが表示されたら、 [Bash] を選択します。In the Cloud Shell, if you see an option to select between Bash and PowerShell, select Bash.

  5. Cloud Shell を初めて使用する場合は、 [ストレージの作成] を選択してストレージ アカウントを作成します。If you are using the Cloud Shell for the first time, create a storage account by selecting Create storage. Azure Cloud Shell では、一部のファイルを格納するために Azure ストレージ アカウントが必要です。Azure Cloud Shell requires an Azure storage account to store some files.

    Cloud Shell 用のストレージを作成する

  6. Cloud Shell が初期化されるまで待ちます。Wait until the Cloud Shell is initialized.

    Cloud Shell 用のストレージを作成する

Azure CLI の使用Use Azure CLI

  1. 次の CLI コマンドを実行して、Azure リソース グループを作成します。Create an Azure resource group by running the following CLI command:
    1. 次のコマンドをコピーして Cloud Shell ウィンドウに貼り付けます。Copy and paste the following command into the Cloud Shell window

      az group create -l eastus -n <Name for the resource group>
      
    2. リソース グループの名前を指定します。Specify a name for the resource group

    3. Enterキーを押します。Press ENTER.

      たとえば次のようになります。Here is an example:

      user@Azure:~$ az group create -l eastus -n ehubegridgrp
      {
        "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/ehubegridgrp",
        "location": "eastus",
        "managedBy": null,
        "name": "ehubegridgrp",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null
      }
      
  2. 次の CLI コマンドを実行して、前のセクションで説明したリソース (イベント ハブ、ストレージ アカウント、関数アプリ、SQL データ ウェアハウス) をすべてデプロイします。Deploy all the resources mentioned in the previous section (event hub, storage account, functions app, SQL data warehouse) by running the following CLI command:
    1. コマンドをコピーして Cloud Shell ウィンドウに貼り付けます。Copy and paste the command into the Cloud Shell window. または、お好みのエディターにコピーして貼り付け、値を設定してから、コマンドを Cloud Shell にコピーすることもできます。Alternatively, you may want to copy/paste into an editor of your choice, set values, and then copy the command to the Cloud Shell.

      az group deployment create \
          --resource-group rgDataMigrationSample \
          --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. 次のエンティティの値を指定します。Specify values for the following entities:

      1. お客様が先ほど作成したリソース グループの名前。Name of the resource group you created earlier.
      2. イベント ハブ名前空間の名前。Name for the event hub namespace.
      3. イベント ハブの名前。Name for the event hub. 値はそのまま (hubdatamigration) でもかまいません。You can leave the value as it is (hubdatamigration).
      4. SQL サーバーの名前。Name for the SQL server.
      5. SQL ユーザーの名前とパスワード。Name of the SQL user and password.
      6. SQL データ ウェアハウスの名前。Name for the SQL data warehouse
      7. ストレージ アカウントの名前。Name of the storage account.
      8. 関数アプリの名前。Name for the function app.
    3. Cloud Shell ウィンドウで Enter キーを押して、コマンドを実行します。Press ENTER in the Cloud Shell window to run the command. 多数のリソースを作成するため、このプロセスには時間がかかる場合があります。This process may take a while since you are creating a bunch of resources. コマンドの結果で、エラーがないことを確認します。In the result of the command, ensure that there have been no failures.

Azure PowerShell の使用Use Azure PowerShell

  1. Azure Cloud Shell で PowerShell モードに切り替えます。In Azure Cloud Shell, switch to PowerShell mode. Azure Cloud Shell の左上隅にある下矢印を選択し、 [PowerShell] を選択します。Select down arrow in the top-left corner of Azure Cloud Shell, and select PowerShell.

    PowerShell に切り替える

  2. 次のコマンドを実行して、Azure リソース グループを作成します。Create an Azure resource group by running the following command:

    1. 次のコマンドをコピーして Cloud Shell ウィンドウに貼り付けます。Copy and paste the following command into the Cloud Shell window.

      New-AzResourceGroup -Name rgDataMigration -Location westcentralus
      
    2. リソース グループの名前を指定します。Specify a name for the resource group.

    3. Enter キーを押します。Press ENTER.

  3. 次のコマンドを実行して、前のセクションで説明したリソース (イベント ハブ、ストレージ アカウント、関数アプリ、SQL データ ウェアハウス) をすべてデプロイします。Deploy all the resources mentioned in the previous section (event hub, storage account, functions app, SQL data warehouse) by running the following command:

    1. コマンドをコピーして Cloud Shell ウィンドウに貼り付けます。Copy and paste the command into the Cloud Shell window. または、お好みのエディターにコピーして貼り付け、値を設定してから、コマンドを Cloud Shell にコピーすることもできます。Alternatively, you may want to copy/paste into an editor of your choice, set values, and then copy the command to the Cloud Shell.

      New-AzResourceGroupDeployment -ResourceGroupName rgDataMigration -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json -eventHubNamespaceName <event-hub-namespace> -eventHubName hubdatamigration -sqlServerName <sql-server-name> -sqlServerUserName <user-name> -sqlServerDatabaseName <database-name> -storageName <unique-storage-name> -functionAppName <app-name>
      
    2. 次のエンティティの値を指定します。Specify values for the following entities:

      1. お客様が先ほど作成したリソース グループの名前。Name of the resource group you created earlier.
      2. イベント ハブ名前空間の名前。Name for the event hub namespace.
      3. イベント ハブの名前。Name for the event hub. 値はそのまま (hubdatamigration) でもかまいません。You can leave the value as it is (hubdatamigration).
      4. SQL サーバーの名前。Name for the SQL server.
      5. SQL ユーザーの名前とパスワード。Name of the SQL user and password.
      6. SQL データ ウェアハウスの名前。Name for the SQL data warehouse
      7. ストレージ アカウントの名前。Name of the storage account.
      8. 関数アプリの名前。Name for the function app.
    3. Cloud Shell ウィンドウで Enter キーを押して、コマンドを実行します。Press ENTER in the Cloud Shell window to run the command. 多数のリソースを作成するため、このプロセスには時間がかかる場合があります。This process may take a while since you are creating a bunch of resources. コマンドの結果で、エラーがないことを確認します。In the result of the command, ensure that there have been no failures.

Cloud Shell を閉じるClose the Cloud Shell

ポータルの [Cloud Shell] ボタンまたは Cloud Shell ウィンドウの右上隅にある [X] ボタンを選択して Cloud Shell を閉じます。Close the cloud shell by selecting the Cloud Shell button in the portal (or) X button in the top-right corner of the Cloud Shell window.

リソースが作成されたことを確認するVerify that the resources are created

  1. Azure portal で、左側のメニューにある [リソース グループ] を選択します。In the Azure portal, select Resource groups on the left menu.

  2. お客様のリソース グループの名前を検索ボックスに入力して、リソース グループの一覧をフィルター処理します。Filter the list of resource groups by entering the name of your resource group in the search box.

  3. 一覧で、お客様のリソース グループを選択します。Select your resource group in the list.

    リソース グループを選択します

  4. 次のリソースがリソース グループに表示されていることを確認します。Confirm that you see the following resources in the resource group:

    リソース グループ内のリソース

SQL Data Warehouse でテーブルを作成するCreate a table in SQL Data Warehouse

CreateDataWarehouseTable.sql スクリプトを実行して、お客様のデータ ウェアハウスにテーブルを作成します。Create a table in your data warehouse by running the CreateDataWarehouseTable.sql script. スクリプトを実行するには、Visual Studio を使用できます。または、ポータルのクエリ エディターを使用できます。To run the script, you can use Visual Studio or the Query Editor in the portal. 次の手順では、クエリ エディターの使用方法について説明します。The following steps show you how to use the Query Editor:

  1. リソース グループ内のリソースの一覧で、お客様の SQL データ ウェアハウスを選択します。In the list of resources in the resource group, select your SQL data warehouse.

  2. SQL データ ウェアハウスのページで、左側のメニューの [クエリ エディター (プレビュー)] を選択します。In the SQL data warehouse page, select Query editor (preview) in the left menu.

    SQL データ ウェアハウスのページ

  3. SQL サーバーのユーザーの名前とパスワードを入力し、 [OK] を選択します。Enter the name of user and password for the SQL server, and select OK.

    SQL Server 認証

  4. クエリ ウィンドウに、次の SQL スクリプトをコピーして実行します。In the query window, copy and run the following SQL script:

    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);
    

    SQL クエリを実行する

  5. データが作成されたことをチュートリアルの最後に確認できるように、このタブまたはウィンドウを開いたままにしておきます。Keep this tab or window open so that you can verify that the data is created at the end of the tutorial.

Azure Functions アプリを発行するPublish the Azure Functions app

  1. Visual Studio を起動します。Launch Visual Studio.

  2. お客様が前提条件の一環として GitHub からダウンロードした EventHubsCaptureEventGridDemo.sln ソリューションを開きます。Open the EventHubsCaptureEventGridDemo.sln solution that you downloaded from the GitHub as part of the prerequisites.

  3. ソリューション エクスプローラーで、 [FunctionEGDWDumper] を右クリックし、 [発行] を選択します。In Solution Explorer, right-click FunctionEGDWDumper, and select Publish.

    関数アプリの発行

  4. 次の画面が表示されたら、 [開始] を選択します。If you see the following screen, select Start.

    発行の開始ボタン

  5. [発行先を選択] ページで、 [既存のものを選択] オプションを選択し、 [プロファイルの作成] を選択します。In the Pick a publish target page, select the Select existing option, and select Create Profile.

    発行先の選択

  6. [App Service] ページで、お客様の Azure サブスクリプションを選択し、お客様のリソース グループ内の関数アプリを選択して、 [OK] をクリックします。In the App Service page, select your Azure subscription, select the function app in your resource group, and select OK.

    [App Service] ページ

  7. Visual Studio でプロファイルを構成している場合は、 [発行] を選択します。When Visual Studio has configured the profile, select Publish.

    発行の選択

関数を発行すれば、イベントをサブスクライブする準備が整います。After publishing the function, you're ready to subscribe to the event.

イベントをサブスクライブするSubscribe to the event

  1. Web ブラウザーの新しいタブまたはウィンドウで Azure portal に移動します。In a new tab or new window of a web browser, navigate to the Azure portal.

  2. Azure portal で、左側のメニューにある [リソース グループ] を選択します。In the Azure portal, select Resource groups on the left menu.

  3. お客様のリソース グループの名前を検索ボックスに入力して、リソース グループの一覧をフィルター処理します。Filter the list of resource groups by entering the name of your resource group in the search box.

  4. 一覧で、お客様のリソース グループを選択します。Select your resource group in the list.

    リソース グループを選択します

  5. 一覧で、App Service プランを選択します。Select the App Service plan in the list.

  6. [App Service プラン] ページで、左側のメニューの [アプリ] を選択し、関数アプリを選択します。In the App Service Plan page, select Apps in the left menu, and select the function app.

    関数アプリを選択する

  7. 関数アプリ、関数の順に展開してから、お客様の関数を選択します。Expand the function app, expand functions, and then select your function.

    Azure 関数を選択

  8. ツール バーの [Event Grid サブスクリプションの追加] を選択します。Select Add Event Grid subscription on the toolbar.

  9. [Create Event Grid Subscription](Event Grid サブスクリプションの作成) ページで、次の操作を行います。In the Create Event Grid Subscription page, do the following actions:

    1. [トピックの詳細] セクションで、次の操作を行います。In the TOPIC DETAILS section, do the following actions:

      1. Azure サブスクリプションを選択します。Select your Azure subscription.
      2. Azure リソース グループを選択します。Select the Azure resource group.
      3. Event Hubs 名前空間を選択します。Select the Event Hubs namespace.
    2. [イベント サブスクリプションの詳細] ページで、サブスクリプションの名前 (captureEventSub など) を入力し、 [作成] を選択します。In the EVENT SUBSCRIPTION DETAILS page, enter a name for the subscription (for example: captureEventSub), and select Create.

      Event Grid サブスクリプションを作成する

データを生成するアプリを実行するRun the app to generate data

イベント ハブ、SQL Data Warehouse、Azure 関数アプリ、イベント サブスクリプションのセットアップが完了しました。You've finished setting up your event hub, SQL data warehouse, Azure function app, and event subscription. イベント ハブのデータを生成するアプリケーションを実行する前に、いくつかの値を構成する必要があります。Before running an application that generates data for event hub, you need to configure a few values.

  1. Azure portal で、先ほど移動したお客様のリソース グループに移動します。In the Azure portal, navigate to your resource group as you did earlier.

  2. Event Hubs 名前空間を選択します。Select the Event Hubs namespace.

  3. [Event Hubs 名前空間] ページで、左側のメニューの [共有アクセス ポリシー] を選択します。In the Event Hubs Namespace page, select Shared access policies on the left menu.

  4. ポリシーの一覧で RootManageSharedAccessKey を選択します。Select RootManageSharedAccessKey in the list of policies.

  5. [接続文字列 - 主キー] テキスト ボックスの隣にあるコピー ボタンを選択します。Select the copy button next to the Connection string-primary key text box.

    イベント ハブ名前空間の接続文字列

  6. お客様の Visual Studio ソリューションに戻ります。Go back to your Visual Studio solution.

  7. WindTurbineDataGenerator プロジェクトで、program.cs を開きます。In the WindTurbineDataGenerator project, open program.cs.

  8. 2 つの定数の値を置き換えます。Replace the two constant values. EventHubConnectionString には、コピーした値を使用します。Use the copied value for EventHubConnectionString. hubdatamigrationイベント ハブの名前を使用します。Use hubdatamigration the event hub name. イベント ハブに別の名前を使用した場合は、その名前を指定します。If you used a different name for the event hub, specify that name.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  9. ソリューションをビルドします。Build the solution. WindTurbineGenerator.exe アプリケーションを実行します。Run the WindTurbineGenerator.exe application.

  10. 数分後に、データ ウェアハウスのテーブルにクエリを実行し、移行されたデータを確認します。After a couple of minutes, query the table in your data warehouse for the migrated data.

    Query results

イベント ハブによって生成されたイベント データEvent data generated by the event hub

Event Grid により、イベント データがサブスクライバーに配信されます。Event Grid distributes event data to the subscribers. 次の例は、イベント ハブを介したデータ ストリーミングが BLOB にキャプチャされるときに生成されるデータを示します。The following example shows event data generated when data streaming through an event hub is captured in a blob. 特に、data オブジェクトの fileUrl プロパティがストレージ内の BLOB を指すことに注意してください。In particular, notice the fileUrl property in the data object points to the blob in the storage. 関数アプリによってこの URL が使用され、キャプチャされたデータを含む BLOB ファイルが取得されます。The function app uses this URL to retrieve the blob file with captured data.

[
    {
        "topic": "/subscriptions/<guid>/resourcegroups/rgDataMigrationSample/providers/Microsoft.EventHub/namespaces/tfdatamigratens",
        "subject": "eventhubs/hubdatamigration",
        "eventType": "Microsoft.EventHub.CaptureFileCreated",
        "eventTime": "2017-08-31T19:12:46.0498024Z",
        "id": "14e87d03-6fbf-4bb2-9a21-92bd1281f247",
        "data": {
            "fileUrl": "https://tf0831datamigrate.blob.core.windows.net/windturbinecapture/tfdatamigratens/hubdatamigration/1/2017/08/31/19/11/45.avro",
            "fileType": "AzureBlockBlob",
            "partitionId": "1",
            "sizeInBytes": 249168,
            "eventCount": 1500,
            "firstSequenceNumber": 2400,
            "lastSequenceNumber": 3899,
            "firstEnqueueTime": "2017-08-31T19:12:14.674Z",
            "lastEnqueueTime": "2017-08-31T19:12:44.309Z"
        }
    }
]

次の手順Next steps