2009-04-07 14 views
5

私はSQLデータベースにインポートしたい20ギガXMLファイルで作業しています(これは私がよく知っているので、MySQLが望ましいです)。これは一般的な仕事のようですが、ちょっとグーグルで回った後、私はそれをやる方法を見つけ出すことができませんでした。これを行う最善の方法は何ですか?XMLをSQLデータベースにインポート

私はこの能力がMySQL 6.0に組み込まれていることを知っていますが、それはアルファ開発リリースであるため、現在オプションではありません。

また、スクリプトを作成する必要がある場合は、Pythonを使用することをお勧めします。なぜなら、これは私が最もよく知っているからです。

ありがとうございました。

答えて

1

私はこれをPythonで何度もやっていますが、このような大きなXMLファイルでは決して行っていません。 ElementTreeはPython用の優れたXMLライブラリです。可能であれば、メモリにロードして解析しやすくするために、XMLをより小さなファイルに分割します。

+1

SAXパーサーは、大きなXMLファイルを分割するのに役立ちます。 –

4

getiterator()関数を使用すると、XMLファイル全体を一度に解析することなく繰り返し処理できます。標準ライブラリに含まれているElementTree、またはlxmlでこれを行うことができます。

for record in root.getiterator('record'): 
    add_element_to_database(record) # Depends on your database interface. 
            # I recommend SQLAlchemy. 
0

これは一般的な作業かもしれませんが、SQL Serverの場合と同じように20GBの容量はMySQLでは一般的ではありません。

これは、SQL Server Integration Servicesとカスタムコードを使用して行っています。どちらかが必要かどうかは、データベース内の20GBのXMLで何をする必要があるかによって決まります。それはテーブルの単一の行の単一の列になりますか?子要素ごとに1つの行?

XMLを単にXMLとして保存する場合、SQL ServerにはXMLデータ型があります。このタイプでは、XQueryを使用してクエリを実行したり、XMLでXMLインデックスを作成したり、データベースに格納する一連のXMLスキーマを参照してXML列を「強く型指定する」ことができます。

+0

私は本当にXMLを取り除き、適切に名前を付けられた列としてデータを保存したいと思っています。それはかなりシンプルなフォーマット(ダウンロードAPIを備えた公開コンテンツサイトからのドキュメント)です。 –

2

この作品は、あなたがする必要が多かれ少なかれ何を説明し(私はあなたがそれを使用できるかどうcElementTreeがベストだろうと思います)ElementTreeまたはcElementTreeから

iterparse()機能を見てみましょう:http://effbot.org/zone/element-iterparse.htm#incremental-parsing

このおそらくPythonでそれを行う最も効率的な方法でしょう。適切な要素に.clear()を呼び出すことを忘れないようにしてください(あなた本当に 20gig xmlファイルのメモリツリーに構築する必要はありません。別の答えで説明.getiterator()方法が少し簡単ですが、は必要がありませんツリー全体が最初に - 私はポスターが実際にはiterparse()を念頭に置いていると仮定します)

関連する問題