J'ai un fichier CSV avec 11 colonnes et une table MySQL avec 9 colonnes.
Le fichier CSV ressemble à:
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11
et la table MySQL ressemble à:
col1, col2, col3, col4, col5, col6, col7, col8, col9
Je dois mapper les colonnes 1-8 du fichier CSV directement sur les 8 premières colonnes de la table MySQL. Je dois ensuite ignorer les deux colonnes suivantes du fichier CSV, puis mapper la colonne 11 du fichier CSV à la colonne 9 de la table MySQL.
Pour le moment, j'utilise la commande SQL suivante:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
Mais le code ci-dessus mappe les 9 premières colonnes du fichier CSV sur les 9 colonnes du tableau MySQL.
Vous pouvez également supprimer une valeur saisie de l'assigner à une variable utilisateur et ne pas affecter la variable à une table colonne:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
step1.deal avec awk.
cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt
step2.load dans mysql.
load data local infile 'new_file' into table t1(...)
la méthode ci-dessous est simple, mais pas autorisée dans la version inférieure de mysql.
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
@ deemi :
La seule façon d'ignorer le @dummy
consiste à définir le champ Par défaut sur AUTO INCREMENT
. Vous pouvez donc ignorer le champ et le code correspondant,
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column2, column3, column4, column5);
// suppose que le nom de champ column1
est défini sur AUTO INCREMENT
par défaut.
Je pense qu'il y a encore un changement dans le code:
La commande SQL suivante:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
-Effectuera probablement une erreur de troncature des données.
Il est donc préférable d'utiliser LINES TERMINATED BY '\r\n'
au lieu de LINES TERMINATED BY '\n'
SO le code sera:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\r\n'