2017-04-18 15 views
1

次のプロセスをスピードアップする方法を探しています。Excelファイルから毎週SQL Serverにデータを読み込むSSISパッケージがあります。
ブランド、日付、値の3つのフィールドがあります。私はブランド+日付、および新しい組み合わせの既存の組み合わせをチェックし、データフローで
、直接テーブルに移動し、既存のものは、更新のためのRecordSet先に行く:

DataFlow1SSIS RecordSetからの1つずつの更新の代替方法

次ステップは、既存の組み合わせの値を更新することです:

DataFlow2

あなたが見ることができるように、そこに更新するために何千ものレコードがあり、それは時間がかかりすぎます。レコードの数は週ごとに増加する傾向があります。提案してください。

+1

MERGE演算子を使用してデータのマージを実行することができます。一致するとマージが更新されます。そうでない場合は、新しいレコードが挿入されます。しかし、これには、マージする前に2つのデータセットをソートする必要があり、SORTにも時間がかかります。 パフォーマンスをチェックしてみることができます。 –

答えて

2

ELT (Extract Load Transform)アプローチを使用してストアドプロシージャ内で実行するのが最速の方法です。

  1. すべてのデータをそのままテーブルにロードします(理論上はステージングテーブルへのロードと呼ばれます)。データ検証手順には関係していないようですので、この表は最終的な宛先表の列のレプリカになる可能性があります。
  2. Execute SQLタスクを使用してストアドプロシージャを呼び出すことです。この手順では、すべてのビジネスロジックを記述できます。これはSQLサーバーエンティティでネイティブのデータ操作を実行するので、最も高速な方法です。
  3. 最後の部分として、ステージングテーブルからすべてのエントリを削除してください。

ステージングテーブルでインデックスを使用すると、SPパートをさらに高速化できます。

+1

したがって、RSに行くすべてのデータをプルしますか? RS宛先を別のOLEDB宛先とSTGテーブルに置き換えます。そして、SPを介してアップデートをしてください。私はこれを試して、あなたに知らせるつもりです。ありがとう! – KathyBlue

関連する問題