在Azure Eventhub中如何将传入的数据发送到sql数据库

时间:2016-07-13 16:42:39

标签: azure-eventhub azure-stream-analytics

我收集了一些xml格式的数据。看起来像

的东西
<OLDI_MODULE xmlns="">
 <StStoHMI_IBE>
<PRack>0</PRack>
<PRackSlotNo>0</PRackSlotNo>
<RChNo>0</RChNo>
<RChSlotNo>0</RChSlotNo>

此数据将发送到Azure Eventhub。我想将此数据发送到SQL数据库。我在Azure Stream Analytics中创建了一个流,它接受此输入并将其放入SQL数据库中。但是当输入格式被要求输入流时,只有JSON,CVS和Avro。我可以使用以下哪种格式?或者我应该使用哪种azure服务将数据从Eventhub移动到sql数据库?

2 个答案:

答案 0 :(得分:0)

JSON将是一个在Azure Event Hub中使用的良好数据格式。在Azure Event Hub中收到数据后。您可以使用Azure Stream Analytics移动数据SQL DB。

Azure Stream Analytics由3部分组成:输入,查询和输出。如果输入是事件中心,则输出是SQL DB。您应该编写查询以选择所需的字段并将其输出。

查看以下文章:

https://azure.microsoft.com/en-us/documentation/articles/stream-analytics-define-outputs/

Stream Analytics将是您应该查看的Azure资源,用于从Event Hub移动数据

答案 1 :(得分:0)

到目前为止,最简单的选择是按预期使用Azure Stream Analytics。但是,在使用数据之前,您必须将xml转换为json或其他支持的格式。

其他选项更复杂,需要一些代码和托管代码的方法(例如使用辅助角色或Web作业),但提供了最大的灵活性。该选项是使用EventProcessor从事件中心读取数据并将其放入数据库中。

请参阅https://azure.microsoft.com/en-us/documentation/articles/event-hubs-csharp-ephcs-getstarted/了解如何进行设置。

主要工作是在Task IEventProcessor.ProcessEventsAsync(PartitionContext context, IEnumerable messages)方法中完成的。根据示例,它将类似于:

async Task IEventProcessor.ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
{
    foreach (EventData eventData in messages)
    {
        string xmlData = Encoding.UTF8.GetString(eventData.GetBytes());

        // Parse the xml and store the data in db using Ado.Net or whatever you're comfortable with
    }

    //Call checkpoint every 5 minutes, so that worker can resume processing from 5 minutes back if it restarts.
    if (this.checkpointStopWatch.Elapsed > TimeSpan.FromMinutes(5))
    {
        await context.CheckpointAsync();
        this.checkpointStopWatch.Restart();
    }
}