2017-10-23 14 views
0

大量のデータを表にアップロードするためにSQL * Loaderスクリプトを作成しています。繰り返しレコードをスキップする方法は?

スクリプトは次のように動作します。 FTPサーバーに接続し、ディレクトリをミラーリングして生成された新しいファイルをすべて取得し、すべてのCSVファイルを取得して1つに保存してからアップロードしますこの大きなCSVファイル内のデータ

基本的に、私は、SQL * Loaderでも、レコードへの最初のテーブルにすでに存在する場合は、レコードを挿入しようとしないで方法を探しています。

事がある、テーブルを10万件のレコードを保持します、とするとき、彼らはいけない、時には、これらのファイルは、不当にいくつかのレコードが繰り返されることを意味しますこれは、ダウンロードします。

私は、必要な2つのフィールドに一意のキーを配置しました。

スクリプトが挿入しようとする行の数に最大エラーを変更しようとしましたが、これを実行して制約違反エラーを返すことに気付きました。本当に大きなログファイルです。 (これらのいずれかを同時に繰り返しではなく、両方できるように、2つのフィールド上)

方法は、条件を配置するために、SQL * Loader制御ファイル内で、ありますか?

あなたはこのプロセスをスピードアップするのに役立つと思いますか?

ボーナス質問:それはより良いです、私はSQL * Loaderのにそれぞれ1を送信するために、のは、10個のCSVファイルを言わせているか、それらの10からのデータを含む単一のファイルを作成する場合は?それはすでにテーブルに存在する場合は、レコードを挿入するからSQL Loaderを防ぐため

+0

同じCSVファイルを複数回取得する場合、または異なるCSVファイルで重複する可能性のあるデータで問題があるかどうかを明確にしてください。 – Gnudiff

+0

@Gnudiff私はそれを反映するように編集しました。最終的にCSVファイルが繰り返されても構いません。スクリプトがテーブルに既に存在する行を無視したいからです。 –

+0

Allright。私は、問題がCSVの行を重複しているとの考えに基づいて回答を書いています(sort&uniqが役立つでしょう)が、実際のSQLテーブルと照合する必要がある場合はSQL内で行う必要があります。 – Gnudiff

答えて

2

はsolllodolllo答え1として、輸入の一時テーブルにレコードが、その後

DELETE FROM temptable WHERE id IN (SELECT id FROM yourtable)? 

は、その後、あなたはyourtableにTEMPTABLE挿入することができます。

これはもちろん、行とその他の行との違いによって異なります。可能であれば、その質問にそれを示すのが良いでしょう。

+0

ありがとう、このアプローチは私が必要とするように動作します。 –

0

、あなたはそれがあなたの必要な条件を満たしている場合を除き、SQLローダーがレコードをスキップするだろう条件文を使用することができます。たとえば:

LOAD DATA 
INFILE 'YourData.dat' 
BADFILE 'YourBadData.bad' 
APPEND INTO TABLE YourTable 
WHEN (Condition 1 = TRUE) AND (Condition 2 = FALSE) 
{ 
... 

初期ロードプロセスをスピードアップするために、あなたは永久テーブルに個別のすべての行を挿入するために、SELECT文を使用し、その後、一時テーブルにすべてのレコードを挿入することができます。

INSERT INTO YourTable 
SELECT DISTINCT [fields] 
FROM tempYourTable 
+0

このスクリプトでは、同じ操作で取り込んだCSVファイル内でレコードが繰り返される可能性はほとんどありません(ほとんど不可能です)。事はそれらのレコードのいくつかがすでにテーブルに保存されることです。これらのレコードをスキップするにはSQL * Loaderが必要です。そして、私が正しく読んでいるのであれば、あなたのクエリは単にtempテーブル(すべて私の場合)で繰り返されていないすべての値を返します。 –

+0

その場合は、tempテーブルから既存のレコードをすべて削除した後、挿入を実行する別のステップを追加することができます。ステップは次のようになります。1.レコードを一時テーブルに挿入します。 2.永続テーブルにレコードが存在する場合は、一時テーブルから削除します。 3.一時テーブルから固定テーブルに挿入します。 – solllodolllo

関連する問題