私はSSIS 2014を使用しています。Attunity Oracle ソース コンポーネントから数十万の行があり、そのソース クエリには 20 の列があり、時間がかかります。何らかの理由で、最初のテーブルを参照する別のテーブルに同じクエリの 2 つの列を挿入する必要があります。
別の DataFlowTask でクエリの 2 回目の呼び出しを避けたいので、 OleDB Destination が終了WAIT till x_01 finishes
したときに検証するスクリプト コンポーネント タスクを作成して、2 番目のテーブルに挿入することを考えていました。x_01
私がここで達成したいことを親切に理解してください:
x_01_Finished
Package Scope 変数を使用し、PostExecute イベントが から発生したときにその値を変更することを考えていましx_01
たが、残念ながら PostExecute は OleDB x_01
Destination レベルでは使用できません。
質問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 番目のテーブルに挿入する前に最初の行だけを読み込んでいる間、数ミリ秒スリープすることです。これが役立つかどうかを確認します。