有没有办法从 C# 程序传递 U-SQL 脚本参数?

Is there any way to pass a U-SQL script a parameter from a C# program?

我在 Azure Data Lake Analytics 中使用 U-SQL 和 table。有什么方法可以将 C# 程序中生成的分区键列表传递给 U-SQL 脚本,然后让脚本 return 这些分区中的所有元素?

您要 运行 开发箱上的 C# 代码并将值传递给 U-SQL 脚本还是 运行 您的 U-SQL 脚本中的 C# 代码?你的描述不清楚。根据你的问题标题,我会回答你的第一个问题。

从 C# 程序将值作为参数传递:ADLA SDK(与 Azure 数据工厂不同)尚未为 U-SQL 脚本提供参数模型(请在 http://aka.ms/adlfeedback 提交请求,尽管我知道它已经在我们的积压工作中,有外部客户需求有助于确定优先级)。

但是,通过在脚本开头添加如下 DECLARE 语句并让脚本将它们作为变量引用,可以很容易地添加参数值。

DECLARE @param = new SqlArray<int>( 1, 2, 3, 4); // 1,2,3,4 were calculated in your C# code (I assume you have int partition keys).

那么你应该能够在谓词中使用数组(例如,@param.Contains(partition_col))。不过,这不会(但是,我们有一个工作项)触发分区消除。

如果要消除分区,则必须有一组固定的参数值并在 IN 子句中使用它们。例如,您想要检查最多 3 个月,您可以将查询谓词写为:

WHERE partition_col IN (@p1, @p2, @p3);

并且您在 @p1, @p2@p3 的前面加上定义,可能会重复您不需要的参数的值。