2012-08-31 69 views
0

我做一個ETL過程與Pentaho的(勺/壺),我想讀取XML文件,並存儲元素值分貝。讀取XML的文件使用StAX /水壺(Pentaho的)

這只是正常與「離XML數據」 -component ......但XML文件是相當大的,幾個千兆字節,並且有前讀取文件的時間太長。

Pentaho的維基說:

的從XML步現有的獲取數據更容易使用,但使用DOM 解析器需要在內存中處理和零件甚至清除文件的 是不足夠的,當這些零件非常大。

XML輸入流(StAX的)步驟使用完全不同的方法 解決用例非常大的,複雜的數據和鋼結構的 需要非常快速的數據加載...

有我脫穎而出現在正在試圖對StAX做同樣的事情,但它似乎並不像計劃中那樣工作。我正在用只有一個元素組的XML文件來測試它。該文件被讀取,然後映射/插入到表...但現在我得到多行到表的所有值是「未定義」和一些行,我有正確的值。總的來說,我在表格中有92行,儘管它應該只有一行。

流程是這樣:

1)使用StAX

2)修改Java腳本值讀取

3)輸出到DB

在步驟2)我做如下:

VAR ID;

如果(xml_data_type_description.equals( 「字符」)& & xml_path.equals( 「/標籤/標籤/ ID」)){ ID = xml_data_value; } ...

我使用positional-staz.zip從http://forums.pentaho.com/showthread.php?83480-XPath-in-Get-data-from-XML-tool&p=261230#post261230作爲一個例子。

如何使用StAX讀取XML文件並將元素值存儲到數據庫?

我一直在尋找例子,但沒有發現太多。上面的示例在插入行之前使用「Filter Rows」組件。我不太明白爲什麼它被使用,我不能只映射我需要的值嗎?這可能是因爲我沒有使用或知道如何使用Filter Rows -component而出現此問題。

乾杯!

回答

2

我貼在上面列出的論壇可能基於StAX的解決方案,但因爲它正在等待版主批准,我會在這裏發佈它的要點。

使用StAX的解析器,你可以只選擇那些你所關心的要素,即那些字符的數據類型。對於論壇的例子,你基本上需要以4組爲單位(EXPR,EXCH,DATE,ASK)對行進行非規格化。爲此,您將行號添加到流中(使用添加序列步驟),然後使用計算器確定「桶號」= INT((rownum-1)/ 4)。這將爲您提供一個行Denormaliser步驟的分組字段。

當帖子獲得批准後,您會看到指向使用StAX和上述方法的轉換的鏈接。

這是你在找什麼?如果不是,請讓我知道我誤解的地方,也許我可以幫忙。