usql 应用程序和脚本的单元测试

Unit testing for usql applier and scripts

我有一个自定义的 USql 应用程序,它扩展了 IApplier class。

[SqlUserDefinedApplier]
public class CsvApplier : IApplier
{
    public CsvApplier()
    {
        //totalcount = count;
    }
    public override IEnumerable<IRow> Apply(IRow input, IUpdatableRow output)
    {
        //....custom logic
        //yield return or yield break
    }
}

然后从 Usql 脚本中使用此应用程序作为

@log =
SELECT t.ultimateID,
t.siteID,
.
.
.
t.eTime,
t.hours
FROM @logWithCount
CROSS APPLY
new BSWBigData.USQLApplier.CsvApplier() AS t(ultimateID string, siteID string, .... , eTime string, hours double, count long?);

我已经能够为应用程序的解耦部分编写单元 tests/ATPs。

如何为 Apply 方法的 C# 代码和依赖于 input/output 的自定义逻辑编写测试? 我如何使用定义的输入和输出自动测试 usql 脚本,以便不需要数据湖帐户?

VisualStudio 的 ADL 工具具有本地模式,因此您也可以在本地执行 UDO。虽然您可能无法在本地获得完整的并行处理,但您应该能够在本地测试您的代码 运行.

正如@Michael Rys 提到的,目前可以通过使用 U-SQL 本地 运行 来完成,但不一定在 Visual Studio.

中完成

我们正在尝试通过为您提供 "U-SQL Local Run SDK" 来解决此问题,您可以将其用作在本地 运行 脚本的一种方式。然后你可以使用它来测试 U-SQL 脚本,方法是编写一些 C# 单元测试包装器,然后 运行 在你的 CI system/build 服务器中进行这些单元测试。

我们正在通过 NuGet 发布此 SDK,但如果您对此感兴趣,可以给我发电子邮件至 xiaoyzhu at Microsoft dot com,我们可以将我们正在尝试发布的部分发送给您。

谢谢

Xiaoyong Zhu 来自 Azure Data Lake 团队

在我们发布独立的 U-SQL Local运行 SDK 包之前,请从您安装 ADLA Tool for VS 的位置获取所需的文件。

在 VS2015 中,本地 运行 所需的所有依赖项都在“C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake DRI Tools for Visual Studio 2015.0.XXXX.0\LocalRunSDK。您还需要“C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake DRI Tools for Visual Studio 2015.0.XXXX。 0\CppSDK”

只需从这两个文件夹中复制文件并将它们放在如下位置:

C:\USQLLocalRunSDK

然后您可以使用 "LocalRunHelper.exe" 编译和 运行 您的本地 u-sql 脚本。在编译命令行上,您需要两个选项: -DataRoot "Where your local metadata and data are stored",与 ADLA 工具中的设置选项相同。 -CppSDK "Where you copied the CppSDK files" 该工具将 return -1 错误(编译或 运行)和 0 成功。

只需 运行 该工具即可查看命令行选项列表。