2017-02-14 3 views
1

SSISのソースからターゲットへテーブルをロードする必要があります。表には約150万行が含まれています。ハッシュバイトを使用してSSISのソーステーブルと一致しないレコードを削除する方法

これまでのところ、ID列で一致しなかった宛先レコードに新しいレコードを挿入できましたが、一致した行は更新しましたが、一致しなかった行はHASHBYTESという値に更新されました。

これは私がやったことです:ID列に基づいて行をリダイレクトするために参照変換を使用してデータベース

  • に接続するために、OLEDBソースを使用して

    1. IDがhashbutesが 先テーブルと一致するかどうかを確認するために別の参照変換を用いてtblEmployeesDestination
    2. に行を挿入し、次に一致するいけない場合、「RefreshDate」欄
    3. を取得するDerivedColumnを使用。
    4. hashbytesが一致しない場合、OLEDBコマンドを使用して、 の行tblEmployeesDestination内の行を更新します。

    私の質問は、マッチソーステーブルをdidntの宛先表のこれらの行を削除するための最良の方法何でしょう、ですか?

    これにはどのような変換が必要ですか?

    enter image description here

    enter image description here

  • 答えて

    0

    まあ、それはあなたのテーブルサイズ(1,5M - 小型でも大でもない)に依存し、削除されたレコードの数。

    • 削除されたレコードの数はかなり少なくなります(IMHOが10000未満です)。次に、示したようにDataFlow変換でOLEDBコマンドを使用します。ここで問題となるのは、各行が個別のSQLコマンドを生成するため、遅くて長時間実行されるということです。
    • 削除する行の数が少なくない。専用テーブルで削除する行のpkeyを格納してから、SQL DELETEコマンドを使用してメインテーブルから削除することができます。
    • アプローチのレビュー。単一のt-SQL MERGEコマンドでほとんどすべての操作を実行できます - pkeyに一致しない行を挿入し、pkeyに一致する行を削除し、ハッシュバイトに一致しない行を削除します。利点 - MERGEは単一のトランザクションで実行されますが、それに精通している必要があり、optimize table indexesが必要です。
    +0

    #Ferdipux 私は現在、t-SQL MERGEコマンドを使用しています。ソーステーブルと宛先テーブルは別々のサーバーにあります。 UPSERTとDELETEの場合、約15分(長いと思うか分かりません)分がかかります。SSISはそのようなもののために設計されているため、パフォーマンスを向上させるために使用すると思います – Oleg

    +0

    @Oleg、私はあなたのポイントを見ています。 SQLからSSISサーバーにルックアップをオフロードできますが、削除はSQLに依存しています。 MERGEが方法でない場合は、2番目の推奨に従うことをお勧めします。専用の表で削除するすべての行を保存してから、削除コマンド実行計画を確認してください。 – Ferdipux

    関連する問題