2016-03-30 1 views
2

Ich versuche, die Daten von einer MariaDB-Datenbank in ein 3rd-Party-Programm auf einem Rechner ohne Zugriff auf den DB-Server zu bekommen, also brauche ich flache Textdateien .MySQL-Ausgangsfeldnamen in brauchbare Tag-Namen übersetzen

CSV ist keine Option, da das Programm, das die Daten liest, nicht gut mit Escapes und Zitaten funktioniert.

Also bin ich für jetzt mit XML fest. Zum Glück erlauben MySQL oder MariaDB, den --xml Parameter in beiden mysql und mysqldump Kommandozeilen-Tool.

jedoch alle Spalten haben den Namen ‚Feld‘ mit einem Attribut name = „column_name“:

shell> mysql --xml -uroot -e "SHOW VARIABLES LIKE 'version%'" 
<?xml version="1.0"?> 

<resultset statement="SHOW VARIABLES LIKE 'version%'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<row> 
<field name="Variable_name">version</field> 
<field name="Value">5.0.40-debug</field> 
</row> 

<row> 
<field name="Variable_name">version_comment</field> 
<field name="Value">Source distribution</field> 
</row> 

Für das Programm diese Daten lesen können, um es verstehen, ich muss es sein in folgendem Format:

<row> 
<Variable_name>version</Variable_name> 
<Value>5.0.40-debug</Value> 
</row> 

<row> 
<Variable_name>version_comment</Variable_name> 
<Value>Source distribution</Value> 
</row> 

ich habe ein wenig XSLT-Stylesheet konvertieren folgt geschrieben:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="UTF-8"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="field[@name]"> 
    <xsl:element name="{@name}"> 
    <xsl:value-of select="."/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 

Das funktioniert, ist aber sehr langsam für größere Datenmengen (100k Datensätze, 2M Zeilen XML) mit Xalan C++ von der Kommandozeile. Es kann bis zu 15-30 Minuten dauern.

Gibt es bessere Möglichkeiten, dies zu erreichen? Es ist wirklich schade, dass wir MySQL/MariaDB nicht anweisen können, XML mit normalen Tag-Namen anstelle dieser generischen auszugeben und nach dem Export zu übersetzen.

+0

Können Sie uns mehr über das Programm beim Lesen der Daten erzählen? –

+0

Ich muss einige Daten in Qlikview importieren, was in XML/CSV-Formaten etwas eingeschränkt ist. Bevorzugte Methode der direkten Verbindung über ODBC ist leider keine Option. – ChrisDekker

+0

Fügen Sie 'zu XSLT nach dem' 'hinzu, um die Verarbeitung zu beschleunigen. Eine andere Lösung ist die Verwendung einer allgemeinen Sprache (Java, PHP, Python), die eine Verbindung zu db herstellt, durch die Zeilen iteriert und eine dom-XML-Datei erstellt. – Parfait

Antwort