web-dev-qa-db-fra.com

Comment sauter des colonnes dans un fichier CSV lors de l'importation dans une table MySQL avec LOAD DATA INFILE?

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.

50
Camsoft

De la documentation 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);
77
grapefrukt

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);
4
brzhang

@ 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.

0
Ataboy Josef

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'
0
Ataboy Josef