2016-12-27 50 views
2

我有一個非常大的CSV,其中每行包含客戶和商店ID以及交易信息。當前的測試文件大約爲40 GB(大約2天),因此對於選擇查詢的任何合理返回時間來說,分區是絕對必要的。如何僅使用U-SQL和文件中的某些字段將大文件分區爲文件/目錄?

我的問題是這樣的:當我們收到一個文件時,它包含了多個商店的數據。我想使用「虛擬列」功能將該文件分離到各自的目錄結構中。該結構是「/Data/{CustomerId}/{StoreID}/file.csv」。

我還沒有得到它與OUTPUT語句一起工作。語句中使用是這樣的:

// Output to file 
OUTPUT @dt 
TO @"/Data/{CustomerNumber}/{StoreNumber}/PosData.csv" 
USING Outputters.Csv(); 

它提供了以下錯誤:

Bad request. Invalid pathname. Cosmos Path: adl://<obfuscated>.azuredatalakestore.net/Data/{0}/{1}/68cde242-60e3-4034-b3a2-1e14a5f7343d 

有沒有人試圖同樣的事情?我試圖連接字段的輸出路徑,但這是一個不行。我想過把它作爲一個函數(UDF)來完成的,該函數使用兩個ID並過濾整個數據集,但這看起來非常低效。

提前致謝閱讀/回覆!

回答

2

(這裏Azure的數據湖隊)

目前U型SQL需要一個腳本中的所有文件輸出必須在編譯時可以理解。換句話說,輸出文件不能根據輸入數據創建。

基於數據動態輸出的東西,我們正在積極地在2017年

工作發佈晚些時候在此期間,直到動態輸出功能可用,該模式來完成你想用兩個腳本

需要什麼

第一個腳本將使用GROUP BY來標識CustomerNumber和StoreNumber的所有唯一組合並將其寫入文件。

然後通過使用腳本或者使用我們的SDK編寫的工具,下載以前的輸出文件,然後以編程方式創建具有每對CUSTOMERNUMBER和StoreNumber

+0

完美的明確OUTPUT語句第二U-SQL腳本!非常感謝回覆! (我真的有點慌張,實際上聽到了團隊的聲音!) –

+0

要添加到Saveen的答案:功能請求在https://feedback.azure.com/forums/327234-data-lake/suggestions/10550388-support -dynamic-輸出文件名功能於ADLA。儘管該功能正在開發中,但請隨時添加您的投票。 –

相關問題