2017-03-06 78 views

回答

0

偉大的問題!我會很高興看到瑞斯先生迴應了什麼。

道歉,但這只是一半的答案。

我的第一個想法是使用您的鍵值對ADL表進行分區。但是,如果潛在的WHERE子句不是確定性的,我不知道如何處理單獨的輸出。也許CROSS JOIN在每一個結果和....通過!

用一些動態代碼有一個WHILE循環會很好!

看看MS論壇上討論動態輸入數據集的帖子。就像一個供參考。

https://social.msdn.microsoft.com/Forums/en-US/aa475035-2d57-49b8-bdff-9cccc9c8b48f/usql-loading-a-dynamic-set-of-files?forum=AzureDataLake

+0

正是!使用遊標或while/for循環這是一件容易的事情,但沒有迭代它是不可用的許多情況..... – peterko

+0

我不會去說無法使用。 USQL是一種聲明性語言,允許您以靈活/可擴展的方式大規模平行工作負載。迭代數據很慢,如果你需要這樣做,你可能會使用錯誤的工具....這不是Oracle遊標! :-) –

+0

你是對的,我會說我的情況下無法使用:) – peterko

7

這是我們top ask(和以前已經asked on stackoverflow太:)。我們目前正在研究它,並希望在夏季之前提供。

直到那時你必須編寫一個腳本生成器。我傾向於用U-SQL來生成腳本,但你可以使用PowerShell或T4等

這裏做的是一個例子:

讓我們假設你想下表中寫入文件列name /行集@x

name | value1 | value2 
-----+--------+------- 
A | 10  | 20 
A | 11  | 21 
B | 10  | 30 
B | 100 | 200 

你會寫一個腳本來生成類似下面的腳本:

@x = SELECT * FROM (VALUES("A", 10, 20), ("A", 11, 21), ("B", 10, 30), ("B", 100, 200)) AS T(name, value1, value2); 

// Generate the script to do partitioned output based on name column: 

@stmts = 
    SELECT "OUTPUT (SELECT value1, value2 FROM @x WHERE name == \""+name+"\") TO \"/output/"+name+".csv\" USING Outputters.Csv();" AS output 
    FROM (SELECT DISTINCT name FROM @x) AS x; 

OUTPUT @stmts TO "/output/genscript.usql" 
USING Outputters.Text(delimiter:' ', quoting:false); 

然後你的TA可以預先計算@x並提交它以獲取分割成兩個文件的數據。

+0

請提供「/output/genscript.usql」文件的腳本。 – Arron

+0

嗨阿龍,我不確定你希望我提供什麼。上面的腳本生成genscript.usql內容。 –

+0

@x數據集如何傳遞給外部genscript.usql文件?執行它的最佳方法是什麼?數據工廠? – coltonfranco

相關問題