MariaDBデータベースから、DBサーバーにアクセスできないマシン上で動作するサードパーティプログラムにデータを取得しようとしているため、フラットテキストファイル。MySQL XML出力フィールド名を使用可能なタグ名に変換する
CSVはオプションではありません。データを読み取るプログラムがエスケープや引用でうまく動作しないためです。
私は今のところXMLに固執しています。幸いにも、MySQL、またはMariaDBは、mysql
とmysqldump
コマンドラインツールの両方で--xml
パラメータを使用できます。
は、しかし、すべての列が属性名= 「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>
、私がすることを必要とします次の形式で:
<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>
:
<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>
私はこれを変換する小さなXSLTスタイルシートを書かれています
これは動作しますが、Xalan C++をコマンドラインから使用して大規模なデータセット(100kレコード、2M行のXML)に対しては非常に遅いです。 15〜30分かかることがあります。
これを行うより良い方法はありますか?これらの一般的なタグ名ではなく、通常のタグ名を使用してXMLを出力するようMySQL/MariaDBに指示することはできません。また、エクスポート後に翻訳する必要があります。
データを読み取るプログラムについて詳しく教えてください。 –
いくつかのデータをQlikviewにインポートする必要があります。これはXML/CSV形式ではいくらか制限されています。悲しいことに、ODBCを介した直接接続の推奨方法はオプションではありません。 – ChrisDekker
処理を高速化するために、 ''の後に ' 'をXSLTに追加します。もう1つの解決策は、データベースに接続し、行を反復してdom XMLファイルを作成する汎用言語(Java、PHP、Python)を使用することです。 –
Parfait