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

MS SQL Server Discussion :

Importation d'un fichier csv avec un nombre de colonnes variable


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Importation d'un fichier csv avec un nombre de colonnes variable
    Bonjour à tous.

    J'ai un question sur l'importation d'un fichier csv dans une bd ms-sql.

    J'ai un fichier csv qui comporte plus de 6 millions de lignes avec un format standard csv.

    EX:
    2012/01/01;00:00:04;2947.496316;749.500000;471.750000;19.437500
    2012/01/01;00:00:09;2962.496297;750.250000;471.750000;19.468750
    2012/01/01;00:00:14;2928.746339;751.750000;471.750000;19.281250
    2012/01/01;00:00:19;2928.746339;750.750000;471.750000;19.187500;20.444;134.666
    ...

    Comme vous pouvez voir, la 4e ligne comporte deux colonnes de plus et c'est ce qui m’occasionne des problèmes à importer les données dans une base sql.

    -Le fichier est beaucoup trop gros (¾ de 2.5Gb) pour ouvrir avec un logiciel (comme excel par exemple) pour ajouter les colonnes vide dans les premières lignes.

    -À partir de ms sql server 2008, si je fais une importation de fichier, ça fonctionne mais je n'ai pas les deux dernières colonnes.

    -Si je fais un Bulk Insert, sql server me retourne une erreur car le nombre de champ n'est pas valide.

    Je n'ai plus de solution et j'aimerais savoir si quelqu'un a une idée

    Merci beaucoup à l’avance.

  2. #2
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    la seule chose que je puisse te conseiller, c'est de redemander une extraction de fichier avec un bon format. Soit 2 colonnes en plus, soit les 2 chiffres en trop retirés.

    Je penche plus pour un problème du côté du fournisseur du fichier et, pour éviter d'avoir à refaire ta mécanique d'import, il vaux mieux que le fichier n'ai pas d'éléments aléatoires qui sortent du Dessin d'enregistrement.

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Plusieurs solutions s'ouvrent a toi :

    - creer une solution SSIS
    - ouvrir le fichier avec un editeur de text spécialisé ( notepad ++ ) et corriger le fichier a la main ( a voir suivant les contraintes fonctionnels )
    - redemander une extraction au fournisseur si tu as le temps

    A+
    MCSA SQL SERVER |MCT | MVP Data Platform

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Bonjour.

    Pour ce qui est du format de fichier du fournisseur, je suis limité à ce format du à un logiciel obligatoire et fermé à mon travail.

    Pour ce qui est d'ouvrir avec un éditeur texte, on oubli ça du à la grosseur du fichier. + de 6Gb avec + de 6.3M de ligne d'enregistrement.

    Merci!

  5. #5
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Via SSIS il y aurait un moyen.

    Avec une connexion de fichier à laquelle tu rajoutes 2 colonnes. Tu décoches la case "le nom des colonnes en entête de fichiers".
    Ceci te permettra de lire toutes les colonnes + 2, mais, tu auras ta première ligne qui comportera les données des noms de champs. C'est pas trop grave, tu pourras la delete, ou même faire un conditional split qui retire la ligne au chargement.

    Tu pourras ainsi lire et charger ton fichier.
    Si tu n'as pas la bonne structure au niveau de la table, tu pourras simplement ignorer ces 2 colonnes en trop lorsque tu feras tes correspondances de champs, si tu en as besoin, tu pourras faire de la concaténation via une derived column.



    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par wonderboutin123 Voir le message
    -À partir de ms sql server 2008, si je fais une importation de fichier, ça fonctionne mais je n'ai pas les deux dernières colonnes.
    Il me semble que vous n'aurez en effet pas les deux dernière colonnes, mais leur contenu sera inclus dans la dernière. C'est à dire que pour les lignes avec ces deux colonnes supplémentaires, vous aurez ceci dans la dernière colonne :

    19.187500;20.444;134.666
    Vous ne précisez pas trop le contexte, mais en fonction de celui-ci, vous pourriez prévoir d'importer votre fichier dans une table de staging, et d'insérer ensuite dans votre table finale, en parsant la dernière colonne.
    Ce n'est pas forcément la solution la plus propre, mais c'est une solution

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    J'ai essayé une Importation de fichier csv en ajoutant le bon nombre de colonnes mais dans les première ligne, tout les données sont décalé du au manque de données.


    Exemple de ma Bd Csv à Importer
    2012/01/01;00:00:04;2947.496316;749.500000;471.750000;19.437500
    2012/01/01;00:00:09;2962.496297;750.250000;471.750000;19.468750
    2012/01/01;00:00:14;2928.746339;751.750000;471.750000;19.281250
    2012/01/01;00:00:19;2928.746339;750.750000;471.750000;19.187500;20.444;134.666;111.23
    2012/01/01;00:00:24;2928.746339;750.750000;471.750000;19.187500;20.444;134.666;112.22
    ...

    Résultat de l'importation Sql
    2012/01/01 00:00:04 2947.496316 749.500000 471.750000 19.4375002012/01/01 00:00:09 2962.496297 750.250000
    2012/01/01 00:00:14 2928.746339 751.750000 471.750000 19.2812502012/01/01 00:00:19 2928.746339 750.750000
    2012/01/01 00:00:24 2928.746339 750.750000 471.750000 19.187500 20.444 134.666 112.22

    Puisqu'il manque des données dans les première ligne, les données de la 2e lignes sont inclus dans la 1er et ainsi de suite.


    Quelqu'un a d'autre solution ?

    Merci!

Discussions similaires

  1. [phpMyAdmin] import d'un fichier csv avec phpMyAdmin
    Par nabil123456 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 11/03/2015, 11h45
  2. [PostgreSQL] Importation d'un fichier .csv avec création de table
    Par dor_boucle dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/05/2013, 11h50
  3. Réponses: 2
    Dernier message: 15/02/2013, 19h25
  4. [Débutant] Importation de plusieurs fichiers .mat avec choix de la colonne
    Par Vincent32 dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/11/2012, 11h06
  5. SELECT avec un nombre de colonnes variable
    Par sorcer1 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 24/09/2007, 22h58

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