2011-03-03 8 views
3

次のコマンドを使用しています。MySQL LOAD DATAコマンドでロードされているデータをフィルタリングします。

LOAD DATA INFILE 'source.txt' 
INTO TABLE tblData 
CHARACTER SET utf8 
FIELDS TERMINATED BY '\t'; 

これはうまくいきますが、私が取得するsource.txtファイルは、私が必要とする行が10%しかない800MBファイルです。ロード前にテキストファイルのフィルタリングを行うことはできません。 1つの特定の列の値に基づいて結果をフィルタリングできます。ロード・ステートメントでこの条件を指定して、必要な行だけをロードできる方法はありますか。

答えて

1

いいえ、少なくともLOAD DATA INFILEではありません。

あなたはしかし、あなたのファイルを解析するスクリプトを作成し、唯一のあなたは、あなたのスクリプトが一時ファイルを作成する必要があり、一時ファイルには、LOAD DATA INFILEを呼び出し、その後、フィルタリングすることができ、あなたの基準

1

に一致するレコードを挿入することができます一時的なファイルを最終的な宛先に追加します。お使いのシステムは、一時ファイルがメモリにとどまることを確認するように設定されている場合は

CREATE TEMPORARY FILE temp LIKE tblData; 
LOAD DATA INFILE 'source.txt' 
    INTO TABLE temp 
    CHARACTER SET utf8 
    FIELDS TERMINATED BY '\t'; 
INSERT INTO tblData (field1, field2) 
    (SELECT field1, field2 FROM temp WHERE some condition); 

することは、あなたはまだ良いパフォーマンスを得る必要があります。

関連する問題