2011-02-09 12 views
1

大きな(500 MB)* .csvファイルをMySQLデータベースにインポートしようとしています。LOAD DATA INFILE(* .csv) - 空のセルを無視する

私はその限りだ:

LOAD DATA INFILE '<file>' 
    REPLACE 
    INTO TABLE <table-name> 
    FIELDS 
     TERMINATED BY ';' 
     OPTIONALLY ENCLOSED BY '"' 
    IGNORE 1 LINES (#Header 
     <column-name1>, 
     <column-name2>, 
     ... 
    ); 

私は(それのデータ型はintです)colunsのいずれかに問題を持っている - 私は、エラーメッセージを取得:

エラーコードを:1366不正確な整数値:行の列の '' '

この行を* .csvファイルで見ました。エラーの原因となるセルには空白だけがあります(このように:... ;; ...)。

この列の空白を無視するようにSQLに指示するにはどうすればよいですか?

* .csvファイルが非常に大きいので、後で大きなファイルをインポートする必要があるため、* .csvファイルの編集は避けてください。私はSQLソリューションを探しています。

ありがとうございました!

[EDIT] ソリューションです:

LOAD DATA INFILE '<file>' 
    REPLACE 
    INTO TABLE <table-name> 
    FIELDS 
     TERMINATED BY ';' 
     OPTIONALLY ENCLOSED BY '"' 
    IGNORE 1 LINES (#Header 
     <column-name1>, 
     <column-name2>, 
     @var1 #the variable that causes the problem 
     ... 
    ) 
    SET <column-name-of-problematic-column> = CASE 
     WHEN @var1 = ' ' THEN NULL 
     ELSE @var1 
    END 
; 

答えて

3

はそうのようなSETの列を追加します:

LOAD DATA INFILE 'file.txt' 
    INTO TABLE t1 
    (column1, @var1) 
    SET column2 = @var1/100; 

あなたは「スペースを扱う表現で/ 100の@ VAR1を交換する必要があります'に変換し、-Infinityまたは0または42に変換してください...確信していません。

+0

ありがとうございます! それは働いた!私はマニュアルのこの部分を見ましたが、私はちょうどあなたの説明でそれを得ることができました – speendo