2012-01-10 15 views
4

ローカルインスタンスからSQL Azureに大きなSQLテーブルをプッシュする必要があります。転送は簡単でクリーンなアップロードです。新しい空のテーブルにデータをプッシュするだけです。resumeを使用したSSISデータのインポート

テーブルは非常に大きく(1億〜1億行まで)、GUIDや他の単純なタイプ(タイムスタンプなどなし)のみで構成されています。

SSMSのデータインポート/エクスポートウィザードを使用してSSISパッケージを作成します。パッケージは素晴らしい作品です。

問題は、パッケージが低速または断続的な接続で実行されている場合です。インターネット接続が途中でダウンした場合、転送を「再開」する方法はありません。

このデータを再開可能な方法でアップロードするには、SSISパッケージを設計するのに最適な方法はありますか?すなわち接続失敗の場合、またはジョブが特定の時間ウィンドウの間だけに実行されるようにすることができる。

答えて

4

通常、そのような状況では、サイズN(1k行、10M行、何でも)のバッチを列挙し、最後に成功したバッチが送信されたものを処理テーブルに記録するようにパッケージを設計します。ただし、GUIDを使用すると、それらをバケットに分割することはできません。

この場合、ソース - >ルックアップ - >宛先のようにデータフローを変更します。ルックアップの変換では、Azure側を照会し、キーを取得するだけです(SELECT myGuid FROM myTable)。ここでは、送信待ちのレコードセットと一致するものがない行だけに注目します。

Azure側に完全にデータが格納されていると仮定した場合、完全なキャッシュは約1.5GB(100M * 16bytes)のメモリを消費します。そのコストは、すべてのデータを切り捨てて再転送するよりも少なくても、私がそれを呼び出したことを確認したいだけです。

+0

ありがとうございました。私はこれを試してみる。 – TheNextman

3

アップロード時にGUIDで注文するだけです。そして、Azureからmax(guid)を使用して、障害からの復旧または再起動時の出発点として使用することを確認してください。

関連する問題