你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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 块中,以避免向处理引擎引发意外异常。

后续步骤