2017-02-10 3 views
-1

私は3,000万以上の行を持つテーブルを持っており、切り詰めとリロードを行うには時間がかかります。 SSISを使用してインクリメンタルロードを行うことはできますが、レコードが更新されているデルタロードを取得するのは苦労しています。テーブルには日付フィールドがないため、データが最後に変更されたときをチェックする方法はありません。デルタロード - 更新を識別するためのETLプロセス

誰かが似たような状況に遭遇したかどうか、どうやってそれを解決したのか不思議です。私はこのテーブルだけで3時間かかるので、テーブル全体をロードする必要はありません!

+0

CDC、テーブルなどのトリガーを許可しない会社:( – abs786123

答えて

0

一致する出力では、受信した行が一致する主キーを持つ行と異なるかどうかを確認する別の検索を実行します。異なる場合は、アップデートを行います。同じ場合は何もしないでください。

行が同じかどうかを確認する方法は2つあります。

1)すべての列のハッシュ値を作成する新しい受信行に派生列を追加します。次に、ローカルのtable..comに同じハッシュカラムを作成し、検索でハッシュを作成します。

2)ルックアップでは、すべてのフィールドを結合します。 A - > A、B - > B、C - > C、など。その後、不一致をリダイレクトして更新を行う。これは、BLOB列がある場合は不可能です。

おそらく、数値1は効率的ですが、セットアップが難しくなります。

+0

こんにちは、ハンク、このプロセスは、ソースから宛先に一致するすべての行を比較するため、しばらく時間がかかることがありますこれは長い時間がかかりません。したがって、3千万の行が存在するすべての行を通過するので、切り捨てられて読み込まれる時間と同じ時間がかかるでしょうか?それとも間違っていますか?昨日や昨日のように、日付がないので、ウィンドウを縮小する方法はありません – abs786123

+0

ええ、あなたは正しいです...切り詰めて、詰め替えはもっと速くなります...しかし、あなたのソースデータ、 30日分のデータしか保持していない場合は、過去30日間の履歴データを保持するために、ある種のインクリメンタル/アップサート方​​法を使用する必要があります。 – Hank

+0

あなたのテーブルの数値やアルファベット順で作成されたフィールドはどれですか?おそらくプライマリキーですか?または、非ユニークな分割キー、バッチキー、パーティションキーでもかまいませんか? – Hank

関連する問題