我需要處理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