同じデータ フロー タスクに 5 つの独立したデータ フローがあり、それぞれにソースと宛先があります。それらを順次実行するにはどうすればよいですか。それらは並行して実行されているようです。さまざまなデータ フロー タスクで行う場合があります。しかし、単一のデータフロータスクでそれを行うにはどうすればよいですか
2 に答える
同じタスクに独立したデータ フローを持たないでください。インポート/エクスポート ウィザードがそれを行うことは知っていますが、Microsoft のチームが何かを行ったからといって、それがベスト プラクティスになるとは限りません。データ フローは、「無料」の並列化によってその能力とパフォーマンスを発揮します。それを望まない場合は、将来のコードを保守する人のために、4 つの追加のデータ フローを作成し、それらにコピー アンド ペーストしてください。これを行ってもまったく害はありません。
上記の質問に実際に答えるには、何らかの依存関係を導入する必要があります。恐ろしいアイデアのパンテオンでは、次のものが一番上にあります。
その中に複数の独立したフローを含むデータ フローは、OLE DB 宛先へのソース (問題ではない) のように見えると思います。ソース クエリを変更するか、その後に派生列を追加して、int 型 (DT_I4) の列を作成し、一意の名前HackedSortKey
を付けて値 1 を割り当てます。
それらの 1 つを除くすべての既存の OLE DB 宛先を削除します。代わりに、OLE DB コマンドに置き換えてください。OLE DB コマンドを使用する価値は、行が通過できることです。名前が示すように、OLE DB Destination はデータのシンクにすぎません。それからの唯一の出力列はエラー列です。INSERT
それぞれについてクエリを記述します。これは Command オブジェクトの設計上の問題ですが、データベースでシングルトン操作を実行するため、実行時の問題も発生します。「ああ、挿入する行があります。コマンドを発行するまでしばらくお待ちください。ああ、挿入する行があります。しばらくお待ちください。」すべての行がこの処理を受けます。
最初の Source to Command オブジェクトを取得します。完全にブロックするコンポーネントをそれに接続します。ソートを使用します。HackedSortKey 列で並べ替え、重複を削除し、他の列を通過させないようにします。これのポイントは、待機を強制することです。すべてのデータが上記の OLE DB コマンドを通過した場合にのみ、Sort は下流の行を解放します (すべての行が表示されるまで、並べ替えが何であるかがわからないため)。個別の値を選択すると、元の行が A 行に減ります。
ストリーム A で渋滞が発生し、ストリーム B に遭遇します。ストリーム B は、「ソース B」->「ソート B」->「マージ結合 AB」->「OLE DB コマンド B」->「HackedSourceKey でソート」のようになります。Merge Join には並べ替えられた入力が必要なため、「並べ替え B」が必要です。偽の一致列で同じ値が使用されているため、一致します。ただし、INNER ではなく LEFT OUTER JOIN の一致であることを確認する必要があります。
泡立て、すすぎ、残りのデータ フローについてこのプロセスを繰り返します。しかし実際には、さまざまなデータ フローを使用し、優先順位の制約で実行を管理する必要があります。
Success 制約の代わりに Completion 制約を使用して、データ フローを順番に文字列化します。そうすれば、それぞれが他の成功または失敗とは独立して実行されますが、一度に 1 つずつ実行されます。
制約の値を設定するには、あるタスクから別のタスクへの線をダブルクリックし、値を Success から Completion に変更します。