大量のデータを表にアップロードするためにSQL * Loaderスクリプトを作成しています。繰り返しレコードをスキップする方法は?
スクリプトは次のように動作します。 FTPサーバーに接続し、ディレクトリをミラーリングして生成された新しいファイルをすべて取得し、すべてのCSVファイルを取得して1つに保存してからアップロードしますこの大きなCSVファイル内のデータ
基本的に、私は、SQL * Loaderでも、レコードへの最初のテーブルにすでに存在する場合は、レコードを挿入しようとしないで方法を探しています。
事がある、テーブルを10万件のレコードを保持します、とするとき、彼らはいけない、時には、これらのファイルは、不当にいくつかのレコードが繰り返されることを意味しますこれは、ダウンロードします。
私は、必要な2つのフィールドに一意のキーを配置しました。
スクリプトが挿入しようとする行の数に最大エラーを変更しようとしましたが、これを実行して制約違反エラーを返すことに気付きました。本当に大きなログファイルです。 (これらのいずれかを同時に繰り返しではなく、両方できるように、2つのフィールド上)
方法は、条件を配置するために、SQL * Loader制御ファイル内で、ありますか?
あなたはこのプロセスをスピードアップするのに役立つと思いますか?
ボーナス質問:それはより良いです、私はSQL * Loaderのにそれぞれ1を送信するために、のは、10個のCSVファイルを言わせているか、それらの10からのデータを含む単一のファイルを作成する場合は?それはすでにテーブルに存在する場合は、レコードを挿入するからSQL Loaderを防ぐため
同じCSVファイルを複数回取得する場合、または異なるCSVファイルで重複する可能性のあるデータで問題があるかどうかを明確にしてください。 – Gnudiff
@Gnudiff私はそれを反映するように編集しました。最終的にCSVファイルが繰り返されても構いません。スクリプトがテーブルに既に存在する行を無視したいからです。 –
Allright。私は、問題がCSVの行を重複しているとの考えに基づいて回答を書いています(sort&uniqが役立つでしょう)が、実際のSQLテーブルと照合する必要がある場合はSQL内で行う必要があります。 – Gnudiff