Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 31 May 2017 16:12

Rémi F
Juste Inscrit !
Date d'inscription: 18 Nov 2016
Messages: 6

PostgreSQL : import et traitement d'un "gros" CSV

Bonjour à tous,

Je cherche à traiter un fichier CSV assez costaud (4.22 Go, 24 millions d'observations).
Il s'agit des logements sur la France entière, mon objectif étant de réaliser des comptes de certaines variables au code commune (puis, par la suite, les joindre à ma table contenant la geom des communes).

Mais je bloque sur la méthodologie à employer sur ce volume de données.

Pour le moment, j'essaie d'importer le fichier sur PostgreSQL via ogr2ogr pour ensuite y réaliser les traitements (ogr2ogr --config PG_USE_COPY YES -append -f "PostgreSQL" PG:"host=x user=x dbname=x password=x" fichier.csv -nln schéma.table_import)

Mais l'import s'annonce très long, environ 45 minutes/1 heure pour 1 million d'observations.

Est-ce possible d'optimiser cet import ? ou bien connaîtriez-vous d'autres moyens pour ce type de traitement ?

Merci, bonne journée !

Hors ligne

 

#2 Wed 31 May 2017 16:15

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: PostgreSQL : import et traitement d'un "gros" CSV

Bonjour,

Le plus rapide pour un CSV est d'utiliser la commande SQL COPY. (https://www.postgresql.org/docs/9.6/sta … -copy.html)

Pour 24M de lignes, ca devrait aller assez vite (heures tout au plus je dirais, suivant votre serveur).

Nicolas

Hors ligne

 

#3 Wed 31 May 2017 22:50

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: PostgreSQL : import et traitement d'un "gros" CSV

Bonsoir,

Personnellement, je charge un fichier de 3M de ligne rapidement avec l'ETL FME. Il est librement testable pendant 1 mois si vous voulez essayer.

Loïc


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#4 Thu 01 June 2017 10:44

Rémi F
Juste Inscrit !
Date d'inscription: 18 Nov 2016
Messages: 6

Re: PostgreSQL : import et traitement d'un "gros" CSV

Merci pour ces aiguillages !

Je viens d'envoyer une demande d'évaluation pour FME. J'ai entendu parler de Kettle aussi mais peu de retours dessus, vous avez testé ?

Pour la commande COPY, je spécifie bien PG_USE_COPY YES dans la requête OGR, est-ce différent ?
J'ai lancé une requête \COPY sur la console PSQL, je vais voir ce que ça donne, ça tourne
(la commande COPY me donne un message d'erreur lorsque je l'exécute sur l'éditeur SQL : "n'a pas pu ouvrir le fichier « c:\Data\fichier.csv » pour une lecture : Aucun fichier ou dossier de ce type" ; ça doit être dû à une histoire de droit et au fait que la base soit sur un serveur distant)

Hors ligne

 

#5 Thu 01 June 2017 11:10

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1233
Site web

Re: PostgreSQL : import et traitement d'un "gros" CSV

Bonjour et bienvenue,

Pouvez vous afficher la commande copy que vous testez ?


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#6 Thu 01 June 2017 11:17

Rémi F
Juste Inscrit !
Date d'inscription: 18 Nov 2016
Messages: 6

Re: PostgreSQL : import et traitement d'un "gros" CSV

Bonjour et merci,

Oui la voici :
COPY schema.table(c1, c2, c3, ...) FROM 'c:\Data\fichier.csv' DELIMITER ';' CSV HEADER

La même commande avec \COPY sur PSQL fonctionne (j'ai testé sur quelques lignes), ça tourne en ce moment même pour les 24 millions, d'ailleurs est-ce qu'il y aurait un moyen de connaître l'avancement de la requête ?

Hors ligne

 

#7 Thu 01 June 2017 11:18

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: PostgreSQL : import et traitement d'un "gros" CSV

Bonjour,

FME pour charger un CSV, voila de la grosse artillerie !
Ca n'ira pas plus vite qu'un COPY, je pense (qui doit etre utilisé en interne par FME).

Oui attention ! COPY ne marche que pour les fichiers physiquement présents sur le serveur !
Sinon c'est effectivement \COPY avec psql qu'il faut utiliser.

Nicolas

Hors ligne

 

#8 Thu 01 June 2017 11:41

Rémi F
Juste Inscrit !
Date d'inscription: 18 Nov 2016
Messages: 6

Re: PostgreSQL : import et traitement d'un "gros" CSV

Aha je vois, FME pourra me servir pour d'autres traitements spatiaux par la suite, je connais encore assez mal
Ok merci pour ces infos, le \COPY tourne, patience maintenant

Hors ligne

 

#9 Thu 01 June 2017 11:46

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: PostgreSQL : import et traitement d'un "gros" CSV

Oui FME, c'est la rolls des ETL !
A peu pres tous les formats SIG gérés, même les plus exotiques, et des tonnes de fonctions de traitement spatial, le tout en mode graphique.

Perso, je trouve que GDAL/OGR arrive à faire a peu près pareil et les scripts tournent de la meme facon sous windows ou linux/mac.

Non, je ne pense pas que ce soit possible de connaitre l'avancement de COPY: il lit le fichier et le charge directement dans la table, ne regardant pas combien de lignes sont présentes dans le fichier.

Nicolas

Hors ligne

 

#10 Thu 01 June 2017 11:47

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: PostgreSQL : import et traitement d'un "gros" CSV

Au fait: si vous avez la possibilité de copier le csv zippé sur le serveur, et de lancer un COPY depuis le serveur, ca ira plus vite que de le faire par le réseau (sauf si vous etes sur un réseau interne très rapide).

Nico

Hors ligne

 

#11 Thu 01 June 2017 14:21

Rémi F
Juste Inscrit !
Date d'inscription: 18 Nov 2016
Messages: 6

Re: PostgreSQL : import et traitement d'un "gros" CSV

Ok merci pour les infos !
J'ai importé le csv zippé sur le serveur, ensuite le COPY peut fonctionner directement sur le zip ou bien je dois dézipper sur le serveur distant ?

Dernière modification par Rémi F (Thu 01 June 2017 14:21)

Hors ligne

 

#12 Thu 01 June 2017 14:37

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: PostgreSQL : import et traitement d'un "gros" CSV

Il faut le deziper avant.

Hors ligne

 

#13 Thu 01 June 2017 14:43

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: PostgreSQL : import et traitement d'un "gros" CSV

Hello @Nicolas,

Oui FME, c'est peut être un peu disproportionné pour charger un CSV mais cela permettrait également de faire des transformations avant intégration.

Et comme tu le souligne, ça ne fait pas que ça smile

Loïc


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#14 Thu 01 June 2017 15:15

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: PostgreSQL : import et traitement d'un "gros" CSV

Bonjour,

Au niveau de la méthode pas de soucis, en revanche en mode "production" je prendrais la précaution de couper le fichier en n fichiers plus petits (une commande split sous linux par exemple).
Certes cela demande un peu d'attention (savoir quel fichier a été intégré), mais cela permet d'avancer plus sereinement et de ne pas attendre 1h ou plus pour savoir si ça marche.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#15 Mon 31 July 2017 15:58

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: PostgreSQL : import et traitement d'un "gros" CSV

J'ajouterais que Talend sait très bien importer et traiter de très gros volumes de données en vue d'un import dans une base pg.


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

Pied de page des forums

Powered by FluxBB