你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 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 块中,以避免向处理引擎引发意外异常。