2017-03-06 65 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

相關問題