使用带有StAX模块的Talend更新大型XML

时间:2014-09-17 09:21:31

标签: xml oracle talend stax

我正在尝试创建一个Talend作业,以更新一个大的XML(1100万行,300 Mb)。

考虑在tJava模块中使用StAX,该模块将打开XML,然后将一些数据读入Oracle数据库并将此数据更新为XML。

我的问题是我真的不知道如何在Talend中使用stax从数据库中获取参数的每一行,并将此行引用的数据更新为XML。

我应该如何组织Talend的模块来开发它? 是StAX的好方法吗?

Oracle表包含

IDHOME  OCCADRESS   STREET              POSTALCODE  CITY
123     1           5 rue de la folie   123456      In Da City
123     2           18 rue de la joie   123457      out Da City
123     3           25  av du moulin    65882       EFDFEA
124     1           12 rue de la taver  123456      ZAER
124     2           18 rue de la joie   123456      SFFEF
125     1           46 bd le roi        39817       DIPFL

我的xml就像:

<root>
  <Home>
    <homeDatas>
       <idHome>123</idHome>
        ....
        .....
    </HomeDatas>
    <peoples>
        <people>...</people>
        <people>...</people>
        <people>...</people>
        <people>...</people>
    </peoples>
    <Adresses>
        <adress>
             <OccAdress>1</OccAdress>
             <street>12 rue de la Paix</street>
             <postalCode>123456</postalCode>
             <city>Da City</city>

        </adress>
        <adress>
             <OccAdress>2</OccAdress>
             .......
        </adress>
        <adress>...</adress>
    </Adresses>
  </Home>
</root>

我在Talend的第一份工作是阅读XML,然后从家中提取所有地址。 然后我丰富并规范化地址,无论如何,并将其放入oracle数据库。

我想创建一个作业(例程),为oracle数据库的每一行获取IDHOME,然后使用OCCADRESS获取....并使用当前行中的数据进行更新。

主要问题是我不知道我能/应该使用什么来“更新”XML,但是talend和StAX似乎是一个好主意。 我希望有一些帮助来创建tJava,使用args所有行更新+原始XML文件并完成工作:

我实际上删除了StAX并希望使用它:http://vtd-xml.sourceforge.net/

感谢您的帮助:-D

1 个答案:

答案 0 :(得分:1)

您可以使用标准Talend组件来更新此xml文件。

标准Xml组件允许读取非常大的xml文件。 在tFileInput xml上,打开“高级设置”参数。然后选择“Fast with low memory consumption(SAX)”。

enter image description here

然后,您可以设计如下所示的作业,以便在xml数据源和oracle数据库之间合并数据。

enter image description here

您需要使用tFileInputXml在地址节点上使用循环提取所有数据。然后,您将获得与其idHome一起加入的地址列表。检查“getNodes”选项以保持xml格式,如下面的屏幕截图所示。

enter image description here

然后你只需要在tMap中使用“idHome”和“OccAdress”键进行映射。 然后使用连接操作的结果映射输出

enter image description here 完成后,检查您是否将预期结果作为输出,并连接tAdvancedOutputXml以编写xml文件。