我需要处理Azure Data Lake中的数据。 我的流程如下:Azure数据湖中的U-SQL游标
- 我想从数据库列表中选择下一个处理的ID。我已经完成了。
- 我需要通过ID来迭代(从第一步骤),我需要依次数据导出到分隔的文件(由ID分区)
的问题是下列statemanet:
U- SQL的过程不提供任何命令式的代码流结构,例如for或while循环。
任何想法如何用类似于光标的方式处理数据?
我没有在U-SQL中找到关于游标的任何文档。
谢谢!
我需要处理Azure Data Lake中的数据。 我的流程如下:Azure数据湖中的U-SQL游标
的问题是下列statemanet:
U- SQL的过程不提供任何命令式的代码流结构,例如for或while循环。
任何想法如何用类似于光标的方式处理数据?
我没有在U-SQL中找到关于游标的任何文档。
谢谢!
由于上面提到的语句,U-SQL中没有游标。
U-SQL不提供任何命令性的代码流结构,因为它阻碍了优化器全局优化脚本的能力。
您应该考虑以声明方式处理您的问题。例如,如果您拥有一个ID列表(无论是在表格或SqlArray中,还是在文件中),请使用声明式连接。例如,要添加42到每一个值,其中关键是在现有键的列表:
// Two options for providing the "looping data"
// Option 1: Array Variable
DECLARE @keys_var = new SqlArray<string>{"k1", "k2", "k3"};
// Option 2: Rowset (eg from an EXTRACT from file, a table or other place)
@keys = SELECT * FROM (VALUES("k1"), ("k2"), ("k3")) AS T(key);
// This is the data you want to iterate over to add 42 to the value column for every matching key
@inputdata = SELECT * FROM (VALUES (1, "k1"), (2, "k1"), (3, "k2"), (6, "k5")) AS T(value, key);
//Option 1:
@res = SELECT value+42 AS newval, key FROM @inputdata WHERE @keys_var.Contains(key);
OUTPUT @res TO "/output/opt1.csv" USING Outputters.Csv();
//Option 2:
@res = SELECT value+42 AS newval, i.key
FROM @inputdata AS i INNER JOIN @keys AS k
ON i.key == k.key;
OUTPUT @res TO "/output/opt2.csv" USING Outputters.Csv();
现在你的情况,你想有数据驱动的输出文件集。此功能目前正在开发中(这是我们的top asks之一)。在此之前,您必须编写一个脚本来生成脚本(我将在您的其他问题上提供一个示例)。
谢谢Michael。您能否描述一下您声明式加入的含义? 你有任何例子或教程吗? – peterko
已更新上面。请注意,这对'OUTPUT'不起作用,但用于一般处理。 –
如果您确实需要迭代行为,则需要从PowerShell调用USQL。
例如:
ForEach ($Date in $Dates)
{
$USQLProcCall = '[dbo].[usp_OutputDailyAvgSpeed]("' + $Date + '");'
$JobName = 'Output daily avg dataset for ' + $Date
Write-Host $USQLProcCall
$job = Submit-AzureRmDataLakeAnalyticsJob `
-Name $JobName `
-AccountName $DLAnalyticsName `
–Script $USQLProcCall `
-DegreeOfParallelism $DLAnalyticsDoP
Write-Host "Job submitted for " $Date
}
来源:https://www.purplefrogsystems.com/paul/2017/05/recursive-u-sql-with-powershell-u-sql-looping/
谢谢保罗。我通过运行u-sql的Powershell工作流程中的循环部分解决了这个问题。现在我尝试你的建议。非常感谢! – peterko
这是一样的你的另一个问题。我重复USQL不是为了迭代。 –
不一样,这个问题涉及到游标或循环和类似的情况(我的其他问题与文件分区有关)。这是我分解问题的原因,因为我想知道迭代方法是否可行,而在另一个问题中,我想知道如何通过键值对文件进行分区。 – peterko