从函数,事件中心,Azure数据资源管理器中提取数据?

时间:2019-05-02 02:48:48

标签: azure azure-eventhub azure-data-explorer

我有一些JSON数据进入IOT集线器,然后它触发了取消嵌套数据的功能。

该函数将该数据发送到事件中心,然后应该由Azure Data Explorer根据我设置的映射来摄取数据。

问题在于没有数据可以发送到数据浏览器;它将通过映射接收数据的唯一方法是将源设置为通过自定义路由接收信息的事件中心。

是否可以通过IOT集线器->功能->事件集线器在数据浏览器中提取数据?

编辑:

用于取消嵌套并将数据转发到另一个事件中心的函数:

module.exports = async function (context, eventHubMessages) {

    // receive message from IOT hub
    eventHubMessages.forEach((message, index) => {
        var devicename = message.deviceName;
        // timestamp comes in two different texts, find and store correct one
        var timestamp = (message.timestamp == null) ? message.timeStamp : message.timestamp;
        //context.log("Message: " + JSON.stringify(message));
        if (message.tags != null) {
            message.tags.forEach((tag, index) => {
                // for each tag, create new object
                var name = tag.Name;
                var value = tag.Value;
                var newObject = {
                                 "name":name,
                                 "value": value,
                                 "eventenqueuedutctime": timestamp,
                                 "devicename": devicename
                                }                
                // output message object to 'splitmessage-dev' event hub
                context.bindings.outputEventHubMessage = newObject
                context.log("Sent object: " + JSON.stringify(newObject));
            })
        }
    });

};

我可以确认另一个事件中心正在接收此数据(已通过打印输出传入消息的另一个功能进行了检查)。

映射如下:

'testTableMap' '[{"column":"name", "path":"$.name"}, 
{"column":"value", "path":"$.value"}, 
{"column":"eventenqueuedutctime", "path":"$.eventenqueuedutctime"},
{"column":"devicename", "path":"$.devicename"}]'

1 个答案:

答案 0 :(得分:0)

应该可以使用您提供的设置来提取数据。

由于未提取数据,因此您可能应该尝试诊断出卡住的位置。

我将提供一些有助于调试的一般准则。

数据未到达配置为ADX数据源的EventHub

您可以检查EventHub监视并验证事件是否正在流动。 另外,我建议您从EventHub读取数据,以确保它看起来像您期望的那样。 (似乎您已经这样做了)

这似乎不是这里的情况,因为您已经明确说明确实看到流入EventHub的事件,并且可以通过另一个函数成功读取它们。

表/映射配置不正确

尝试并从已配置的EventHub manually

提取数据
// create table 
// I am assuming strings because other types can cause format errors, 
// so I would try strings before other specific types (dynamic, datetime)
.create table IngestionTest (name: string, value:string, eventenqueuedutctime:string, devicename:string)

// add mapping
.create table IngestionTest ingestion json mapping 'testTableMap' '[{"column":"name", "path":"$.name"}, {"column":"value", "path":"$.value"}, {"column":"eventenqueuedutctime", "path":"$.eventenqueuedutctime"},{"column":"devicename", "path":"$.devicename"}]'

// ingest data manually - replace with you actual data
.ingest inline into table IngestionTest with (jsonMappingReference='testTableMap') <| '{ "name" : "test", "value": { "some":"nested", "value": true}, "eventenqueuedutctime" : "2016-01-14", "devicename": "surface" }'

如果上述方法无效,则可以通过listing ingestion errors

尝试了解原因。
.show ingestion failures

如果上述方法有效,则可以尝试使用其他数据类型。

数据源监视

您可以通过Azure门户检查的另一件事是ADX群集的指标。

尝试进入Azure门户中的群集,然后在Metrics选项卡中选择两个可以帮助您进行故障排除的指标:

Events Processed-使您了解ADX设法从EventHub读取了多少个事件。基本上,这使您知道数据源已正确配置。如果您没有看到任何事件,建议您建立一个新来源。

Ingestion Result-为您统计摄取状态(成功/失败),还可以帮助诊断失败。