使用复杂参数的 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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Azure 流分析查询创建复杂类型

Azure 流分析自定义 dll

基于 Azure 流分析 T-SQL 查询中的另一个参数动态拆分参数

使用 Azure 流分析进行简单的数据传递

流分析作业的 Azure 函数绑定类型?

流分析 UDF 在测试中有效,但在作业中无效