使用复杂参数的 Azure 流分析 c# UDF on Edge
Posted
技术标签:
【中文标题】使用复杂参数的 Azure 流分析 c# UDF on Edge【英文标题】:Azure Stream Analytics c# UDF on Edge using complex parameter 【发布时间】:2018-11-01 15:07:11 【问题描述】:我有一个设备以这种格式发送数据的场景
[
"Metadata":"DeviceID":"MWS55V","GatewayID":"abc1",
"Payload": ["Type":"401","Data":"17.51"],
"Timestamp":"2018-11-01T09:33:05Z",
"Metadata":"DeviceID":"MWS55V","GatewayID":"abc1",
"Payload": ["Type":"401","Data":"18.28"],
"Timestamp":"2018-11-01T09:34:05Z"
]
我添加了Azure Stream Analytics C# UDF
想法是使用整个对象作为参数,并根据Payload.Type
更改每个Payload.Data
。
但是当我尝试将Payload
对象作为参数传递给c# UDF
时,会引发异常
错误:** 系统异常 ** ASA 将不支持的类型 System.Object 传递给 CSharp UDF Func 以可变负载
它起作用的唯一方法是当我尝试类型(长、字符串等)的参数时。
虽然这个doc 明确表示支持的类型,有没有办法接收c# udf
内的整个对象,或者这个服务不是这个场景的最佳选择,我需要使用别的东西?
【问题讨论】:
【参考方案1】:Payload 对象是一个数组,它是流分析 C# UDF 中支持的类型。您的函数签名应如下所示:
public static string SampleUDF(Object[] input)
您应该不会看到此错误。如果您仍然遇到问题,请告诉我。
【讨论】:
是的,这种情况有效。我还尝试将此对象作为参数 "Metadata":"DeviceID":"MWS55V","GatewayID":"abc1", "Payload": ["Type":"401","Data":"17.51"], "Timestamp":"2018-11-01T09:33:05Z",
以Object input
作为签名传递,但它会引发异常。
我不确定我是否完全理解。您是否尝试将整个传入事件传递到 UDF 中?你能解释一下你想要完成什么吗?您必须指定要传递给 UDF 的字段。
是的,我试图通过整个事件。但是你所说的You have to specify which fields you want to pass to the UDF.
解释了为什么它不起作用。以上是关于使用复杂参数的 Azure 流分析 c# UDF on Edge的主要内容,如果未能解决你的问题,请参考以下文章