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

时间:2017-02-02 22:02:01

标签: azure azure-data-lake u-sql

我使用U-SQL和Azure Data Lake Analytics中的表格。有没有办法将C#程序中生成的分区键列表传递给U-SQL脚本,然后让脚本返回这些分区中的所有元素?

1 个答案:

答案 0 :(得分:2)

您是否希望在开发框中运行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添加了前缀,可能会复制您不需要的参数的值。