有没有办法从 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
的前面加上定义,可能会重复您不需要的参数的值。
我在 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
的前面加上定义,可能会重复您不需要的参数的值。