Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2120 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Exporter en csv une matrice stockée en base

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exporter en csv une matrice stockée en base

n°1949038
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 14:32:04  profilanswer
 

Bonjour,
J'ai une matrice stockée dans une table MySQL, dont la structure est composée de 3 champs : ligne, colonne, valeur. Cette table peut être très volumineuse (plusieurs millions de lignes). J'ai besoin d'exporter au format csv cette matrice mais pas en utilisant la façon "classique" de l'export proposé par MySQL (une ligne dans la table = une ligne dans le csv avec des ; entre chaque champ) mais en gardant uniquement le champ "valeur", la position de celui-ci dans le csv reflétant la valeur des 2 autres champs ligne et colonne.
Ex : ma table Matrice contient les lignes suivantes (2 lignes x 3 colonnes) :

Code :
  1. Ligne Colonne Valeur
  2. 0      0          1
  3. 0      1          2
  4. 0      2          3
  5. 1      0          4
  6. 1      1          5
  7. 1      2          6


 
Je voudrais en sortie, dans mon csv :

Code :
  1. 1;2;3\n
  2. 4;5;6\n


 
1ière idée : je concatène les valeurs d'une même ligne dans un seul champ avec le séparateur ;. Pb : comment je fait ça en SQL?
2ième idée : je génère autant de requête qu'il y a de lignes qui vont alimenter par ajout successif un csv.Pb : comment je fait ça en SQL?
autre idée?
 
Merci :)


Message édité par rufo le 10-12-2009 à 15:05:51

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 10-12-2009 à 14:32:04  profilanswer
 

n°1949056
rocodido
Posté le 10-12-2009 à 15:00:32  profilanswer
 

j'arrive pas à comprendre comment tu passes de ta matrice à ton csv  
 
mais, pour moi, l'export doit exporter les données calculées, donc tu devras surement passer par une table temporaire pour y construire tes données avant export

n°1949060
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 15:03:43  profilanswer
 

bon, j'ai trouvé, la bonne solution est :

Code :
  1. SELECT GROUP_CONCAT(Valeur ORDER BY Colonne SEPARATOR ';') FROM Matrice GROUP BY Ligne ORDER BY Ligne INTO OUTFILE 'c:/Matrice.csv' LINES TERMINATED BY '\n';


;)
 
Par contre, si le fichier existe déjà, la requête plante :( Une idée de comment forcer la création du fichier? Merci.


Message édité par rufo le 10-12-2009 à 15:08:48

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1949065
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 15:07:11  profilanswer
 

rocodido a écrit :

j'arrive pas à comprendre comment tu passes de ta matrice à ton csv  
 
mais, pour moi, l'export doit exporter les données calculées, donc tu devras surement passer par une table temporaire pour y construire tes données avant export


 
les 2 première colonnes dans ma table représentent la position de chaque Valeur dans la matrice (la ligne et la colonne, de 0 à n). C'est plus clair? Donc y'a rien à calculer.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1949069
rocodido
Posté le 10-12-2009 à 15:11:58  profilanswer
 

ok j'ai saisi :)

 

Manque une parenthèse dans ta requête.

 

Je connais mal la syntaxe mysql, mais si te requête plante , appelle la depuis un batch qui fera un delete du fichier avant de le créer et remplir

 


Je rajouterais aussi colonne dans ton order


Message édité par rocodido le 10-12-2009 à 15:16:07
n°1949092
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 15:36:35  profilanswer
 

je fais du php, donc c'est comme ça que j'ai résolu la suppression du fichier. Je pensais qu'il y avait une option pour forcer la création.
 
Par contre, j'ai un pb, cette syntaxe marche mais sur une matrice de 4610x3035, il me sort un fichier csv de 4610x119 :( Je me demande si y'a pas des variables de paramétrage limitant la taille du fichier en sortie ou la taille du buffer qui fait le group_concat ou autre... :/ mais j'ai pas trouvé pour l'instant...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1949102
fred777888​999
Posté le 10-12-2009 à 15:58:42  profilanswer
 

L'exemple meme d'une usina a gaz SQL qui se fait en 3mn chrono avec n'importe quel langage qui sait se connecter a une base mySQL.

n°1949110
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 16:07:45  profilanswer
 

ben en php, c'est pas 3 min chrono qu'il faut. Comme j'ai besoin d'avoir 2 fichiers csv (la matrice telle quelle et sa transposée). Assez bizarrement, la création du premier csv met plus de 2h (ça fait un fichier de 144 Mo) alors que le suivant met 20 mins (doit y avoir une histoire de cache qq part, mais ça ne vient pas de mon script). Comme j'ai besoin que ça soit cross-platform, en exe en C, c'est pas super pratique.
 
Là, je veux juste comprendre pourquoi group_concat tronque les données.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1949112
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 16:12:00  profilanswer
 

Bon, ça vient de la variable group_concat_max_len. Elle est positionnée à 1024. J'ai plus qu'à trouver comment enlever cette limitation et avoir une valeur illimitée (ou suffisamment grande).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1949127
rufo
Pas me confondre avec Lycos!
Posté le 10-12-2009 à 16:39:28  profilanswer
 

Bon, ben j'ai fini par trouver et arriver à ce que je veux grâce à ce site : http://www.mysqlperformanceblog.co [...] extension/

Citation :


The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet. The syntax to change the value of group_concat_max_len at runtime is as follows, where val is an unsigned integer:
 
SET [GLOBAL | SESSION] group_concat_max_len = val;
 
Current values in Our server
 
max_allowed_packet = 67107840
group_concat_max_len = 1024


 
J'ai mis group_concat_max_len à 1000000 et ça marche. Je passe de 2h à 3 mins pour mon premier csv et de 20 mins à 3 mins pour mon 2ième. Donc youpi, ça marche :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 10-12-2009 à 16:39:28  profilanswer
 

n°1949132
rocodido
Posté le 10-12-2009 à 17:06:24  profilanswer
 

\o/


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Exporter en csv une matrice stockée en base

 

Sujets relatifs
gerer une base de données access avec des codes barresBase SQLserver 2000 pleine (2GO)
Base de données sur ExcelCreation base de donnée gestion du stock
Configuration réseau et base de registresTraiter les absences de données dans une base
Type de donnée abtrait : MatriceDans le flux du libre, je suis à la recherche d'une base de données QR
Perte de connexion avec la base MySQLPb acces base de donnée
Plus de sujets relatifs à : Exporter en csv une matrice stockée en base


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR