我正在尝试创建一个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
答案 0 :(得分:1)
您可以使用标准Talend组件来更新此xml文件。
标准Xml组件允许读取非常大的xml文件。 在tFileInput xml上,打开“高级设置”参数。然后选择“Fast with low memory consumption(SAX)”。
然后,您可以设计如下所示的作业,以便在xml数据源和oracle数据库之间合并数据。
您需要使用tFileInputXml在地址节点上使用循环提取所有数据。然后,您将获得与其idHome一起加入的地址列表。检查“getNodes”选项以保持xml格式,如下面的屏幕截图所示。
然后你只需要在tMap中使用“idHome”和“OccAdress”键进行映射。 然后使用连接操作的结果映射输出
完成后,检查您是否将预期结果作为输出,并连接tAdvancedOutputXml以编写xml文件。