1

我們正在構建一個快速應用程序/快速解決方案,這需要將每月CSV文件從本地存儲(即)文件加載到Azure blob/SQL表中。有4個文件,每個文件有50000行,月份名稱被貼在文件名中。從本地將定期CSV文件加載到Azure數據庫中

什麼是將這些文件轉移到blob或存儲的最有名的方法,同時確保我們以某種方式能夠從文件中檢索月份名稱,忽略內部文件夾上的舊文件並僅加載新文件。

過去,我們可以使用SSIS輕鬆地支持此行爲,但我正在尋找基於雲的解決方案,如Data Factory。

我已經試過內部部署天青斑點,但我不能夠避免被轉移舊文件和我可以檢索文件名(雖然我可能使用插入/修改的日期)。

有什麼建議嗎?想法?

感謝,

+1

數據工廠幾乎可以肯定是做到這一點的工具。它具有日期和時間函數,例如[here](https://docs.microsoft.com/zh-cn/azure/data-factory/data-factory-functions-variables)以提供幫助。 – wBob

回答

1

你可以使用任何上傳存儲的斑點或Azure的數據存儲湖(使用ADF可能策劃)和保存文件名結構。

那麼你可以使用Azure的數據湖Analytics(分析)和U-SQL使用EXTRACTOUTPUT語句,你用所謂的文件集語法兩個支點文件/文件夾名稱到行集中和使用煮文件轉換成CSV文件一個謂詞來限制要處理的文件的範圍。該U-SQL作業可以再次通過ADF進行編排和參數化。然後最後使用ADF將生成的文件移動到SQL Azure,或者如果您使用SQL DW,則可以在生成的CSV上使用Polybase。

下面是一個類似U-SQL腳本的一個簡單的例子:

DECLARE EXTERNAL @begin_date = DateTime.Parse("2017-06-01"); 
DECLARE EXTERNAL @end_date = DateTime.Parse("2017-06-08"); 

@data = EXTRACT col1 int, col2 string, date DateTime 
     FROM "/path/file_{date:yyyy}_{date:MM}_{date:dd}.csv" 
     USING Extractors.Csv(); 

@data = SELECT * FROM @data WHERE date BETWEEN @begin_date AND @end_date; 

OUTPUT @data TO "/output/cookeddata.csv" USING Outputters.Csv(); 
+0

有沒有一步一步的指導來實現這一目標? –

+0

以上幾乎是一步一步概括:)。您可以在Azure Data Lake,ADF和SQL Datawarehouse文檔頁面上找到白皮書和演示,這些頁面可以向您顯示上面概述的各個步驟。我會將一個端到端的體驗描述放到我的文檔積壓處。 –

+0

謝謝。我認爲我現在明白瞭解決方案的原則,並可能在本週工作。儘管如此,我還不清楚如何通過ADF協調和參數化U-SQL作業? ADF中的哪些地方可以與USQL作業連接? –

2

我幾個星期前,有同樣的需求,我決定去使用Azure的功能和本機Azure的SQL解決方案BULK功能。

只要將文件複製到Blob存儲區(https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob),就可以觸發Azure功能。您可以訪問所有文件屬性,因此也可以訪問文件名。

Azure的函數將只是調用SQL Azure中的程序,經過檢測的CSV文件名,以便它可以批量導入到你選擇的表格,提供一切必要的屬性一起。

的完整代碼樣本和詳細說明可以在這裏找到:

https://github.com/yorek/AzureFunctionUploadToSQL