0

私はETL処理の初心者です。ETL を介してデータ マートに入力しようとしていますが、問題が発生しました。4 つの ETL タスク (マート内の特定のテーブルを埋める各タスク) があり、問題は、外部キー制約などの制約違反を回避するために、特定の順序でそれらを実行する必要があることです。どうすればこれを達成できますか?どんな助けでも本当に感謝しています。

これは私の現在の ETL のスナップです。 これは私の現在のETLのスナップです

4

1 に答える 1

1

制御フローに入力するテーブルごとに個別のデータ フロー タスクを作成し、それらを実行するために必要な順序でそれらを接続するだけです。現在のデータ フローからコンポーネントをコピー/貼り付けするだけでよいはずです。あなたが作成する新しいものに。

制御フロー内のタスク間の接続は Precendence Constraints と呼ばれ、いずれかをダブルクリックすると、ETL パッケージのフローを制御する方法に関する多数のオプションが表示されることがわかります。ただし、今のところは、デフォルトのままで問題ないでしょう。これは、各データ フロー タスクが前のタスクが正常に終了するまで待機することを意味します。1 つが失敗すると、次のものが開始されず、パッケージは失敗します。

いくつかのテーブルを並行してロードしたいが、後でいくつかのテーブルをそれらのすべてが完了するまで待機させる場合は、シーケンス コンテナーを追加し、並行してロードする必要があるものをそこに入れることをお勧めします。次に、シーケンス コンテナーから次のデータ フロー タスクに接続します。または、あるシーケンス コンテナーから別のシーケンス コンテナーに接続することもできます。たとえば、すべての Dimension 読み込みプロセスを保持する 1 つのシーケンス コンテナーと、すべての Fact 読み込みプロセスを保持する別のシーケンス コンテナーが必要になる場合があります。

一般的なパターンは、個別のデータ フロー タスクを使用するよりもさらに一歩進んでいます。データを入力するテーブルごとに個別のパッケージを作成する場合は、親パッケージを作成し、パッケージ実行タスクを使用して、各子パッケージを正しい順序で呼び出すことができます。これは再利用性に優れており、必要に応じて単一のテーブルに手動で簡単に入力できます。単一のテーブルをテストしたいときに、いくつかのタスクを無効にしたり、ロード全体を再実行したりする必要がないため、テスト中も非常に便利です。このパターンを早い段階で採用することをお勧めします。そうすれば、後でやり直す必要がなくなります。

于 2016-11-02T11:03:40.520 に答える