LOAD DATA LOCAL INFILE insert que certaines colonnes

cs_ericsandrine Messages postés 14 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 16 juillet 2009 - 16 juil. 2009 à 09:43
useralacon Messages postés 1 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 5 août 2009 - 5 août 2009 à 17:23
bonjour

j'ai un fichier csv avec 10 colonnes et ma table n'a que 3 colonnes

peut on faire un LOAD DATA LOCAL INFILE en ne récupérant que certaines du fichier csv ?

je voudrais mettre :

la colonne 1 de mon fichier csv dans la colonne 3 de ma table
la colonne 5 de mon fichier csv dans la colonne 2 de ma table
la colonne 6 de mon fichier csv dans la colonne 1 de ma table

ma table ne contiend que 3 colonnes

si on ne peut pas le faire directement, comment le faire ,

merci

1 réponse

useralacon Messages postés 1 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 5 août 2009
5 août 2009 à 17:23
Il existe une option à placer en toute fin de commande load qui permet de préciser l'ordre de chargement des colonnes dans la table en sortie.

exemple pour reprendre ton cas:
load data local infile "nom_de_ton_fichier" into table nom_de_ta_table (col3_de_ta_table,col2_de_ta_table,col1_de_ta_table);

Le problème c'est que dans ton cas cela ne marchera pas car ce sont les colonnes 1,5,6 de ton fichier qui t'interressent et non pas les colonnes 1,2,3.
dans l'absolu il faudrait faire un truc du genre (col3_de_ta_table,,,,col2_de_ta_table,col1_de_ta_table). Hors l'option ne permet pas de shunter une colonne du fichier entrée par une virgule par exemple.
Il est donc impératif que toutes les colonnes qui t'interressent soient en début de ligne même si l'ordre entre-elles n'importe pas.

À noter que si le fichier entrée contient plus de colonnes que la table en sortie ce n'est pas grave. Tu as droit à un warning au chargement, sans plus.

Alors comment faire dans ton cas ?
2 possibilités:
- Primo. Sous éditeur (genre VI par exemple), faire disparaitre les colonnes 2,3,4 de chaque ligne de ton fichier en entrée puis lancer la commande load avec l'option comme mentionnée dans l'exemple plus haut.
- Secondo. regénerer ton fichier entrée par une commande select col6_name,col5_name,col1_name into outfile "nom_de_ton_fichier" from table nom_de_ta_table_en_entrée; puis lancer une commande load normalle.
0
Rejoignez-nous