Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'utilise Pgsql 9.6
Actuellement, les exports sont fait en CSV avec "COPY (SELECT......) TO file", mais j'aimerai les faire en XML.
Le fichier CSV fait 5Mo (Zip750Ko) , contre 27Mo pour le Xml (Zip5,5Mo)
Je sais que le XML est très bavard (chaque valeur a une balise ouverte et fermée). En temps normal, je le simplifie en structurant un format qui ressemble un peu à du CSV. Une balise contient toutes les valeurs d'une ligne de CSV avec comme séparateur ";". Ex :
<Data>
<annee id="2018">
<Janvier> 0001_2018 ; 0101_2018 ; 0301_2018 </Janvier>
<Fevrier> 0002_2018 ; 0102_2018 ; 0302_2018 </Fevrier>
</annee>
<annee id="2019">
<Janvier> 0001_2019 ; 0101_2019 ; 0301_2019 </Janvier>
<Fevrier> 0002_2019 ; 0102_2019 ; 0302_2019 </Fevrier>
</annee>
</Data>
Dans Excel, pour retrouver le format type tableau, j'édite la requête :
Table.ReorderColumns(#"Type modifié2",{"Attribute:id", "Janvier.1", "Janvier.2", "Janvier.3", "Fevrier.1", "Fevrier.2", "Fevrier.3"})
ActiveWorkbook.Queries.Add Name:="annee (3)", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Xml.Tables(File.Contents(""\\Network\C\Temp\textXML3.xml""))," & Chr(13) & "" & Chr(10) & " Table0 = Source{0}[Table]," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Table0,{{""Janvier"", type text}, {""Fevrier"", type text}, {""Attribute:id"", Int64.Type}})," & Chr(13) & "" & Chr(10) & " #""Fractionner la colonne par délimiteur"" = Table.SplitColumn(#""Type modifié"",""Janvier"",Splitter.Sp" & _
"litTextByDelimiter("";""),{""Janvier.1"", ""Janvier.2"", ""Janvier.3""})," & Chr(13) & "" & Chr(10) & " #""Type modifié1"" = Table.TransformColumnTypes(#""Fractionner la colonne par délimiteur"",{{""Janvier.1"", type text}, {""Janvier.2"", type text}, {""Janvier.3"", type text}})," & Chr(13) & "" & Chr(10) & " #""Fractionner la colonne par délimiteur1"" = Table.SplitColumn(#""Type modifié1"",""Fevrier"",Splitter.Sp" & _
"litTextByDelimiter("";""),{""Fevrier.1"", ""Fevrier.2"", ""Fevrier.3""})," & Chr(13) & "" & Chr(10) & " #""Type modifié2"" = Table.TransformColumnTypes(#""Fractionner la colonne par délimiteur1"",{{""Fevrier.1"", type text}, {""Fevrier.2"", type text}, {""Fevrier.3"", type text}})," & Chr(13) & "" & Chr(10) & " #""Colonnes triées"" = Table.ReorderColumns(#""Type modifié2"",{""Attribute:id"", ""Janvier.1"", ""Janvie" & _
"r.2"", ""Janvier.3"", ""Fevrier.1"", ""Fevrier.2"", ""Fevrier.3""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Colonnes triées"""
Sheets.Add After:=ActiveSheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""annee (3)""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [annee (3)]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "annee__3"
.Refresh BackgroundQuery:=False
End With
Par contre, pour ce qui concerne l'export d'une requête vers un fichier XML, je coince et j'ai besoin d'une piste ou d'un exemple existant pour créer ma structure du fichier XML comme dans mon exemple. La bdd est générée par un logiciel externe et je ne peut pas modifier sa structure (table, schema,...).
Par contre, je peux créer des function, tables (pour le schema, je ne sais pas)
Est-ce qu'il déjà existe un moyen avec postgre, ça m'évitera de réinventer la roue, ou bien est-il possible de le faire avec une fonction perso ?
Merci de votre aide.
Hors ligne
Je me répond en partie à moi même pour la partie concaténation des valeurs sur une ligne.
J'ai essayé avec CONCAT(), mais le nombre d'arguments est limité à 100 (50 champs + 50 délimiteurs) alors qu'il me faut 98 champs et 97 délimiteurs.
Je suis donc passé par : Champ1 || '';'' || Champ2 || '';'' || Champ3
COPY( select query_to_xml(
'select Nom, date,
Champ1 || '';'' ||
Champ2 || '';'' ||
Champ3
AS Concat
from
public.Temp_Table4', false , false, '')
)
TO 'c:\temp\tempTestConcat.xml' CSV QUOTE AS ' '
C'est pas parfait, mais actuellement j'arrive à ce qui suit et j'aimerai fusionner les <annee id="2018"> ensemble et idem pour 2019 et et n'avoir qu'un <Row>
Si vous avez une idée, je dormirai moins bête ce soir.
<Row>
<annee id="2018">
<Janvier> 0101_2018 ; 0201_2018 ; 0301_2018 </Janvier>
</annee>
</Row>
<Row>
<annee id="2018">
<Fevrier> 0102_2018 ; 0202_2018 ; 0302_2018 </Fevrier>
</annee>
</Row>
<Row>
<annee id="2019">
<Janvier> 0101_2019 ; 0201_2019 ; 0301_2019 </Janvier>
</annee>
</Row>
<Row>
<annee id="2019">
<Fevrier> 0102_2019 ; 0202_2019 ; 0302_2019 </Fevrier>
</annee>
</Row>
Rien qu'avec ça, je passe le fichier XML de 27Mo à 5,7Mo contre 5,2Mo pour le CSV.
Dernière modification par oles67 (17/07/2019 14:39:35)
Hors ligne
Salut,
Si çà peut aider, existe un logiciel "Navicat" qui permet de se connecter sur plusieurs SGBD, tel que Oracle, PG, Mysql, ... et on peut exécuter des requêtes dedans, on peut également exporter les données sous plusieurs format : le xml y compris. Tu peux même paramétrer çà pour que çà se lance en tache planifiée, super le soft non
Hors ligne
Salut,
Si çà peut aider, existe un logiciel "Navicat" qui permet de se connecter sur plusieurs SGBD, tel que Oracle, PG, Mysql, ... et on peut exécuter des requêtes dedans, on peut également exporter les données sous plusieurs format : le xml y compris. Tu peux même paramétrer çà pour que çà se lance en tache planifiée, super le soft non
Merci mais j'ai une préférence pour le GNU.
Hors ligne
duple a écrit :Salut,
Si çà peut aider, existe un logiciel "Navicat" qui permet de se connecter sur plusieurs SGBD, tel que Oracle, PG, Mysql, ... et on peut exécuter des requêtes dedans, on peut également exporter les données sous plusieurs format : le xml y compris. Tu peux même paramétrer çà pour que çà se lance en tache planifiée, super le soft nonMerci mais j'ai une préférence pour le GNU.
Ton PG est hébergé dans un environnement Linux, mais tu peux bien aussi avoir un poste client windows dont navicat installé. Sinon, il me semble que Navicat fonctionne sous les environnements Mac, Windows et Linux.
Hors ligne
Pages : 1