11列のCSVファイルと9列のMySQLテーブルがあります。
CSVファイルは次のようになります。
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11
mySQLテーブルは次のようになります。
col1, col2, col3, col4, col5, col6, col7, col8, col9
CSVファイルの列1〜8をMySQLテーブルの最初の8列に直接マップする必要があります。次に、CSVファイルの次の2列をスキップして、CSVファイルの列11をMySQLテーブルの列9にマップする必要があります。
現時点では、次のSQLコマンドを使用しています。
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
ただし、上記のコードは、CSVファイルの最初の9列をMySQLテーブルの9列にマップします。
入力値をユーザー変数に割り当て、変数をテーブル列に割り当てないことで、入力値を破棄することもできます。
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
step1.dew with awk。
cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt
step2.load to mysql。
load data local infile 'new_file' into table t1(...)
以下の方法は単純ですが、mysqlの下位バージョンでは許可されていません。
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
@ deemi :
@dummy
を無視する唯一の方法は、フィールドのデフォルトをAUTO INCREMENT
に設定することです。そのため、フィールドをスキップして、次のようにコーディングするだけです。
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column2, column3, column4, column5);
//フィールド名column1
がデフォルトでAUTO INCREMENT
に設定されていると仮定します。
コードにもう1つの変更があると思います。
次のSQLコマンド:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
-データの切り捨てエラーが発生する可能性があります。
したがって、LINES TERMINATED BY '\r\n'
の代わりにLINES TERMINATED BY '\n'
を使用することをお勧めします
したがって、コードは次のようになります。
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\r\n'