現在、大規模なデータ移行の演習に SSIS 2012 を使用しています。
完了するタスクがありますが、最善のアプローチがわかりません。
テーブル A には 210 万のレコードがあります。
各行を繰り返す必要があります。
ステップ 1. テキスト操作を行う複雑なサブクエリの結果で特定のフィールドを更新する
ステップ 2. TableA 行
2a の電子メール フィールドから電子メール アドレスを取得します。ユーザーテーブル
2b を検索します。電子メールが存在する場合は、ID を取得し、TableA 行
2c の UserId を更新します。メールが存在しない場合 - 新しいレコードを User テーブルに挿入し、ID を取得して TableA 行の UserId を更新します
ステップ 1 と 2 は同時に実行する必要はありません。これらのタスクは無関係であるため、別々のデータ フローに分割できます。
これはすべてカーソルを使用して記述できます。非常に簡単ですが、一般的なルールとして、カーソルを使用することは嫌われています。
新しい MERGE 関数を使用して、上記のステップ 1 の純粋な SQL スクリプトを作成しました。それが使用するサブクエリはビューを呼び出し、ビューはスケーラー関数を使用して複雑なテキスト操作を行います。これが SSIS 経由で 1 時間 12 分実行された後、tembDB.log がディスク領域を使い果たしたため、SSIS が爆発しました。
私のクエリが tembDB が制御不能になった原因なのか、それとも以前に実行された SSIS パッケージの何かが原因なのかわかりませんか? どうすればわかりますか?
上記のステップ 1 と 2 の両方を達成するための SSIS 内の最適なツールに関するヒントはありますか?