17

SSIS パッケージの制御フローの目的を完全には理解していません。私が作成したすべてのパッケージで、フローを制御するデータ フロー コンポーネントを追加するだけで、残りのロジックはデータ フロー内に配置されます。

より複雑な制御フローの例 (例: Excel ファイルの行を反復する foreach ループ コンテナー) を見てきましたが、データ フローにも実装できない例を探しています。データ フロー内で Excel ファイルへの接続を簡単に作成できます。

制御フローにロジックを実装する必要がある (または実装する必要がある) 場合と、データ フローを使用してすべてを実行する場合の理解を深めようとしています。

制御フローの調査を開始するきっかけとなったのは、SSIS データ フローをリファクタリングし、並行開発をサポートしやすくするために、パッケージをより小さなパッケージに分割することです。

これらの目的で制御フローをどのように使用できるかについて、頭を悩ませようとしています。

4

4 に答える 4

23

データ フローは、ソースから宛先へのデータの流れを定義します。1 つのデータ フロー タスクから開始して、次のタスクに移ることはありません。選択したエンティティ (ソース、変換、宛先) 間のデータ フロー。

さらに、データ フロー タスク内では、反復やコンポーネントの実行などのタスクを実行できません。

制御フローは、多くの場合特定の順序で実行されるタスクのワークフローを定義します (優先順位の制約が含まれていると仮定します)。ループの例は制御フロー要件の良い例ですが、スタンドアロンの SQL スクリプトを実行したり、COM インターフェイスを呼び出したり、.NET コンポーネントを実行したり、電子メールを送信したりすることもできます。制御フロー タスク自体は、実際にはデータベースやファイルとはまったく関係がない場合があります。

制御フロー タスク自体は、データに対して何もしていません。それ自体がどこかのデータに作用する可能性がある(または作用しない可能性がある)ものを実行しています。データ フロー タスクは、データで何かを行っています。それはその動きと変換を定義します。

制御フロー ロジックとデータ フロー ロジックを実行する唯一の方法であるため、いつ実行するかは明らかです。あなたの例では、foreach コンテナーを引用し、データ フローでスプレッドシートに接続できると述べています。確かに、1 つのスプレッドシートの場合はそうですが、フォルダー内の複数のスプレッドシートの場合はどうすればよいでしょうか? データ フロー ロジックでは、絶対にできません。

お役に立てれば。

于 2010-12-15T17:22:41.853 に答える
14

データ フロー - あるソースから別のソースにデータを移動するためのものです。

制御フロー - データ フロー コンポーネントをいつ、どのように実行するかのロジックを提供します。また、制御フローは、ループの実行、ストアド プロシージャの呼び出し、ファイルの移動、エラー処理の管理、条件のチェックと結果に応じたさまざまなタスク (データ フローを含む) の呼び出し、キューブの処理、別のプロセスのトリガーなどを行うことができます。

ある場所から別の場所にデータを移動し、それが毎回同じで、他の条件に基づいていない場合、データフロー タスクだけでパッケージを回避できますが、ほとんどの場合、パッケージはそれよりも複雑です。

于 2010-12-15T17:42:33.763 に答える
3

私たちは多くのことに制御フローを使用します。まず、データ インポートに関するすべてのデータがテーブルに格納されます。そのため、procs を実行してデータフローを開始および終了し、ログが正しく機能するようにします。一連のファイルをループし、ファイルをアーカイブの場所に移動し、日付を付けて名前を変更し、処理場所から削除します。ファイルの移動を行い、ファイルが正しい列とサイズであることを検証する別のプログラムがあります。データフローに入る前に、proc を実行して、ファイルが検証されていることを確認します。ファイルが処理されたときに電子メールを送信したり、処理できなかったレコードのレポートを送信したりする必要がある場合があります。これらの電子メールは制御フローに入れられます。場合によっては、ストアド プロシージャを使用してより簡単に実行できるクリーンアップ手順がいくつかあるため、その手順を制御フローに入れます。

于 2010-12-15T18:21:34.373 に答える