0

私はSSIS 2014を使用しています。Attunity Oracle ソース コンポーネントから数十万の行があり、そのソース クエリには 20 の列があり、時間がかかります。何らかの理由で、最初のテーブルを参照する別のテーブルに同じクエリの 2 つの列を挿入する必要があります。

別の DataFlowTask でクエリの 2 回目の呼び出しを避けたいので、 OleDB Destination が終了WAIT till x_01 finishesしたときに検証するスクリプト コンポーネント タスクを作成して、2 番目のテーブルに挿入することを考えていました。x_01

私がここで達成したいことを親切に理解してください:ここ

x_01_FinishedPackage Scope 変数を使用し、PostExecute イベントが から発生したときにその値を変更することを考えていましx_01たが、残念ながら PostExecute は OleDB x_01Destination レベルでは使用できません。

質問1:

スクリプト コンポーネント コード内で、他のコンポーネントのステータスを取得する方法はありますか?

次のようなもの:

public override void PreExecute() {
    base.PreExecute();
    int sec = 5; //number of seconds to check the status of x_01 Component
    int ms  = sec * 1000;
    bool lbo_x01_Finished = false;
    do {
        System.Threading.Thread.Sleep(ms);
        lbo_x01_Finished = IsComponent_Finished("x01"); //returns true when x01 component finished
    } while(!lbo_x01_Finished);
}

質問2:

この手法を使用すると、パッケージのパフォーマンスが大きく影響を受けると思いますか?

更新 1

すでにNick.McDermaidの提案を非常に少量のデータで試しました。最初の列に PK を持つ 2 つの一時テーブルと、最初のテーブルのこの PK への FK を持つ 2 番目のテーブルを作成しました。この少量のデータでも、このエラーが発生The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tmp_1_tmp_2".しました。次のスクリーンショットで、挿入が実際に非常に高速であることがわかります。データの 2 番目のチャンクではx_02、最初のデータの前にオブジェクトを挿入することを意図していました (そして、それは不可能でした) 。この FK により) .

したがって、私の次のアイデアは、2 番目のテーブルに挿入する前に最初の行だけを読み込んでいる間、数ミリ秒スリープすることです。これが役立つかどうかを確認します。

スクリーンショット

4

0 に答える 0