Tutorial: Migración de datos capturados de Event Hubs a Azure Synapse Analytics mediante Event Grid y Azure FunctionsTutorial: Migrate captured Event Hubs data to Azure Synapse Analytics using Event Grid and Azure Functions

Event Hubs Capture es la forma más fácil de enviar automáticamente datos en streaming de Event Hubs a Azure Blob Storage o a Azure Data Lake Store.Event Hubs Capture is the easiest way to automatically deliver streamed data in Event Hubs to an Azure Blob storage or Azure Data Lake store. Posteriormente, puede procesar y enviar los datos a otros destinos de almacenamiento de su elección, como Azure Synapse Analytics o Cosmos DB.You can subsequently process and deliver the data to any other storage destinations of your choice, such as Azure Synapse Analytics or Cosmos DB. En este tutorial aprenderá a capturar datos de una instancia de Event Hubs y migrarlos a Azure Synapse Analytics mediante el uso de una función de Azure desencadenada por Event Grid.In this tutorial, you learn how you to capture data from your event hub into Azure Synapse Analytics by using an Azure function triggered by an event grid.

Visual Studio

  • En primer lugar, cree una instancia de Event Hubs con la característica Capture habilitada y establezca una instancia de Azure Blob Storage como destino.First, you create an event hub with the Capture feature enabled and set an Azure blob storage as the destination. Los datos que genera WindTurbineGenerator se transmiten en secuencias a la instancia de Event Hubs y se capturan automáticamente en Azure Storage como archivos Avro.Data generated by WindTurbineGenerator is streamed into the event hub and is automatically captured into Azure Storage as Avro files.
  • Después, cree una suscripción a Azure Event Grid con el espacio de nombres de Event Hubs como origen y el punto de conexión de Azure Functions como destino.Next, you create an Azure Event Grid subscription with the Event Hubs namespace as its source and the Azure Function endpoint as its destination.
  • Cada vez que un archivo Avro nuevo se envía al blob de Azure Storage mediante la característica Capture de Event Hubs, Event Grid se lo notifica a Azure Functions con el identificador URI del blob.Whenever a new Avro file is delivered to the Azure Storage blob by the Event Hubs Capture feature, Event Grid notifies the Azure Function with the blob URI. A continuación, la función migra los datos del blob a Azure Synapse Analytics.The Function then migrates data from the blob to Azure Synapse Analytics.

En este tutorial realizará lo siguiente:In this tutorial, you do the following actions:

  • Implementar la infraestructuraDeploy the infrastructure
  • Publicar código en una aplicación de FunctionsPublish code to a Functions App
  • Crear una suscripción a Event Grid desde la aplicación de FunctionsCreate an Event Grid subscription from the Functions app
  • Hacer streaming de los datos de ejemplo de en un a instancia de Event Hubs.Stream sample data into Event Hub.
  • Comprobación de los datos capturados en Azure Synapse AnalyticsVerify captured data in Azure Synapse Analytics

Requisitos previosPrerequisites

Nota

Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Aún puede usar el módulo de AzureRM que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para más información acerca del nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación del nuevo módulo Az de Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obtener instrucciones sobre la instalación del módulo Az, consulte Instalación de Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

  • Visual Studio 2019.Visual studio 2019. Asegúrese de que instala las siguientes con cargas de trabajo: desarrollo de escritorio de .NET, desarrollo de Azure, desarrollo web y de ASP.NET, desarrollo de Node.js y desarrollo de PythonWhile installing, ensure that you install the following workloads: .NET desktop development, Azure development, ASP.NET and web development, Node.js development, Python development

  • Descarga del Ejemplo de Git La solución de ejemplo contiene los siguientes componentes:Download the Git sample The sample solution contains the following components:

    • WindTurbineDataGenerator : un publicador simple que envía datos de turbina eólica de ejemplo a un centro de eventos con la función Capture habilitadaWindTurbineDataGenerator – A simple publisher that sends sample wind turbine data to a Capture-enabled event hub
    • FunctionDWDumper : una función de Azure que recibe una notificación de Event Grid cuando se captura un archivo Avro en el blob de Azure Storage.FunctionDWDumper – An Azure Function that receives an Event Grid notification when an Avro file is captured to the Azure Storage blob. Recibe la ruta de acceso del identificador URI del blob, lee su contenido y envía estos datos a Azure Synapse Analytics.It receives the blob’s URI path, reads its contents, and pushes this data to Azure Synapse Analytics.

    En este ejemplo se usa el paquete Azure.Messaging.EventHubs más reciente.This sample uses the latest Azure.Messaging.EventHubs package. Puede encontrar el ejemplo anterior que usa el paquete Microsoft.Azure.EventHubs aquí.You can find the old sample that uses the Microsoft.Azure.EventHubs package here.

Implementar la infraestructuraDeploy the infrastructure

Use Azure PowerShell o la CLI de Azure para implementar la infraestructura necesaria para este tutorial con este plantilla de Azure Resource Manager.Use Azure PowerShell or Azure CLI to deploy the infrastructure needed for this tutorial by using this Azure Resource Manager template. Esta plantilla crea los siguientes recursos:This template creates the following resources:

  • Event Hubs con la característica Capture habilitadaEvent Hub with the Capture feature enabled
  • Cuenta de almacenamiento de los datos de eventos capturadosStorage account for the captured event data
  • Un plan de Azure App Service para hospedar la aplicación FunctionsAzure app service plan for hosting the Functions app
  • Aplicación de función para procesar archivos de eventos capturadosFunction app for processing captured event files
  • Un servidor SQL lógico para hospedar Data WarehouseLogical SQL server for hosting the Data Warehouse
  • Azure Synapse Analytics para el almacenamiento de los datos migradosAzure Synapse Analytics for storing the migrated data

Las secciones siguientes proporcionan comandos de CLI de Azure y Azure PowerShell para implementar la infraestructura necesaria para el tutorial.The following sections provide Azure CLI and Azure PowerShell commands for deploying the infrastructure required for the tutorial. Actualice los nombres de los siguientes objetos antes de ejecutar los comandos:Update names of the following objects before running the commands:

  • Grupo de recursos de AzureAzure resource group
  • Región del grupo de recursosRegion for the resource group
  • Espacio de nombres de Event HubsEvent Hubs namespace
  • Centro de eventosEvent hub
  • Servidor SQL lógicoLogical SQL server
  • Usuario de SQL (y contraseña)SQL user (and password)
  • Azure SQL DatabaseAzure SQL database
  • Azure StorageAzure Storage
  • Aplicación Azure FunctionsAzure Functions App

Estos scripts tardan algún tiempo en crear todos los artefactos de Azure.These scripts take some time to create all the Azure artifacts. Espere hasta que el script se complete antes de continuar.Wait until the script completes before proceeding further. Si la implementación no se realiza por alguna razón, elimine el grupo de recursos, corrija el problema notificado y vuelva a ejecutar el comando.If the deployment fails for some reason, delete the resource group, fix the reported issue, and rerun the command.

Azure CLIAzure CLI

Para implementar la plantilla mediante la CLI de Azure, use los siguientes comandos:To deploy the template using Azure CLI, use the following commands:

az group create -l westus -n rgDataMigrationSample

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>

Azure PowerShellAzure PowerShell

Para implementar la plantilla mediante PowerShell, use los siguientes comandos:To deploy the template using PowerShell, use the following commands:

New-AzResourceGroup -Name rgDataMigration -Location westcentralus

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>

Creación de una tabla en Azure Synapse AnalyticsCreate a table in Azure Synapse Analytics

Para crear una tabla en Azure Synapse Analytics, ejecute el script CreateDataWarehouseTable.sql mediante Visual Studio, SQL Server Management Studio o el Editor de consultas del portal.Create a table in Azure Synapse Analytics by running the CreateDataWarehouseTable.sql script using Visual Studio, SQL Server Management Studio, or the Query Editor in the portal.

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

Publicación de código en la aplicación de FunctionsPublish code to the Functions App

  1. Abra la solución EventHubsCaptureEventGridDemo.sln en Visual Studio 2019.Open the solution EventHubsCaptureEventGridDemo.sln in Visual Studio 2019.

  2. En el Explorador de soluciones, haga clic con el botón derecho en FunctionEGDWDumper y seleccione Publicar.In Solution Explorer, right-click FunctionEGDWDumper, and select Publish.

    Publicar la aplicación de función

  3. Seleccione Azure Function App y Seleccionar existente.Select Azure Function App and Select Existing. Seleccione Publicar.Select Publish.

    Establecer la aplicación de función como destino

  4. Seleccione la aplicación de función que implementó con la plantilla.Select the function app that you deployed through the template. Seleccione Aceptar.Select OK.

    Seleccionar la aplicación de función

  5. Cuando Visual Studio haya configurado el perfil, seleccione Publicar.When Visual Studio has configured the profile, select Publish.

    Select publish

Después de publicar la función, estará listo para suscribirse al evento de captura desde Event Hubs.After publishing the function, you are ready to subscribe to the capture event from Event Hubs!

Crear una suscripción a Event Grid desde la aplicación de FunctionsCreate an Event Grid subscription from the Functions app

  1. Vaya a Azure Portal.Go to the Azure portal. Seleccione el grupo de recursos y la aplicación de función.Select your resource group and function app.

    Ver la aplicación de función

  2. Seleccione la función.Select the function.

    Seleccionar la función

  3. Seleccione Incorporación de una suscripción de Event Grid.Select Add Event Grid subscription.

    Agregar una suscripción

  4. Escriba un nombre para la suscripción de Event Grid.Give the event grid subscription a name. Use Espacios de nombres de Event Hubs como el tipo de evento.Use Event Hubs Namespaces as the event type. Proporcione los valores para seleccionar la instancia del espacio de nombres de Event Hubs.Provide values to select your instance of the Event Hubs namespace. Deje el punto de conexión de suscriptor con el valor proporcionado.Leave the subscriber endpoint as the provided value. Seleccione Crear.Select Create.

    Creación de una suscripción

Generación de datos de ejemploGenerate sample data

Ya ha configurado un centro de eventos, Azure Synapse Analytics, una aplicación de funciones de Azure y una suscripción a Event Grid.You have now set up your Event Hub, Azure Synapse Analytics, Azure Function App, and Event Grid subscription. Puede ejecutar WindTurbineDataGenerator.exe para generar flujos de datos para la instancia de Event Hubs después de actualizar la cadena de conexión y el nombre del centro de eventos en el código fuente.You can run WindTurbineDataGenerator.exe to generate data streams to the Event Hub after updating connection string and name of your event hub in the source code.

  1. En el portal, seleccione el espacio de nombres del centro de eventos.In the portal, select your event hub namespace. Seleccione Cadenas de conexión.Select Connection Strings.

    Seleccionar Cadenas de conexión

  2. Seleccione RootManageSharedAccessKey.Select RootManageSharedAccessKey

    Seleccionar la clave

  3. Copie Cadena de conexión: clave principal.Copy Connection string - primary Key

    Copiar clave

  4. Vuelva al proyecto de Visual Studio.Go back to your Visual Studio project. En el proyecto WindTurbineDataGenerator, abra program.cs.In the WindTurbineDataGenerator project, open program.cs.

  5. Actualice los valores de EventHubConnectionString y EventHubName con la cadena de conexión y el nombre del centro de eventos.Update values for EventHubConnectionString and EventHubName with connection string and name of your event hub.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  6. Compile la solución y ejecute la aplicación WindTurbineGenerator.exe.Build the solution, then run the WindTurbineGenerator.exe application.

Comprobación de los datos capturados en Data WarehouseVerify captured data in data warehouse

Transcurridos unos minutos, consulte la tabla en Azure Synapse Analytics.After a couple of minutes, query the table in Azure Synapse Analytics. Observe que los datos que ha generado WindTurbineDataGenerator se han transmitido en secuencias al centro de eventos, se han capturado en un contenedor de Azure Storage y, después, se han migrado a la tabla de Azure Synapse Analytics mediante Azure Functions.You observe that the data generated by WindTurbineDataGenerator has been streamed to your Event Hub, captured into an Azure Storage container, and then migrated into the Azure Synapse Analytics table by Azure Function.

Pasos siguientesNext steps

Puede usar las eficaces herramientas de visualización de datos con Data Warehouse para conseguir detalles accionables.You can use powerful data visualization tools with your data warehouse to achieve actionable insights.

En este artículo se muestra cómo usar Power BI con Azure Synapse Analytics.This article shows how to use Power BI with Azure Synapse Analytics