使用 Visual Studio 中创建的 C# 用户定义函数 (UDF),使你能够使用自己的函数扩展 Azure 流分析查询语言。 可以重复使用现有代码(包括 DLL),并对 C# 使用数学或复杂逻辑。 可通过三种方式实现 UDF:
流分析项目中的 CodeBehind 文件
来自本地 C# 项目的 UDF
来自存储帐户中现有包中的 UDF。
本教程使用 CodeBehind 方法来实现基本的 C# 函数。 流分析作业的 UDF 功能目前处于预览状态,不应在生产工作负荷中使用。
本教程介绍如何执行下列操作:
使用 CodeBehind 创建 C# 用户定义函数。
在本地测试流分析作业。
将作业发布到 Azure。
在开始之前,请确保已完成以下先决条件:
如果还没有 Azure 订阅,可以创建一个
免费帐户
。
安装
适用于 Visual Studio 的流分析工具
以及“Azure 开发”或“数据存储或处理”工作负荷 。
如果要构建 IoT Edge 作业,请参阅现有的
流分析 Edge 开发指南
。
在 Azure 存储帐户中创建容器
创建的容器将用于存储经过编译的 C# 包。 如果创建 Edge 作业,此存储帐户还将用于将包部署到 IoT Edge 设备。 对每个流分析作业使用专用容器。 不支持对多个流分析 Edge 作业重复使用相同的容器。 如果存储帐户已具有现有的容器,则可以使用这些容器。 如果没有,则需要
创建新的容器
。
在 Visual Studio 中创建流分析项目
启动 Visual Studio。
选择“文件”>“新建”>“项目”。
在左侧的模板列表中,选择“流分析”,然后选择“Azure 流分析 Edge 应用程序”或“Azure 流分析应用程序” 。
输入项目的
名称
、
位置
和
解决方案名称
,然后选择“确定”。
打开 Visual Studio 并导航到“解决方案资源管理器”。
双击作业配置文件
JobConfig.json
。
展开“用户定义的代码配置”部分,并使用以下建议值填写配置:
使用 CodeBehind 编写 C# UDF
CodeBehind 文件是与单个 ASA 查询脚本关联的 C# 文件。 Visual Studio 工具会自动压缩 CodeBehind 文件并在提交时将其上传到 Azure 存储帐户。 必须将所有类定义为公共,并且必须将所有对象定义为静态公共 。
在“解决方案资源管理器”中,展开 Script.asql 以查找 Script.asaql.cs CodeBehind 文件 。
将此代码替换为以下示例:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace ASAEdgeUDFDemo
public class Class1
// Public static function
public static Int64 SquareFunction(Int64 a)
return a * a;
实现 UDF
在“解决方案资源管理器”中,打开 Script.asaql 文件 。
将现有查询替换为以下查询:
SELECT machine.temperature, udf.ASAEdgeUDFDemo_Class1_SquareFunction(try_cast(machine.temperature as bigint))
INTO Output
FROM Input
下载温度模拟器示例数据文件。
在“解决方案资源管理器”中,展开“输入”,右键单击 Input.json,然后选择“添加本地输入” 。
为下载的示例数据指定本地输入文件路径,然后单击“保存”。
在脚本编辑器中单击“本地运行”。 本地运行成功保存输出结果后,按任意键即可以表格形式查看结果。
还可选择“打开结果文件夹”,查看 JSON 和 CSV 格式的原始文件。
调试 UDF
可以在本地采用调试标准 C# 代码的方式调试 C# UDF。
在 C# 函数中添加断点。
按 F5 开始调试。 程序将按预期在断点处停止。
将作业发布到 Azure
在本地测试查询后,选择脚本编辑器中的“提交到 Azure”,将作业发布到 Azure。
部署到 IoT Edge 设备
如果选择构建流分析 Edge 作业,现可将其部署为 IoT Edge 模块。 请按照 IoT Edge 快速入门创建 IoT 中心、注册 IoT Edge 设备并在设备上安装和启动 IoT Edge 运行时。 然后按照部署作业教程进行操作,将流分析作业部署为 IoT Edge 模块。
在本教程中,你使用 CodeBehind 创建了一个简单的 C# 用户定义函数、将作业发布到了 Azure,并将作业部署到了 Azure 或 IoT Edge 设备。
若要详细了解对流分析作业使用 C# 用户定义函数的不同方法,请继续阅读此文:
为 Azure 流分析编写 C# 函数