IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

probleme avec import


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut probleme avec import
    Bonjour,

    je débute en mysql et j'ai besoin d'aide pour une requête. Je viens juste de commencer à apprendre aujourd'hui et je sais à peine faire un select correctement, mais j'ai besoin d'aide sur un problème précis : j'ai besoin de charger des données dans une table 'tbl' depuis un fichier, aussi rapidement que possible.

    Voilà comment j'ai créé ma table (les noms ou types sont peu importants et changeront sûrement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE TABLE `tbl`(
    `unknown1` VARCHAR(255) NULL,
    `string1` VARCHAR(255) ,
    `string2` VARCHAR(255) ,
    `date1` DATETIME,
    `string3` CHAR(10) NULL,
    `integer1` INTEGER NULL,
    `integer2` INTEGER NULL,
    `integer3` INTEGER NULL,
    `integer4` INTEGER NULL,
    `string4` VARCHAR(255) NULL,
    `string5` VARCHAR(50) NULL,
    `string6` VARCHAR(100) NULL,
    `unknown2` VARCHAR(400) NULL,
    `date2` DATETIME,
    `unknown3` VARCHAR(400) NULL,
    `unknown4` VARCHAR(400) NULL,
    `unknown5` VARCHAR(400) NULL,
    `integer4` INTEGER NULL,
    `integer4` INTEGER NULL,
    `unknown6` INTEGER NULL,
    `string7` VARCHAR(400) NULL)
    Voilà un exemple de ligne que je dois récupérer.
    |USA|25/11/2010|FO|8|50|214|0|EXD|PFBF|Florida||08/05/1980||||0|1||Executive
    J'ai cherché un peu sur google et j'ai trouvé que ce que je dois utiliser est probablement LOAD DATA INFILE.
    Voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LOAD DATA INFILE 'donnees.txt' INTO TABLE tbl
    FIELDS TERMINATED BY '|'
    LINES TERMINATED BY '\n';
    Est-ce bon ? Puis-je le rendre meilleur/plus rapide ? (j'ai lu qu'il y a des options pour améliorer la rapidité telles que 'compress' ou 'local' ou 'lock', mais je ne suis pas sûr qu'elles sont adaptées à mon problème).
    La date ne sera probablement pas insérée correctement. Elle est au format JJ/MM/AAAA mais il faut AAAA/MM/JJ.
    Comment puis-je la convertir ?

    Est-il possible d'ignorer par exemple la 8eme colonne de chaque ligne (les champs unknown) pour éviter d'avoir à créer une table temporaire d'où je devrai ensuite extraire les données ?

    J'aimerais également changer le nom de ma table 'tbl' en quelque chose comme 'tbl_[date du jour]'. Comment faire pour créer un nom de table qui dépend de la date du jour ?

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Citation Envoyé par feifef Voir le message
    (...)
    J'ai cherché un peu sur google et j'ai trouvé que ce que je dois utiliser est probablement LOAD DATA INFILE.
    Est-ce bon ? Puis-je le rendre meilleur/plus rapide ? (j'ai lu qu'il y a des options pour améliorer la rapidité telles que 'compress' ou 'local' ou 'lock', mais je ne suis pas sûr qu'elles sont adaptées à mon problème).
    Le LOAD DATA est effectivement le plus efficace pour charger un fichier comme le tien. Oublie les options pour le moment.
    Citation Envoyé par feifef Voir le message
    La date ne sera probablement pas insérée correctement. Elle est au format JJ/MM/AAAA mais il faut AAAA/MM/JJ.
    Comment puis-je la convertir ?
    Il est impossible de la convertir lors du LOAD DATA. Du coup, il faudra probablement passer par une table temporaire...
    Citation Envoyé par feifef Voir le message
    Est-il possible d'ignorer par exemple la 8eme colonne de chaque ligne (les champs unknown) pour éviter d'avoir à créer une table temporaire d'où je devrai ensuite extraire les données ?
    non... sauf à passer par une table temporaire
    Citation Envoyé par feifef Voir le message
    J'aimerais également changer le nom de ma table 'tbl' en quelque chose comme 'tbl_[date du jour]'. Comment faire pour créer un nom de table qui dépend de la date du jour ?
    On ne fait pas comme ça. On charge toutes les données dans une seule table, en ajoutant par exemple une colonne "date de chargement".

    ... tout ça te fait trois bonnes raisons de passer par une table temporaire. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE TEMPORARY TABLE tmp_tbl (
    `unknown1` VARCHAR(255) NULL,
    `string1` VARCHAR(255) ,
    `string2` VARCHAR(255) ,
    `date1` VARCHAR(255),
    `string3` CHAR(10) NULL,
    `integer1` INTEGER NULL,
    `integer2` INTEGER NULL,
    `integer3` INTEGER NULL,
    `integer4` INTEGER NULL,
    `string4` VARCHAR(255) NULL,
    `string5` VARCHAR(50) NULL,
    `string6` VARCHAR(100) NULL,
    `unknown2` VARCHAR(400) NULL,
    `date2` DATETIME,
    `unknown3` VARCHAR(400) NULL,
    `unknown4` VARCHAR(400) NULL,
    `unknown5` VARCHAR(400) NULL,
    `integer4` INTEGER NULL,
    `integer4` INTEGER NULL,
    `unknown6` INTEGER NULL,
    `string7` VARCHAR(400) NULL) ;
    Cela te permet d'éliminer to les unknown de ta vraie table, où il serait également important de mettre des noms de colonnes plus explicites que "string1" et "date2" !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE tbl(
      DateChargement TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      Trucmuche VARCHAR(255) ,
      Pays VARCHAR(255) ,
      DateSaisie DATETIME,
      ...) ;
    Tu fais ton LOAD DATA dans tmp_tbl ; tu passes ensuite tes données dans tbl, en faisant les transformations nécessaires au passage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO tbl(Trucmuche, Pays, DateSaisie, ...)
    SELECT string1, string2, STR_TO_DATE(date1, '%d/%m/%Y'), ...
    FROM tmp_tbl
    NB : La date chargement se mettra automatiquement à la date du jour.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut
    J'ai cherché un peu de mon côté entre temps et de fait oui on peut ignorer des champs et oui on peut en convertir d'autres, je n'ai donc pas besoin de partir sur une table temporaire.
    Voici la solution pour ceux que ça intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CREATE TABLE tbl(
      unknown1 VARCHAR(255) NULL,
      string1 VARCHAR(255),
      date1 DATETIME,
      integer1 INTEGER NULL
    );
     
     
    |USA|25/11/2010|value to ignore|8
    |USA|26/11/2010|value to ignore|9
     
    LOAD DATA INFILE 'data.txt' INTO TABLE tbl
    FIELDS TERMINATED BY '|'
    LINES TERMINATED BY '\n'
    (@unknown1, string1, @date1, integer1)
    SET date1 = STR_TO_DATE(@date1, '%d/%m/%Y');

    Merci quand même pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec importer et exporter de données
    Par amine008 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 26/09/2010, 10h44
  2. [XL-2003] Probleme avec importation Excel-Access
    Par benaman2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2010, 20h33
  3. Probleme avec importation Excel-Access
    Par benaman2 dans le forum Général VBA
    Réponses: 2
    Dernier message: 08/01/2010, 18h10
  4. [Info] Probleme avec import
    Par Marc_3 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/03/2006, 18h59
  5. probleme d'import de fichier txt avec des tab
    Par lecureuil dans le forum Access
    Réponses: 4
    Dernier message: 23/08/2005, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo