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

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

如果用户定义的函数 (UDF) 不按预期工作,则需要对其进行调试以找出问题。 当使用 Visual Studio CodeVisual Studio 在本地运行作业时,可以调试流分析作业的 UDF。

当你在本地对实时输入流运行作业时,它仅模拟在一个节点上执行云 Azure 流分析引擎的操作。 实时数据本地测试不能取代可在云中执行的性能和可伸缩性测试,但此测试可帮助在功能测试期间节省时间,因为无需在每次想要测试时都将作业提交到云中。 此外,对于本地或示例数据的本地运行,将禁用时间策略,但实时数据测试支持时间策略。

选择语言

可以使用 .NET (C#) 或 JavaScript 为 Azure 流分析编写 UDF。

C# 中的函数

使用 Visual Studio 编写 .NET UDF 时,可以获得与任何 .NET 类项目相同的支持级别。 此支持包括:

  • 编译支持,如语法检查和编译器支持。

  • 在流分析解决方案中添加、生成和引用 C# 项目和工件的功能。

  • 轻松复用封装在可共享项目中的代码。

  • 直接在 Visual Studio 中调试支持。 将流分析项目设置为启动项目,并在 C# 代码中设置断点。 然后,按 F5 调试 C# 代码,就像对任何其他 C# 项目一样。

JavaScript 中的函数

JavaScript 是用于在流分析中创建函数的另一个选项。 JavaScript 代码直接置于流分析项目的函数区域中,这使得跨项目的共享更加困难。

编译或执行流分析项目时,会进行编译。 在运行时才发现问题的可能性更高。 对于流分析中的 JavaScript 函数,不直接提供调试支持。

JavaScript 的调试选项

因为对于流分析中的 JavaScript 函数不直接提供调试支持,因此可以通过在 HTML 站点中封装该函数并从该位置获取输出来进行调试。

以下示例显示了如何在 Visual Studio Code 中的集成运行时环境中调试 JavaScript UDF,但有一些限制。

先决条件

在开始之前,请确保 Azure 流分析项目包含以下各项:

  • 输入
  • 输出
  • 流分析查询 (.asaql)
  • 流分析作业配置 (JobConfig.json)
  • JavaScript UDF

准备文件

在下图中,.asaql 查询文件仅包含对 UDF“fxcharCount”的调用。 此更改可确保在进行更改后仍能够编译项目。

流分析测试查询文件

在“测试”中创建另一个文件夹来承载测试文件,该文件将被调用以使用 JavaScript 函数执行测试。 在此示例中,文件夹的名称为 fxcharCount,并且测试的名称为 Test_UDF.js。

下图显示了测试文件中的代码,该代码可加载功能文件并执行功能。 此示例很简单,但你可以加载其他测试数据文件,并通过其他测试循环以获取输出。 函数调用的表示法与常见调用略有不同,因为该文件被引用且未加载到运行时中,可以进行调试。

流分析测试文件

在函数中,将以下代码行添加到文件中以公开方法。 它们不会影响在 Visual Studio Code 中编译代码的能力。

var methods = {};
methods.fxchartCount = fxchartCount;
exports.data = methods;

流分析 JavaScript UDF

安装调试支持

若要调试,必须下载并安装 node.js。 根据所使用的平台安装正确的版本。 安装 Node.js 运行时后,重启 Visual Studio Code 以实现更改。

选择“运行和调试”,或按 CTRL + SHIFT + D 开始调试。 会出现一个组合框,您可以在其中选择 node.js 作为运行时。 如果只安装了 Node.js,则默认会使用它。 如果需要,可以使用 F11 逐句通过代码和附属文件。

流分析运行和调试 UDF

调试用户定义的聚合

可以使用 JavaScript UDF 的调试方法来调试用户定义的聚合 (UDA)。 在此示例中,将 UDA 添加到 .asaql 查询文件和测试文件。

与 UDF 一样,您可以调用 UDA,确保在进行更改后项目能够顺利编译。

将 uda 添加到 asaql

Test_UDA.js 文件中,将引用 UDA 文件,就像对 UDF 执行的操作一样。 此外,还可以调用 main()init()accumulate()。 在循环中调用 accumulate() 方法,以将值放入状态堆栈。 调用 computeresult() 方法以编写最终查询。

UDA 测试文件

如 UDF 示例中所示,一些代码需要添加到 UDA 本身才能公开相关方法。

var methods = {};
methods.main = main;
methods.init = main.init;
methods.accumulate = main.accumulate;
methods.computeResult = main.computeResult;
exports.data = methods;

添加到 UDA 的代码

选择“运行和调试”,或按 CTRL + SHIFT + D 开始调试。 此时会出现一个组合框,你可以在其中选择 node.js 作为运行时。 如果只安装了 Node.js,则默认会使用它。 如果需要,可以使用 F11 逐句通过代码和附属文件。

流分析运行和调试 uda

后续步骤