2017-03-06 105 views
0

我需要处理Azure Data Lake中的数据。 我的流程如下:Azure数据湖中的U-SQL游标

  1. 我想从数据库列表中选择下一个处理的ID。我已经完成了。
  2. 我需要通过ID来迭代(从第一步骤),我需要依次数据导出到分隔的文件(由ID分区)

的问题是下列statemanet

U- SQL的过程不提供任何命令式的代码流结构,例如for或while循环。

任何想法如何用类似于光标的方式处理数据?

我没有在U-SQL中找到关于游标的任何文档。

谢谢!

+0

这是一样的你的另一个问题。我重复USQL不是为了迭代。 –

+0

不一样,这个问题涉及到游标或循环和类似的情况(我的其他问题与文件分区有关)。这是我分解问题的原因,因为我想知道迭代方法是否可行,而在另一个问题中,我想知道如何通过键值对文件进行分区。 – peterko

回答

0

由于上面提到的语句,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之一)。在此之前,您必须编写一个脚本来生成脚本(我将在您的其他问题上提供一个示例)。

+0

谢谢Michael。您能否描述一下您声明式加入的含义? 你有任何例子或教程吗? – peterko

+0

已更新上面。请注意,这对'OUTPUT'不起作用,但用于一般处理。 –

0

如果您确实需要迭代行为,则需要从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/

+0

谢谢保罗。我通过运行u-sql的Powershell工作流程中的循环部分解决了这个问题。现在我尝试你的建议。非常感谢! – peterko

相关问题