我使用U-SQL和Azure Data Lake Analytics中的表格。有没有办法将C#程序中生成的分区键列表传递给U-SQL脚本,然后让脚本返回这些分区中的所有元素?
答案 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
添加了前缀,可能会复制您不需要的参数的值。