测试 Azure Data Lake Analytics 代码

Azure Data Lake 提供 U-SQL 语言。 U-SQL 将声明性 SQL 与命令性 C# 组合在一起,以处理任何规模的数据。 本文档介绍如何为 U-SQL 和扩展 C# 用户定义的运算符 (UDO) 代码创建测试用例。

重要

Azure Data Lake Analytics 于 2024 年 2 月 29 日停用。 了解更多信息,请查看此公告

对于数据分析,你的组织可以使用 Azure Synapse AnalyticsMicrosoft Fabric

测试 U-SQL 脚本

U-SQL 脚本已编译并针对可在 Azure 或本地计算机上运行的可执行代码进行优化。 编译和优化过程将整个 U-SQL 脚本视为整体。 不能对每个语句执行传统的单元测试。 但是,通过使用 U-SQL 测试 SDK 和本地运行 SDK,可以执行脚本级测试。

为 U-SQL 脚本创建测试用例

使用适用于 Visual Studio 的 Azure Data Lake 工具可以创建 U-SQL 脚本测试用例。

  1. 在解决方案资源管理器中右键单击 U-SQL 脚本,然后选择“ 创建单元测试”。

  2. 创建新的测试项目或将测试用例插入现有测试项目中。

    用于 Visual Studio 的 Data Lake 工具 - 创建 U-SQL 测试项目配置

管理测试数据源

测试 U-SQL 脚本时,需要测试输入文件。 若要管理测试数据,请在 解决方案资源管理器中右键单击 U-SQL 项目,然后选择“ 属性”。 可以在 测试数据源中输入源。

用于 Visual Studio 的 Data Lake 工具 - 配置项目测试数据源

在 U-SQL 测试 SDK 中调用 Initialize() 接口时,会在测试项目的工作目录下创建临时本地数据根文件夹。 在运行 U-SQL 脚本测试用例之前,测试数据源文件夹中的所有文件和文件夹都会复制到临时本地数据根文件夹。 可以通过使用分号拆分测试数据文件夹路径来添加更多测试数据源文件夹。

管理用于测试的数据库环境

如果 U-SQL 脚本使用或查询 U-SQL 数据库对象,则需要在运行 U-SQL 测试用例之前初始化数据库环境。 调用存储过程时,可能需要此方法。 Initialize() U-SQL 测试 SDK 中的接口可帮助你将 U-SQL 项目引用的所有数据库部署到测试项目的工作目录中的临时本地数据根文件夹。

有关如何管理 U-SQL 项目的数据库项目引用的更多信息,请查阅 U-SQL 数据库项目引用

验证测试结果

Run() 接口返回作业执行结果。 0 表示成功, 1 表示失败。 还可以使用 C# 断言函数来验证输出。

在 Visual Studio 中运行测试用例

U-SQL 脚本测试项目基于 C# 单元测试框架构建。 生成项目后,选择“ 测试>Windows>测试资源管理器”。 可以从 测试资源管理器运行测试用例。 或者,右键单击单元测试中的.cs文件,然后选择“ 运行测试”。

测试 C# UDO

为 C# UDO 创建测试用例

可以使用 C# 单元测试框架测试 C# 用户定义的运算符(UDO)。 测试 UDO 时,需要准备相应的 IRowset 对象作为输入。

可通过两种方式创建 IRowset 对象:

  • 从文件加载数据以创建 IRowset

    //Schema: "a:int, b:int"
    USqlColumn<int> col1 = new USqlColumn<int>("a");
    USqlColumn<int> col2 = new USqlColumn<int>("b");
    List<IColumn> columns = new List<IColumn> { col1, col2 };
    USqlSchema schema = new USqlSchema(columns);
    
    //Generate one row with default values
    IUpdatableRow output = new USqlRow(schema, null).AsUpdatable();
    
    //Get data from file
    IRowset rowset = UnitTestHelper.GetRowsetFromFile(@"processor.txt", schema, output.AsReadOnly(), discardAdditionalColumns: true, rowDelimiter: null, columnSeparator: '\t');
    
  • 使用数据收集中的数据创建 IRowset

    //Schema: "a:int, b:int"
    USqlSchema schema = new USqlSchema(
        new USqlColumn<int>("a"),
        new USqlColumn<int>("b")
    );
    
    IUpdatableRow output = new USqlRow(schema, null).AsUpdatable();
    
    //Generate Rowset with specified values
    List<object[]> values = new List<object[]>{
        new object[2] { 2, 3 },
        new object[2] { 10, 20 }
    };
    
    IEnumerable<IRow> rows = UnitTestHelper.CreateRowsFromValues(schema, values);
    IRowset rowset = UnitTestHelper.GetRowsetFromCollection(rows, output.AsReadOnly());
    

验证测试结果

调用 UDO 函数后,可以使用 C# 断言函数通过架构和行集值验证来验证结果。 可以将 U-SQL C# UDO 单元测试项目 添加到解决方案。 为此,请在 Visual Studio 中选择 “文件 > 新建 > 项目 ”。

在 Visual Studio 中运行测试用例

生成项目后,选择“ 测试>Windows>测试资源管理器”。 可以从 测试资源管理器运行测试用例。 或者,右键单击单元测试中的.cs文件,然后选择“ 运行测试”。

在 Azure Pipelines 中运行测试用例

U-SQL 脚本测试项目C# UDO 测试项目都继承了 C# 单元测试项目。 Azure Pipelines 中的 Visual Studio 测试任务 可以运行这些测试用例。

在 Azure Pipelines 中运行 U-SQL 测试用例

对于 U-SQL 测试,请确保在生成计算机上加载CPPSDK,然后将CPPSDK路径传递给USqlScriptTestRunner(cppSdkFolderFullPath: @"")

什么是 CPPSDK?

CPPSDK 是一个包,其中包括 Microsoft Visual C++ 14 和 Windows SDK 10.0.10240.0。 此包包括 U-SQL 运行时所需的环境。 可以在用于 Visual Studio 的 Azure Data Lake 工具安装文件夹下获取此包:

  • 对于 Visual Studio 2015,它位于 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake Tools for Visual Studio 2015\X.X.XXXX.X\CppSDK
  • 对于 Visual Studio 2017,它位于 C:\Program Files (x86)\Microsoft Visual Studio\2017\<Visual Studio Edition>\SDK\ScopeCppSDK
  • 对于 Visual Studio 2019,它位于 C:\Program Files (x86)\Microsoft Visual Studio\2019\<Visual Studio Edition>\SDK\ScopeCppSDK

在 Azure Pipelines 生成代理中准备 CPPSDK

在 Azure Pipelines 中准备 CPPSDK 依赖项的最常见方法是如下所示:

  1. 压缩包含 CPPSDK 库的文件夹。

  2. 将 .zip 文件签入源代码管理系统。 .zip 文件确保您签入 CPPSDK 文件夹下的所有库文件,以防止文件因为 .gitignore 文件而被忽略。

  3. 解压缩生成管道中的 .zip 文件。

  4. USqlScriptTestRunner 指向构建计算机上的这个解压缩文件夹。

在 Azure Pipelines 中运行 C# UDO 测试用例

对于 C# UDO 测试,请确保引用 UDO 所需的以下程序集。

  • Microsoft.Analytics.Interfaces
  • Microsoft.Analytics.Types
  • Microsoft.Analytics.UnitTest

如果通过 NuGet 包Microsoft.Azure.DataLake.USQL.Interfaces 引用它们,请确保在生成管道中添加 NuGet 还原任务。

后续步骤