我有一个模拟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 回答
事实证明问题出在查询中 . GetMetaDataPropertyValue()可以工作,但不是在MSDN @ GetMetaDataPropertyValue上描述的 . 我必须将方法移动到我的where子句中才能使其成功运行 . 所以现在我的查询如下:
我不确定为什么在SELECT子句中这样做不起作用但这对我有用 .
在上一篇文章中,
GetMetadataPropertyValue(input, '[User].[test]')
为null,test
也为null . 所以在查询字符串中, where section始终为true,这意味着它会将所有数据从InputEH输出到OutputEH . 此外,您需要使用EventHub中的实时数据测试何时运行作业 .