Pentaho (Spoon / Kettle) を使用して ETL プロセスを実行しています。ここで、XML ファイルを読み取り、要素の値を db に保存します。
これは、「XML からデータを取得」コンポーネントで問題なく機能します...しかし、XML ファイルは非常に大きく、数ギガバイトであり、そのためファイルの読み取りに時間がかかりすぎます。
ペンタホウィキ 言います:
既存の Get Data from XML ステップは使いやすいですが、メモリ処理で必要な DOM パーサーを使用しており、ファイルの一部が非常に大きい場合、ファイルの一部を削除しても十分ではありません。
XML 入力ストリーム (StAX) ステップでは、まったく異なるアプローチを使用して、非常に大きく複雑なデータ構造のユース ケースと、非常に高速なデータ ロードの必要性を解決します...
そのため、私は現在StAXで同じことをしようとしていますが、計画どおりにうまくいかないようです. 要素グループが 1 つしかない XML ファイルでこれをテストしています。ファイルが読み取られ、テーブルにマップ/挿入されます...しかし、すべての値が「未定義」である複数の行と、正しい値を持ついくつかの行をテーブルに取得します。テーブルには 1 行しかないはずなのに、合計で 92 行あります。
フローは次のようになります。
1) StAXで読む
2) 変更された Java Script 値
3) DBへの出力
ステップ 2) では、次のようにしています。
変数 ID;
if ( xml_data_type_description.equals("CHARACTERS") && xml_path.equals("/labels/label/id") ) { id = xml_data_value; } ...
例として、http://forums.pentaho.com/showthread.php?83480-XPath-in-Get-data-from -XML-tool&p=261230#post261230のpositional-staz.zip を使用しています。
XMLファイルを読み取り、要素の値をDBに保存するためにStAXを使用する方法は?
例を探してみましたが、あまり見つかりませんでした。上記の例では、行を挿入する前に "Filter Rows" コンポーネントを使用しています。なぜそれが使用されているのかよくわかりません。必要な値をマップすることはできませんか? Filter Rows コンポーネントを使用していない、または使用方法を知らないために、この問題が発生する可能性があります。
乾杯!