首页 文章

Azure Stream Analytics GetMetadataPropertyValue无效

提问于
浏览
0

我有一个模拟iot设备的.net应用程序 . 它使用Microsoft.Azure.Devices.Client创建设备消息并将它们发送到iothub,然后将其路由到事件中心,Azure Stream Analytics将其作为输入 .

我在“模拟器”中有以下内容:

messageToSend = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(message.Payload)))
                 {
                   MessageId = new Guid().ToString(),
                   ContentType = "application/json",
                   ContentEncoding = "utf-8",
                 };
                 messageToSend.Properties.Add("test", "test");

在我的azure流分析查询中,我有:

SELECT *, GetMetadataPropertyValue(InputEH, '[User].[test]') as test
INTO OutputEH 
FROM InputEH
WHERE test = 'test'

由于某种原因,查询永远不会向OutputEH输出任何数据 . 我尝试了相同的查询,除了不将“test”属性添加到MessageProperties我已将它放在消息体中,如果我的查询使用“WHERE InputEh.test ='test'”,它会按预期工作

为了验证属性,我将输出设置为eventhub,并在其上设置一个事件中心处理器,如果删除“WHERE”子句,消息就会进入 . 在事件中心处理器中,似乎已删除标头,这告诉我ASA由于某种原因正在丢弃标头 .

不知道我在这里做错了什么 . 任何帮助,将不胜感激 .

2 回答

  • 0

    事实证明问题出在查询中 . GetMetaDataPropertyValue()可以工作,但不是在MSDN @ GetMetaDataPropertyValue上描述的 . 我必须将方法移动到我的where子句中才能使其成功运行 . 所以现在我的查询如下:

    SELECT *
    INTO OutputEH 
    FROM InputEH as input
    WHERE GetMetadataPropertyValue(input, '[User].[test]') = test
    

    我不确定为什么在SELECT子句中这样做不起作用但这对我有用 .

  • 0

    在上一篇文章中, GetMetadataPropertyValue(input, '[User].[test]') 为null, test 也为null . 所以在查询字符串中, where section始终为true,这意味着它会将所有数据从InputEH输出到OutputEH . 此外,您需要使用EventHub中的实时数据测试何时运行作业 .

相关问题