閱讀英文

共用方式為

Azure 流分析中的用户定义函数

Azure 流分析中类似 SQL 的查询语言使得在流数据上实现实时分析逻辑变得非常容易。 流分析允许在查询中调用自定义函数,因此提高了灵活性。 下面的代码示例是一个名为 sampleFunction 的 UDF,该 UDF 接受一个参数(作业收到的每个输入记录),并将结果作为 sampleResult 写入到输出中。

SELECT 
    UDF.sampleFunction(InputStream) AS sampleResult 
INTO 
    output 
FROM 
    InputStream 

函数类型

Azure 流分析支持以下四种函数类型:

  • JavaScript 用户定义的函数
  • JavaScript 用户定义的聚合
  • C# 用户定义函数(使用 Visual Studio)
  • Azure 机器学习

可以将这些函数用于如下场景:使用机器学习模型进行实时评分、处理字符串、执行复杂的数学计算、对数据进行编码和解码。

重要

Azure 流分析的 C# 用户定义函数将于 2024 年 9 月 30 日停用。 在该日期之后,将无法使用该功能。

限制

用户定义函数是无状态函数,其返回值只能是标量值。 不能从这些用户定义函数中调用外部 REST 终结点,因为这可能会影响作业的性能。

Azure 流分析不会记录所有函数调用和返回结果。 为了保证可重复性(例如,从旧的时间戳重新运行作业会再次产生相同的结果),不要使用 Date.GetData()Math.random() 之类的函数,因为这些函数不会每次调用都返回相同的结果。

资源日志

任何运行时错误都会被视为严重错误,可通过活动和资源日志查看。 建议让函数处理所有异常和错误,并将有效结果返回到查询。 这会阻止作业进入“失败”状态

异常处理

在 Azure 流分析中使用数据时,数据处理过程中的任何异常都被视为灾难性故障。 用户定义的函数更有可能会引发异常并导致处理停止。 若要避免此问题,请以 JavaScript 或 C# 使用 try-catch 块来捕获代码执行期间的异常。 可以记录和处理捕获的异常,而不会导致系统故障。 建议你始终将自定义代码包装在 try-catch 块中,以避免引发处理引擎的意外异常

后续步骤