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

Requêtes PostgreSQL Discussion :

Insérer un fichier CSV en modifiant certaines de ses données


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Insérer un fichier CSV en modifiant certaines de ses données
    Bonjour à tous.

    Je suis en train d'essayer d'importer un fichier CSV contenant nom, prenom et date_naissance comme champs.

    Problème: il y a certaines lignes pour lesquelles la date_naissance n'est pas indiqué. Ce champs prend alors la valeur 'XXXX'

    Du coup, en essayant d'importer le champ dans ma table PGSQL, le système renvoie une erreur car j'ai spécifié un INTEGER comme type de données pour cette colonne.

    Je n'ai pas envie de modifier le fichier CSV en entrée. Je souhaite que la requête s'en occupe. Connaîtriez-vous une méthode pour importer le fichier CSV tout en remplaçant les valeurs 'XXXX' par NULL dans ce champ?

    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Septembre 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 51
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Je ne suis pas un pro du sql, mais j'ai lu un truc à ce sujet en cherchant comment importer un fichier csv sur PGSQL... Ca ressemble à ça (si je dis une bêtise, que les confirmés en sql me corrigent svp) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY table FROM 'ton_chemin/ton_fichier.csv' WITH DELIMITER ',' CSV NULL AS NULL;
    J'espère que ça peut aider...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Salut.

    Je n'ai pas encore essayé ta proposition, mais est ce que tu ne voulais pas plutôt écrire: 'XXXX' AS NULL?

    Je ne suis pas un pro du SQL non plus (c'est peu dire). Je te remercie pour ta réponse.

  4. #4
    Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Septembre 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 51
    Points : 49
    Points
    49
    Par défaut
    Ah oui alors non, j'avais mal saisi du coup... Effectivement, la valeur requête dont je parlais semble assez spécifique aux valeurs NULL et ne semble pas pouvoir s'adapter à une valeur précise.

    Du coup je me demande (et là c'est à prendre avec des grosses pincettes) si un passage par une table temporaire n'est pas la solution la plus efficace. En gros, j'imagine une solution qui commencerais par cette méthode trouvée sur le net (qui présente l'avantage de pouvoir choisir les colonnes que l'on souhaite importer), et après de segmenter la donnée dans PGSQL, d'attribuer des types de données et (je pense) de remplacer certaines valeurs (via une condition WHERE). Mais sans certitude... Quelqu'un de plus doué aura certainement une meilleur solution à proposer !

    Pour ma part j'ai eu besoin de faire pareil à l'instant même et la solution qui a marché pour moi c'est de passer par un UPDATE. Voilà à quoi pourrait ressembler la requête :
    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
    DROP TABLE IF EXISTS matable_1; -- Ce n'est pas nécessaire
     
    CREATE TEMPORARY TABLE matable_1 (bigfield TEXT); -- On créée un table temporaire ne contenant qu'un seul champ de type text sans limite de caractères (en théorie)
     
    COPY matable_1 FROM 'monchemin\monfichier.csv' WITH DELIMITER '$'; -- On importe monfichier dans matable_1 avec un délimiteur volontairement non présent dans monfichier
     
    UPDATE matable_1 SET bigfield = replace(bigfield,'XXXXX',''); -- On remplace les 'XXXXX' par un vide, ce qui fera une valeur nulle dans la table finale
     
    DROP TABLE IF EXISTS matable_2;
    SELECT
    	split_part(bigfield, ';', 1) AS nom,
    	split_part(bigfield, ';', 2) AS prenom,
    	split_part(bigfield, ';', 3)::interger AS datenaiss -- On peut importer les dates comme entier
    INTO matable_2
    FROM matable_1;

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci. Je vais essayer ça dès que possible et je te fais un retour.

Discussions similaires

  1. Python-Création fichier CSV + création de courbes à partir des données
    Par Alex-python38 dans le forum Général Python
    Réponses: 1
    Dernier message: 28/08/2018, 10h14
  2. Importer/Insérer un fichier.csv
    Par Rani02 dans le forum Débuter
    Réponses: 11
    Dernier message: 05/01/2016, 11h01
  3. Insérer un fichier CSV dans un tableau PHP
    Par Denys06 dans le forum Langage
    Réponses: 5
    Dernier message: 07/10/2015, 10h21
  4. Importer un fichier CSV automatiquement dans une base de données
    Par nabil123456 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 19/05/2015, 11h23
  5. Réponses: 4
    Dernier message: 02/06/2010, 17h23

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