2012-01-10 146 views
4

我需要將大型SQL表從本地實例推送到SQL Azure。傳輸是一個簡單的'乾淨'上傳 - 只需將數據推送到一個新的空表格中。帶恢復的SSIS數據導入

該表格非常大(約1億行),並且只包含GUID和其他簡單類型(不包括時間戳或任何內容)。

我使用SSMS中的數據導入/導出嚮導創建SSIS包。這個軟件包很好用。

問題在於程序包運行時緩慢或間歇性連接。如果互聯網連接中途中斷,那麼無法「恢復」轉移。

什麼是最好的方法來設計一個SSIS包以可恢復的方式上傳這些數據?即在連接失敗的情況下,或者只允許作業在特定的時間窗口之間運行。

回答

4

通常情況下,在這種情況下,我會設計程序包來枚舉大小爲N(1k行,10M行,無論什麼)的批次並記錄到最後一次成功傳輸批次的處理表。但是,對於GUID,您無法將它們分成桶。

在這種特殊情況下,我會修改您的數據流,使其看起來像Source - > Lookup - > Destination。在查找轉換中,查詢Azure端並只檢索鍵(SELECT myGuid FROM myTable)。在這裏,我們只對那些在查找記錄集中沒有匹配的行感興趣,因爲那些是待傳輸的行。

假設Azure端完全填充以及相關的數據傳輸成本,則完整高速緩存將花費大約1.5GB(100M * 16bytes)的內存。這筆費用將小於截斷並重新傳輸所有數據,但只是想確保我將其發佈出去。

+0

謝謝。我會試試這個。 – TheNextman 2012-01-11 15:33:49

3

上傳時只需通過您的GUID進行訂購。並且確保在從故障或重新啓動時恢復時,使用Azure的max(guid)作爲您的起點。