2010-07-11 3 views
1

Je charge un grand fichier texte d'élèves du secondaire dans MySQL, mais l'école elle-même n'est identifiée que dans la première ligne de chaque fichier texte. Comme si:chargement de grandes tables d'élèves, mais l'école seulement identifié en première ligne

897781234Metropolitan High     
340098 1001X 678 AS  Reading    101KAS DOE  KEITH A1 340089 A 7782... 

utilisant du code SQL, comment puis-je générer une colonne du numéro de l'école (par exemple, 897781234) dans la première colonne de la table de réception afin que l'école sera identifiée à chaque ligne?

Pour charger les fichiers texte, j'utilise:

LOAD DATA INFILE "f:/school_files/school897781234.txt" 
INTO TABLE my_table FIELDS TERMINATED BY '' 
IGNORE 1 LINES; 

Merci!

+0

Merci pour le montage! – dave

Répondre

0

Hmmm ... vous semblez le faire sous Windows. Je préfère Unix/Linux pour la manipulation de texte volumineux, mais vous devriez être capable d'utiliser des techniques similaires sous Windows (essayez d'installer Cygwin). PowerShell a également quelques capacités utiles, si vous êtes familier avec cela. Dans cet esprit, voici quelques idées pour vous:

  1. écrire un script qui munge vos fichiers de données pour les rendre MySQL convivial, en créant un nouveau fichier qui a le contenu de tous, mais la première ligne avec les informations sur l'école sont ajoutées à chaque ligne. Faites vos données à partir du fichier munged.

    (munge-schools.sh) 
    #!/bin/bash 
    ifile=$1 
    ofile=$2 
    school=$(head -1 ${ifile}) 
    tail --lines=+2 ${ifile} | sed "s/^/${school}/" > ${ofile} 
    
    ./munge-schools school897781234.txt school897781234.munged 
    
  2. Pour chaque école, faire la charge comme est (sauter la première ligne), mais le charger dans une table temporaire, puis ajoutez une colonne pour l'école en défaut à l'information scolaire. Copiez de la table temporaire dans votre table finale.

Étant donné le choix, je vais toujours aller avec faire la manipulation de texte en dehors de la base de données pour les fichiers d'entrée plus convivial - il y a beaucoup d'outils de manipulation de texte qui sera beaucoup plus rapide à reformater vos données que les outils de chargement en bloc de votre base de données.

+0

Merci pour votre réponse. Je pense que j'ai le concept. Au moins, je sais maintenant qu'il n'y a pas de script MySQL "caché" qui fait ce genre de chose. De manière intéressante (ou non), MySQL LOAD DATA INFILE autorise IGNORE mais pas LIMIT (c'est-à-dire, LIMIT 1 LINES). Merci encore! – dave

Questions connexes